どのくらいの頻度でレポートが生成されます。何回か月、1日に数回、数回分を?これらのいずれも、レポートデータの永続的なコピーを保持する保証はありません。この冗長データはスペースの浪費ではなく、データを正確かつ最新の状態に維持するためにDMLを複雑にし、データにエラーが発生する確率を大幅に高めます。
は、car_takeover_report
とcar_fleet
という名前のビューで、図に示すようなデータを提供します。これにより、レポートジェネレータは必要な最新のデータを、冗長な方法で実際にデータを複製することなく、必要な形式で提供します。
また、各車の現在の状態を格納するテーブルも必要です。テーブルcar_takeover_report
が必要なもののほとんどであるように見えます。、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