[英]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.