Foreign-Key
多對多關聯表PK作為其他表中的FK
我有以下表格:
school
、teacher
和。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) , ... );