2016-08-30 62 views
0

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

  • 车队(客户希望看到其汽车的当前状态:车间或跑步,里程,汽车制造商,..)

  • 接管报告(客户希望看到他的汽车移交给车间时的细节:交货日期,汽油量,汽车返回日期,车间名称,车主)。

该图像描述了必须在车辆接管报告和车队报告中显示哪些属性。

我正在考虑设计车队和汽车收购表格,与生成的报告尽可能接近,但在我的表格中有很多属性是多余的。

有人能告诉我我的数据库设计是否仍然可以接受我的用例吗?

enter image description here

回答

0

多久报告生成:一个每月几次,每天一分钟几次,有几次?这些都不能保证持续复制报告数据。这些冗余数据不仅仅是浪费空间,而且使DML严格复杂化,以保持数据的准确性和最新性,并大大增加了错误进入数据的可能性。

可以有什么意见命名为car_takeover_reportcar_fleet它们提供的数据如图所示。这为报告生成器提供了所需格式的最新数据,而无需以冗余方式实际复制数据。

您还需要一张表来包含每辆车的当前状态。表car_takeover_report似乎是最需要的,只需删除mileage,car_ownercar_maker,因为这些表可以与car表一起使用。

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

感谢您的回答!非常感谢 !报告每天生成。我会坚持你的解决方案 – ThomasW