[英]parent child table sql issue
我下面有3個表,其中有許多關系...在學生表中,我有多個外鍵sec_id,ad_id
但我不知道如何添加外鍵作為父子關系,請幫幫我。
CREATE TABLE student(
s_id int AUTO_INCREMENT,
name varchar(30) NOT NULL,
PRIMARY KEY(s_id)
)
CREATE TABLE section(
sec_id int AUTO_INCREMENT,
name varchar(2) NOT NULL,
PRIMARY KEY(sec_id)
)
CREATE TABLE advisor(
ad_id int AUTO_INCREMENT,
name varchar(2) NOT NULL,
PRIMARY KEY(ad_id)
)
如果一個學生最多只能有一位 顧問 ,那就是一對多的關系。
實現該關系的正常模式是在子表中定義外鍵列,該表位於關系的“許多”側。 例如:
ALTER TABLE student ADD ad_id INT COMMENT 'fk ref advisor';
此外,某些存儲引擎(例如InnoDB)支持並強制使用外鍵。 也就是說,我們可以讓數據庫對可以存儲在定義為外鍵的列中的值實施限制(約束)。
例如,我們可以建立一條規則,說存儲在student
表的ad_id
列中的值... 必須在advisor
表的ad_id
列中的一行中找到。
例如:
ALTER TABLE student ADD CONSTRAINT fk_student_advisor
FOREIGN KEY (ad_id) REFERENCES advisor(ad_id)
ON DELETE RESTRICT ON UPDATE CASCADE
這也強制執行一個規則,即如果student
表中有引用它的行,則不能刪除advisor
表中的行。
對於任何一對多關系,都可以重復相同的模式。 例如,如果一個學生可以與最多一個部分 ,我們可以添加以同樣的方式外鍵。
如果存在多對多關系,則我們將引入一個關系表,該表具有引用兩個相關實體表的外鍵。
如果一個學生可以與零個,一個或多個部分相關 ,而一個部分可以與零個,一個或多個學生相關 ,這就是多對多關系的一個示例。
我們可以像這樣引入一個新表(作為示例):
CREATE TABLE student_section
( student_id INT NOT NULL COMMENT 'pk, fk ref student'
, section_id INT NOT NULL COMMENT 'pk, fk ref section'
, PRIMARY KEY (student_id, section_id)
, CONSTRAINT fk_student_section_student
FOREIGN KEY student_id REFERENCES student(s_id)
ON DELETE CASCADE ON UPDATE CASCADE
, CONSTRAINT fk_student_section_section
FOREIGN KEY section_id REFERENCES section(sec_id)
ON DELETE CASCADE ON UPDATE CASCADE
)
有了這個位置,要在學生和科之間建立關系,我們在新的student_section
表中插入一行。 如果該學生與另一部分相關,我們將在表中添加另一行,以引用同一學生,但引用另一部分。
student_id
列中存儲的值引用了student
表中的一行; section_id
列中存儲的值引用section
表中的一行。
(多對多關系實際上是由新表中的行組成的,該新表與其他兩個表具有一對多關系。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.