完全な質問:
外部キー (祖父母の主キーを参照) によって祖父母テーブルの行にリンクされている子テーブルから、子テーブルの複合外部キーで参照されている祖父母行のフィールドを使用できますか?
私の現在のデータベース設計には、メインの親テーブルProjectsがあります。Projectsには、 JobTitlesとTasksという 2 つの子テーブルがあります。Tasksには子テーブルSubtasksがあります。Subtasksには子テーブルAssignmentsがあります。これは、従業員をSubtasksに配置する x-ref テーブルです。私が思いついた問題は、 JobTitlesをAssignmentsに割り当てることです。JobTitlesはProjectに属しているため、特定のProjectのAssignmentsは参照のみ可能である必要がありますProjectを共有するJobTitles。私は最近、 JobTitleの選択をプロジェクトを共有する人に制限することに関して、この質問をしました。しかし、それ以来、複合外部キーがはるかにクリーンなソリューションであることがわかりました。
シンプルなデータベース レイアウト:
- プロジェクト
- 役職
- タスク
- サブタスク
- 課題
- サブタスク
ここで複合キーを作成する方法を見つけましたが、そのためにはプロジェクトの主キーを複合外部キーの一部として使用する必要があります。
テーブル:
- プロジェクト
- プロジェクト名(PK)
- ProjectID (一意のインデックス)
- 役職
- 職名
- ProjectID (外部キー -> Projects.ProjectID) (複合 PK: JobTitle-ProjectID)
- JobTitleID (ユニークインデックス)
- タスク
- タスク名
- ProjectID (外部キー -> Projects.ProjectID) (複合 PK: TaskName-ProjectID)
- TaskID (一意のインデックス)
- サブタスク
- サブタスク名
- TaskID(外部キー -> Tasks.TaskID) (複合 PK: SubtaskName-TaskID)
- SubtaskID (一意のインデックス)
- 課題
- EmployeeID (外部キー)
- SubTaskID (外部キー -> Subtasks.SubtaskID) (複合 PK: EmployeeID-SubtaskID)
- JobTitleID (外部キー -> JobTitles.JobTitleID)
- AssignmentID (一意のインデックス)
JobTitle を Assignment に割り当てるために、Assignment の ProjectID (親 Task から) と選択した JobTitleID を使用して、複合外部キーを設定したいと考えています。唯一の問題は、キーで使用するために 2 世代離れた ProjectID を取得する方法がわからないことです。ProjectID を各テーブル内の複合キーにラップすることで、各世代に渡せる可能性がありますが、複合キーは、パフォーマンスにかかる負担を考慮すると、むやみに放り投げるものではありません (値を渡すことは言うまでもありません)ダウンは少しずさんなようです)。他のテーブルを通過せずに、キーで使用するために ProjectID を取得する方法はありますか?