1

我是否需要爲這種情況設置外鍵? 我在數據庫設計方面很薄弱,特別是在mysql中......我可以知道如果我想爲他們設置外鍵,我應該爲他們設置什麼?如果人們刪除...所有引用people_id將一起刪除,是否可以設置,而表太多? THX答覆MySQL外鍵:我應該設置它嗎?

enter image description here

回答

4

是。外鍵約束強制引用完整性,這是確保您的數據可靠和高質量的關鍵原則。否則,您的people_address表可能會引用people表中不存在的people_id值,並且會是孤兒。外鍵約束可以防止這種情況發生。

所以,就這樣做。真的沒有理由不這樣做。

定義外鍵,如在people_email表如下:

ALTER TABLE people_email添加約束外鍵(people_id)參考文獻人(ID)ON DELETE CASCADE;

這將意味着您無法在people_email中輸入該人員中不存在該表中的people_id的記錄。此外,如果您刪除人員中的父行,那麼在people_email中引用它的行將被自動刪除。

我個人更喜歡手動刪除子表中的所有行,但不使用級聯刪除。這是一些額外的應用程序開發工作,但它讓我感覺更安全,並且允許我對鎖定進行一些控制,並確保查詢儘可能高效。

+0

我可以知道我應該設置什麼嗎?例如。將people_address中的people_id設置爲primary,然後將外鍵鏈接到db.people.id並級聯爲update和delete?我希望地址在人們刪除時會被刪除。當人們更新人不會影響地址,除了人們正在編輯地址... – 1myb 2011-04-06 02:22:13

+1

@ spencer-lim我根據你的問題更新了我的答案。 – squawknull 2011-04-06 02:28:53

相關問題