代码之家  ›  专栏  ›  技术社区  ›  Ben G

在多对一表中使用哪个外键

  •  3
  • Ben G  · 技术社区  · 15 年前

    假设我有一个Books表,其中包含Book\ ID(主键)、ISBN(Unique)和其他几个列,如Title/author/等。

    3 回复  |  直到 15 年前
        1
  •  0
  •   Daniel Vassallo    15 年前

    surrogate primary key book_id 作为外键。

    如果使用非主键,我可以确定一些潜在的问题 ISBN

    • 你可能有一个失踪或未知的 国际标准书号 为了一本书。万一那本书有售,你会怎么办?
    • 你可能有不正确的答案 国际标准书号 . 要编辑它,必须更新将它用作外键的所有表。
    • 国际标准书号 国际标准书号
    • 索引 图书编号 应该比一张桌子上的要紧凑得多 现场。
        2
  •  0
  •   Nathan Koop    15 年前

    我总是用你的主键

        3
  •  0
  •   onedaywhen    15 年前

    我总是用 ISBN . 这样你就有了一个简单的方法来执行你的业务规则,“销售只存在于有ISBN的图书”,即通过 NOT NULL Sales 中的列 Books 桌子。

    我不同意@danielvassallo的说法,因为你可能想开始销售没有ISBN的书 未来 您可能希望今天就将规则删除到数据库中。这个设计缺陷有一个名字:未来蠕变。此外,“紧凑索引”的考虑应始终是基本数据完整性的次要考虑。