数据库设计:主键和多对多关联

Database Design: Primary key and many to many associations

这是我的第一个家庭图书馆数据库设计。我有一个关于如何在每个 table 中实现主键的问题,我也很想知道是否像我一样接受 table 有许多 table 与一个外国关联与 "contributor_id."

的许多关系

并非我的所有 table 都有主键。如果主键不应该是外键(正如我所理解的)什么可以作为 copy_info 和 book_info table 中的主键?我不确定我是否正确实施了可能存在多对多关系的中介 tables。在这种情况下我应该要求复合主 钥匙?

也许对如何做到这一点有不同的看法,但任何见解都将不胜感激。如果我对此很陌生,请原谅我的问题不够具体。

我只是给出一些快速的建议:

  • 我知道左边的 4 个表格是 book_info 和其他 4 个表格之间的中间表格,其中包含译者信息、作者信息等;我对吗?多对多关系也是如此(一本书可以有很多作者,一个作者有很多书),但是如果每次尝试插入 另一本书的同一贡献者时都设置这样的表 会导致重复键错误!因此,从那里删除密钥

  • 将键分配给这些聚合表的正确方法是将键分配给两个值(因此您永远不会破坏 "uniqueness" 约束), BUT 在这些简单聚合表

  • 中分配键完全没有用(并且浪费space 和 Db 资源)
  • books 和 book_info 是一对一的关系吗? 所以为了整洁起见,将它分成 2 个单独的表是有意义的目的(例如,如果你有很多字段并且你想通过一些逻辑标准将它们分开)
    books和book_info又是多对多关系?在这种情况下,"id" 字段作为键是一个正确的解决方案,但将表 books 和 copy_info 耦合在一起是不正确的(最好将 copy_info 耦合到 book_info ,所以你会把它拆分成两个一对多的关系(在这种情况下更容易管理)

希望能帮到你一点点,反正你只要在现场稍加练习就可以轻松解决。

我误解了如何实现多对多关系。一旦我放入联结表,我的表都有主键。 Updated Design