[英]Which foreign key to use in a many-to-one table
假設我有一個表包含Book_ID(主鍵),ISBN(唯一)和其他幾個如Title / author / etc的書籍。
我有另一個表Sales,主鍵為Sales_ID,鏈接到Books的外鍵,以及包含Sales信息的其他字段。 只有具有ISBN的圖書才有銷售。 將Book_ID或ISBN作為主鍵是更好的數據庫設計嗎? 注意:無論選擇哪個外鍵,我都將LEFT JOINING Sales to Books。
更新:有些書沒有ISBN,因為它們沒有與它們一起發布。 但是,我沒有預見到(至少在接下來的幾年內)用戶能夠出售它們,因為我沒有系統來確保不會重復沒有ISBN的給定書籍。
我會一直使用你的主鍵
一般來說,我認為我會將代理主鍵 book_id
作為外鍵。
如果您要將非主鍵ISBN
用作外鍵,我可以識別一些潛在問題:
ISBN
。 如果出售那本書,你會怎么做? ISBN
可能不正確。 要編輯它,您必須更新將其用作外鍵的所有表。 ISBN
書籍。 你為什么要首先存儲沒有ISBN
書籍? book_id
上的索引應該比ISBN
字段上的索引更緊湊。 我會一直使用ISBN
。 通過這種方式,您可以通過一種簡單的方式來強制執行業務規則,“僅對具有ISBN的書籍進行銷售”,即在“ Sales
表格中將ISBN
列NOT NULL
並引用Books
表格中的ISBN
列。
我不同意@Daniel Vassallo,因為你可能想要開始銷售未來沒有ISBN的書籍,你今天就想把這條規則放到數據庫中。 這個設計缺陷有一個名稱:未來的蠕變。 此外,“緊湊索引”的考慮因素應該始終是基本數據完整性的考慮因素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.