例如,规范化通常意味着从更少的表创建更多的表,这意味着数据库现在具有更多的表,但是其中许多表非常小,允许经常使用的表更好地适应内存.
更多的表还意味着需要(可能)更多的连接来获取抽象出来的数据,因此可以预期系统需要的更多连接数会产生某种影响.
那么,对未规范化数据库进行规范化会对资源使用产生什么影响(即什么会改变)?
编辑:
为了添加一些上下文,我有一个包含300多个可怕表的现有(即遗留)数据库.大约1/2的数据是TEXT,另一半是char字段或整数.没有任何限制.我问的原因主要是获取更多信息,以说服其他人事情需要改变,并且不会降低性能或可维护性.不幸的是,那些我必须说服的人已经足够了解非规范化数据库的性能优势,希望尽可能避免规范化.
解决方法
所以你基本上表达了对影响的一般期望:
>随着冗余数据被删除,存储的总体内存需求将下降
> cpu需求可能会上升,因为查询可能会变得更加昂贵(请注意,在许多情况下,规范化数据库上的查询实际上会更快,即使它们更复杂,因为查询引擎有更多优化选项)
>开发资源需求可能会增加,因为开发人员可能需要构建更复杂的查询(但另一方面,您需要更少的开发工作来维护数据完整性)
所以唯一真正的答案是通常的:它取决于;)
注意:这假设我们正在谈论谨慎和有意的非规范化.如果你指的是“随着数据的出现而把一些表放在一起”的方法与没有经验的开发人员共同使用,我会冒这样的说法:规范化将减少所有级别的资源需求;)
编辑:关于cdeszaq添加的具体情况,我会说’祝你好运得到你的观点’;)
显然,有超过300个表并且没有约束(!),你的问题的答案肯定是“正常化将减少所有级别的资源需求”(并且可能非常大),但是:
重构这样的混乱将是一项重大任务.如果只有一个应用程序使用这个数据库,它已经是可怕的 – 如果有很多,它可能会变成一场噩梦!
因此,即使从长远来看,正常化将大大减少资源需求,但根据具体情况,可能不值得.这里的主要问题是关于长期范围 – 这个数据库有多重要,它将被使用多长时间,将来会有更多的应用程序使用它,当前的维护工作是不变还是增加等等……
不要忽视它是一个正在运行的系统 – 即使它是丑陋和可怕的,根据你的描述,它还没有被打破;-)