假设我有一个包含Book_ID(主键),ISBN(唯一)和其他几个如Title / author / etc等列的书籍。
我有另一个表Sales,主键为Sales_ID,链接到Books的外键,以及包含Sales信息的其他字段。只有具有ISBN的图书才有销售。将Book_ID或ISBN作为主键是更好的数据库设计吗?注意:无论选择哪个外键,我都将LEFT JOINING Sales to Books。
更新:有些图书没有ISBN,因为它们没有与它们一起发布。但是,我没有预见到(至少在未来几年内)用户能够出售它们,因为我没有系统来确保不会重复没有ISBN的给定书籍。
答案 0 :(得分:0)
我会一直使用你的主键
答案 1 :(得分:0)
一般情况下,我认为我会将surrogate primary key book_id
作为外键。
如果您使用非主键ISBN
作为外键,我可以识别一些潜在的问题:
ISBN
。如果出售那本书,你会怎么做?ISBN
可能不正确。要编辑它,您必须更新将其用作外键的所有表。ISBN
的图书。你为什么要在没有ISBN
的情况下存储书籍?book_id
上的索引应该比ISBN
字段上的索引更紧凑。答案 2 :(得分:0)
我会一直使用ISBN
。通过这种方式,您可以通过一种简单的方式来强制执行业务规则,“仅对具有ISBN的图书进行销售”,即在ISBN
表格中生成NOT NULL
列Sales
并引用{{ 1 {} ISBN
表中的列。
我不同意@Daniel Vassallo,因为您可能想要开始销售未来没有ISBN 的书籍,您今天要删除数据库中的规则。这个设计缺陷有一个名称:未来的蠕变。此外,“紧凑索引”的考虑因素应该始终是基本数据完整性的考虑因素。