规范化应该走多远?

Fer*_*gus 33 performance normalization learning

我在数据库中有相当数量的数据。我有格式良好的表格和它们之间的良好关系,我的数据中有一些冗余。但是我应该在规范化方面走多远?过多的标准化是否存在性能缺陷?

jco*_*and 40

你应该尽可能地走得更远,而不是更远。当然。~ 问题可能是这有点艺术,这就是为什么这不是一门纯科学。

我们的主要产品是一个分析和报告系统,所以在这方面,我们有很多详细的记录。我们最初为一些子记录设计了在一个公共 ID 上有很多连接,但我们发现如果我们对几个字段进行非规范化,我们可以减少很多连接,我们可以消除很多性能问题。

但我们只知道,因为我们 1) 创建了一个“规范化”设计,2) 开始使用它,3) 在数十个表中的数亿行后分析实际性能。

最终的故事是,在我们分析之前,我们无法确定什么对我们有用。我们喜欢标准化的想法,这样我们就可以更轻松地更新,但最终实际性能是决定性因素。这是我给你的建议:个人资料,个人资料,个人资料。

  • 艺术而不是科学让我相信它是伏都教。有参考吗? (4认同)
  • @Abel 一般我的轶事怎么样?分析器可能能够建议非规范化规则,但这些规则来自程序员的经验。所有的编程都是一门艺术。当我以后使用全键盘时,我会找到更出名的人说同样的话。 (3认同)
  • @Fergus 很高兴你喜欢它。我一直发现轶事最有效。 (2认同)
  • @abel - '艺术是一门拥有超过 7 个自由度的科学'。超过一定程度的复杂性,解决问题的详尽方法变得不可行。在这一点上,基于经验的启发式方法是最有效的。可悲的是,在计算领域,除了微不足道的软件系统之外,任何东西都很容易实现这种复杂程度。 (2认同)

REW*_*REW 10

只有当规范化支持您的数据模型足以保证它时,它才是一个目标。它旨在成为允许增长、管理和可维护性的指南。请记住,无论是关于规范化的书还是它的作者,都不会构建或维护您的数据库或其应用程序。

关于“太多规范化”主题的好读物在这里。

而且,是的,过多的标准化可能会对性能产生影响。这将是更深入的表遍历,以在将状态指示器表拉出到单独的表时拾取它们。有人会说这通常在更新速度(将状态文本从“良好”更改为“良好”或类似内容)或可维护性方面被否定。

  • 这是关于这个主题的额外好读物,更有趣 http://qntm.org/gay (2认同)

one*_*hen 6

我建议阅读Chris Date近期出版的几本书中的以下附录:

为规范化干杯的两个人

规范化远非灵丹妙药,通过考虑它的目标是什么以及它对这些目标的衡量程度,我们可以很容易地看出……

我必须明确表示,我不希望我在本节中的评论被视为任何形式的攻击。我坚信,任何不完全标准化的设计都是强烈禁忌的......