【问题标题】:Is it good practise to minimize the number of foreign keys in database design在数据库设计中尽量减少外键的数量是一种好习惯吗
【发布时间】:2012-12-24 22:58:01
【问题描述】:

我几乎没有后端和数据库设计方面的经验,所以我想知道,尽量减少数据库中的外键数量是一种好的做法吗?

例如,让我们考虑登录搜索网站:

USER --hasA--> SESSION --makes--> QUERY

在这种情况下,用户和会话之间是一对多的关系,而会话和查询之间是一对多的关系。 session 有一个 user_id 的外键和 query 有一个 session_id 的外键是有意义的,但是查询表是否应该有 user_id 的外键?为什么或为什么不?

提前致谢!

【问题讨论】:

  • 为什么要最小化它们?这些强制引用完整性,没有它们,您将处于数据库可以保存不一致数据的地方。

标签: database database-design


【解决方案1】:

user_id 添加到QUERY 会使数据库变得多余。这就是为什么这主要是不好的做法。在极端情况下(很少),它可能是必要的性能优化。

尽量减少外键的数量通常不是设计目标,因为它没有任何帮助。

典型的设计目标是拥有一个最自然地对业务领域建模的干净数据库。从这个意义上说,不要将user_id 添加到QUERY。但绝对添加所有有意义的FK。这确实为开发成本和应用程序可靠性带来了明显的好处。

【讨论】:

  • 我想我问的不是它是否是一个设计目标,而是一个很好的启发式遵守。不过谢谢!
【解决方案2】:

让我们考虑一个极端的例子来展示这种方法的后果。如果将此解决方案应用于模型中的所有表会发生什么? 让我们用一些额外的表格来扩展您的模型,看看它带来了什么:

现在是否清楚它与正确的数据库架构有何关系?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2020-09-10
    相关资源
    最近更新 更多