繁体   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