规范化数据库对资源的影响是什么?

cde*_*zaq 5 sql database resources database-design normalization

从相对未规范化的形式获取数据库并对其进行规范化时,资源利用率会发生什么变化(如果有的话)?

例如,规范化通常意味着从更少的表创建更多的表,这意味着数据库现在具有更多的表,但是其中许多表非常小,允许经常使用的表更好地适应内存.

更多的表还意味着需要(可能)更多的连接来获取抽象出来的数据,因此可以预期系统需要进行的更多连接会产生某种影响.

那么,规范化非规范化数据库对资源使用有什么影响(即什么会改变)呢?


编辑:为了添加一些上下文,我有一个现有的(即遗留的)数据库,有超过300个可怕的表.大约1/2的数据是TEXT,另一半是char字段或整数.没有任何限制.我问的原因主要是获取更多信息,以说服其他人事情需要改变,并且不会降低性能或可维护性.不幸的是,那些我必须说服的人已经足够了解非规范化数据库的性能优势,希望尽可能避免规范化.

Hen*_*pel 13

这通常无法以一般方式得到解答,因为影响将根据相关数据库的具体情况和使用它的应用程序而有很大差异.

所以你基本上表达了对影响的一般期望:

  1. 随着冗余数据被删除,存储的总体内存需求将下降
  2. CPU需求可能会增加,因为查询可能会变得更加昂贵(请注意,在许多情况下,规范化数据库上的查询实际上会更快,即使它们更复杂,因为查询引擎有更多优化选项)
  3. 开发资源需求可能会增加,因为开发人员可能需要构建更复杂的查询(但另一方面,您需要更少的开发工作来维护数据完整性)

所以唯一真正的答案是通常的:它取决于;)

注意:这假设我们正在谈论谨慎和故意的非规范化.如果你指的是"随着数据的出现而把一些表放在一起"的方法与没有经验的开发人员共同使用,我会冒这样的说法:规范化将减少所有级别的资源需求;)


编辑:关于cdeszaq添加的具体情况,我会说'祝你好运得到你的观点';)

显然,有超过300个表并且没有约束(!),你的问题的答案肯定是"正常化将减少所有级别的资源需求"(并且可能非常大),但是:

重构这样一团糟将是一项重大任务.如果只有一个应用程序使用这个数据库,它已经是可怕的 - 如果有很多,它可能会成为一场噩梦!

因此,即使从长远来看,正常化将大大减少资源需求,但根据具体情况,可能不值得麻烦.这里的主要问题是关于长期范围 - 这个数据库有多重要,它将被使用多长时间,将来会有更多的应用程序使用它,当前的维护工作是不变还是增加等等......

不要忽视它是一个正在运行的系统 - 即使它是丑陋和可怕的,根据你的描述,它还没有被打破 ;-)


小智 6

"归化"的适用仅仅并且专门逻辑数据库设计.

数据库的逻辑设计和数据库的物理设计是两个完全不同的东西.数据库理论一直都是为了这样做.忽视/忽视这种区别的开发人员(出于无知或出于疏忽,或出于懒惰或出于任何其他所谓但无效的"理由")的绝大多数,都不能使他们做对.

一个合乎逻辑的设计可以说是归一化与否,而是一个逻辑设计本身并没有携带任何"工作特性"任何责任.就像'c:= c + 1;' 并不具有任何性能特征.

一个物理设计并确定"性能",但随后又在物理设计根本没有被"归一化与否"的质量.

这种对"正常化损害性能"的错误认识实际上只不过是具体证明当今存在的所有DBMS引擎都严重缺乏物理设计选项.