Foreign-Key

多對多關聯表PK作為其他表中的FK

  • February 5, 2020

我有以下表格:schoolteacher和。school_teacher``student

school_teacher``school是一個使用自動生成的 PK 和和的 FK 的多對多聯結表teacher

一個學生屬於一個特定學校的老師,一個學校的老師有很多學生。

我的問題是我是否應該在學生表中創建外鍵以分別指向school_teacher表 PK 或兩個表 PK ( school, teacher)?

我相信參照完整性最好是參照school_teacher確保只有在學校和老師之間存在關係時才插入交易記錄。就最佳實踐而言,解決此問題的最佳選擇或最佳方法是什麼?還有比我提到的更好的可能性嗎?

一般來說,是否存在關聯表的主鍵是另一個表中的外鍵的問題?

這只是一個例子。在一個真實的案例中,一個學生可能有不止一個老師。這是為了簡化範例。

罪魁禍首是自動生成的密鑰:school_teacher is a many-to-many junction table using an autogenerated PK and the FKs of school and teacher..

你為什麼需要它?如果學校和老師是候選鍵,我會認為它是 pk

編輯:草圖

CREATE TABLE SCHOOLS
( SCHOOL_ID ... NOT NULL PRIMARY KEY
, ...
);

CREATE TABLE TEACHERS
( TEACHER_ID ... NOT NULL PRIMARY KEY
, ...
);

CREATE TABLE SCHOOL_TEACHERS
( SCHOOL_ID ... NOT NULL
     REFERENCES SCHOOLS (SCHOOL_ID)
, TEACHER_ID ... NOT NULL PRIMARY KEY
     REFERENCES TEACHERS (TEACHER_ID)

,     PRIMARY KEY (SCHOOL_ID, TEACHER_ID)
);

我發現“學生屬於特定學校的老師”的規則有點奇怪,但如果這是你想要執行的:

CREATE TABLE STUDENTS
( STUDENT_NO NOT NULL PRIMARY KEY 
, SCHOOL_ID ... NOT NULL
, TEACHER_ID ... NOT NULL

,     FOREIGN KEY (SCHOOL_ID, TEACHER_ID)
     REFERENCES SCHOOL_TEACHERS (SCHOOL_ID, TEACHER_ID)
, ...
);

引用自:https://dba.stackexchange.com/questions/258726