これは、他のテーブルの1つの主キーを参照する1つのテーブルに2つの外部キーがあっても大丈夫ですか?
EmployeeIDは、employeeテーブルの主キーであり、timesheetテーブルでは外部キーとして2回表示されます。
他の従業員に代わってティムシートに記入する管理ユーザーはほとんどいません。
Timsheetテーブルのフィールド 'TimsheetFor'には、プロジェクトに取り組んだその人のemployeeIDがあり、フィールド 'EnteredBy'または 'FilledBy'には、このタイムシートに記入したその人のemployeeidがあります。
次のうち正しいのはどれですか。
注:表には、この質問に関連するフィールドのみが表示されています。
オプション1を使用します。各外部キー値は関連するテーブルの異なるレコードを参照するため、2つの外部キー列が異なるテーブルの同じ主キー列を参照することは完全に問題ありません。
きっとオプション2は機能しますが、基本的にはTIMESHEET_TABLE
とTIMESHEET_FILLED_BY
の間に1対1の関係があり、2つのテーブルが不要になり、保守が難しくなります。
実際、ENTERED_BY
とTIMESHEET_FOR
の両方がペアで必要な場合は、データベースと外部キーによって自動的に適用されるため、オプション1を使用する方がはるかに合理的です。
はい、問題ありません。あるテーブルの主キーを別のテーブルの外部キーとして2回使用できます。
オプション1は完璧なソリューションです。外部キー制約を次のように定義できます
Timesheet_For列の最初の外部キー制約
ALTER TABLE TIMESHEETTABLE
ADD CONSTRAINT fk_TimesheetTable_EmployeeTable
FOREIGN KEY (TIMESHEET_FOR)
REFERENCES EMPLOYEETABLE(EMPLOYEE_ID)
Entered_By列の2番目の外部キー制約
ALTER TABLE TIMESHEETTABLE
ADD CONSTRAINT fk_TimesheetTable_EmployeeTable_1
FOREIGN KEY (ENTERED_BY)
REFERENCES EMPLOYEETABLE(EMPLOYEE_ID)