簡體   English   中英

在多對一表中使用哪個外鍵

[英]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表格中將ISBNNOT NULL並引用Books表格中的ISBN列。

我不同意@Daniel Vassallo,因為你可能想要開始銷售未來沒有ISBN的書籍,你今天就想把這條規則放到數據庫中。 這個設計缺陷有一個名稱:未來的蠕變。 此外,“緊湊索引”的考慮因素應該始終是基本數據完整性的考慮因素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM