履歴および階層 SQL テーブルを作成する場合、開始日と終了日のフィールドを使用するのと、すべての日付に 1 つの日付フィールドを使用するのとではどちらが良いですか? それぞれに長所と短所がありますが、どちらがより最適化され、エレガントで、コーナー ケースを最も効果的に考慮しているかについての証拠を探しています。
例 -
-- Start/Stop
create table roster (
id bigint identity primary key,
start_date date not null,
stop_date date not null,
employee_id int not null references employee (id),
supervisor_id int not null references employee (id),
unique(start_date, stop_date, employee_id)
)
-- Single Date
create table roster (
id bigint identity primary key,
row_date date not null,
employee_id int not null references employee (id),
supervisor_id int not null references employee (id),
unique(row_date, employee_id)
)