一尘不染

标准化数据库会对资源产生什么影响?

sql

从相对不规范的形式获取数据库并将其规范化时,人们可能期望资源利用率 发生 什么 变化 (如果有)?

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

表的数量越多,意味着(潜在地)需要更多的联接才能获取抽象出的数据,因此,人们可能会期望系统需要执行的联接数量越多,就会产生某种影响。

那么,标准化未标准化的数据库会对资源使用产生什么影响(即,将发生什么变化)?


编辑:要添加一点上下文,我有一个现有的(即旧版)数据库,其中包含300多个可怕的表。大约1/2的数据是TEXT,另一半是char字段或整数。没有任何限制。我要求这样做的原因主要是为了获得更多信息,以说服其他人需要进行更改,并且性能或可维护性不会降低。不幸的是,我不得不说服的人们对非规范化数据库的性能好处了解得足够多,希望尽可能避免标准化。


阅读 151

收藏
2021-05-05

共1个答案

一尘不染

实际上,这不能完全以一般的方式回答,因为其影响会因所涉及的数据库和使用该数据库的应用程序的具体情况而有 很大 差异。

因此,您基本上陈述了有关影响的总体期望:

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

因此,唯一真正的答案是通常的:取决于;)

注意:假设我们正在谈论 谨慎和有意的 非规范化。如果您指的是 经验丰富的开发人员 只需将一些表放在一起”的
方法,这种方法对于经验不足的开发人员来说是常见的,我冒这样的说法,即规范化将减少所有级别的资源需求;)


编辑:关于cdeszaq添加的特定上下文,我想说“祝你好运通过”;)

显然,具有300多个表且 没有任何限制 (!),您的问题的答案肯定是“规范化将减少所有级别的资源需求”(而且可能非常大), 但是:

整顿这样一团糟 将是一项艰巨的任务 。如果只有一个应用程序在使用此数据库,那么它已经很可怕了-如果有很多应用程序,那么它可能会成为一场噩梦!

因此,即使从长远来看,规范化可以从实质上减少资源需求,但根据情况的不同,这样做 可能 也不值得。这里的主要问题是关于长期范围的问题-
该数据库有多重要,它将使用多长时间,将来会使用更多的应用程序,当前的维护工作量是恒定的还是在增加等?

不要忽略它是一个 正在运行的系统 -即使它丑陋而可怕,根据您的描述, 它还没有(但)坏掉 ;-)

2021-05-05