这个问题可能更适合程序员。如果是这样,请迁移。

我目前正在考虑典型数据模型的复杂性。每个人都知道应该对数据模型进行规范化,但是另一方面,规范化的数据模型将需要大量联接才能在以后重新组装数据。根据所涉及表的大小,联接是潜在的昂贵操作。因此,我要解决的问题是,通常如何进行这种权衡? IE。实际上,在设计数据模型时,您会发现在典型查询中可以接受多少个联接?当在单个查询中计算多个联接时,这将特别有趣。

举例来说,假设我们有一些用户,他们拥有房屋,房屋中有房间,房间中有抽屉,其中包含物品。用上述意义上的用户,房屋,房间,抽屉和物品的 table 对它进行标准化,稍后,当获取属于某个用户的所有物品时,我将需要加入五个 table 。在我看来,这似乎非常复杂。

表格的大小也很可能会涉及到。连接具有很少数据的五个表并不比具有数百万行的三个表差。还是这种考虑是错误的?

最佳答案

reasons for the Database Normalizations,并且我已经看到将20多个表和子查询连接在一起的查询,并且在很长一段时间内都正常工作。我确实发现标准化的概念是一个巨大的胜利,因为它使我能够在不影响到目前为止工作部分的情况下将新功能引入到现有的工作应用程序中。

数据库具有不同的功能,使您的生活更轻松:

  • 您可以为最常用的查询创建 View (尽管这不是 View 的唯一用例);
  • 一些RDBMS提供了Common Table Expressions(CTE),它允许您使用命名子查询以及递归查询。
  • 一些RDBMS提供了扩展语言(如PL/SQL或PL/pgSQL),使您可以开发自己的函数来隐藏模式的复杂性,并且仅使用API​​调用来操作数据。

  • 不久前,关于How does a SQL statement containing mutiple joins work?出现了某种与之相关的问题,也许也值得研究一下。

    使用规范化的数据库开发应用程序更加容易,因为采用适当的方法,您可以通过 View /函数隔离架构,并使您的应用程序代码不受架构变更的影响。如果您要进行非规范化的设计,则可能发生设计更改会影响您的大量代码的情况,因为非规范化的系统往往会以进行更改的可能性为代价进行高度性能优化。

    关于sql - 在实践中可行多少个联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11257389/

    10-15 23:43