我正在设计一个主要用于报告的关系数据库。有两份报告:
图像描述了汽车接管报告和车队报告中必须显示的属性。
我正在考虑设计车队和汽车接管表,与生成的报告一样接近,但是在我的表中,很多属性都是多余的。
有人能告诉我我的数据库设计对我的使用是否还可以接受吗?

发布于 2016-09-01 00:11:26
报告产生的频率是多少次:一个月几次,一天几次,一分钟几次?所有这些都不值得保留报告数据的持久副本。这种冗余数据不只是浪费空间,它严重复杂化了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 ...;https://stackoverflow.com/questions/39232854
复制相似问题