首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关系数据库设计:报表表中的重复属性

关系数据库设计:报表表中的重复属性
EN

Stack Overflow用户
提问于 2016-08-30 16:38:22
回答 1查看 613关注 0票数 0

我正在设计一个主要用于报告的关系数据库。有两份报告:

  • 车队(客户希望看到其汽车的现状:车间或运行,里程,汽车制造商,.)
  • 接管报告(客户希望看到他的汽车被交给车间时的详细信息:交付日期、汽车中气体的质量、返回日期、车间名称、车主)。

图像描述了汽车接管报告和车队报告中必须显示的属性。

我正在考虑设计车队和汽车接管表,与生成的报告一样接近,但是在我的表中,很多属性都是多余的。

有人能告诉我我的数据库设计对我的使用是否还可以接受吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-01 00:11:26

报告产生的频率是多少次:一个月几次,一天几次,一分钟几次?所有这些都不值得保留报告数据的持久副本。这种冗余数据不只是浪费空间,它严重复杂化了DML以保持数据的准确和最新,并大大增加了错误进入数据的可能性。

您可以拥有名为car_takeover_reportcar_fleet的视图,它们提供图表中所示的数据。这使报表生成器能够以所需的格式获得它所需的最新数据,而不会以冗余方式实际重复数据。

您还需要一个表来包含每个汽车的当前状态。表car_takeover_report似乎是所需的大部分内容,只需删除mileagecar_ownercar_maker,因为它们在与car表的连接中可用。

代码语言:javascript
复制
create table Company(
  ID      int   auto_increment primary key,
  Name    varchar()  not null,
  Street  varchar()  not null,
  City    varchar()  not null
);

create table Car(
  ID      int   auto_increment primary key,
  Mileage int  not null,
  OwnerID int   not null references Company( ID ),
  Make    varchar()  not null -- Really should be FK to mfgs table
);

create table CarStatus(
  ID      int not null primary key, -- one to one to Car table
  EffDate date not null,
  ReturnDate date,
  Fuel    int,
  Workshop varchar()   -- Really should be FK to Workshops table
);

create view CarTakeoverReport as
  select  s.EffDate as date_of_takeover, s.ReturnDate as date_of_return,
          c.Mileage, c.OwnerID as owner, s.Fuel as quantity_of_gas,
          c.Make as car_maker, s.Workshop
    from  Car       c
    left  join CarStatus s
      on  s.ID = c.ID;

create view CarFleet as
  select  ...;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39232854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档