我正在设计一个主要用于报表的关系数据库。有两份报告:关系数据库设计:用于报表的重复属性
车队(客户希望看到其汽车的当前状态:车间或跑步,里程,汽车制造商,..)
接管报告(客户希望看到他的汽车移交给车间时的细节:交货日期,汽油量,汽车返回日期,车间名称,车主)。
该图像描述了必须在车辆接管报告和车队报告中显示哪些属性。
我正在考虑设计车队和汽车收购表格,与生成的报告尽可能接近,但在我的表格中有很多属性是多余的。
有人能告诉我我的数据库设计是否仍然可以接受我的用例吗?
我正在设计一个主要用于报表的关系数据库。有两份报告:关系数据库设计:用于报表的重复属性
车队(客户希望看到其汽车的当前状态:车间或跑步,里程,汽车制造商,..)
接管报告(客户希望看到他的汽车移交给车间时的细节:交货日期,汽油量,汽车返回日期,车间名称,车主)。
该图像描述了必须在车辆接管报告和车队报告中显示哪些属性。
我正在考虑设计车队和汽车收购表格,与生成的报告尽可能接近,但在我的表格中有很多属性是多余的。
有人能告诉我我的数据库设计是否仍然可以接受我的用例吗?
多久报告生成:一个每月几次,每天一分钟几次,有几次?这些都不能保证持续复制报告数据。这些冗余数据不仅仅是浪费空间,而且使DML严格复杂化,以保持数据的准确性和最新性,并大大增加了错误进入数据的可能性。
你可以有什么意见命名为car_takeover_report
和car_fleet
它们提供的数据如图所示。这为报告生成器提供了所需格式的最新数据,而无需以冗余方式实际复制数据。
您还需要一张表来包含每辆车的当前状态。表car_takeover_report
似乎是最需要的,只需删除mileage
,car_owner
和car_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 ...;
感谢您的回答!非常感谢 !报告每天生成。我会坚持你的解决方案 – ThomasW