2009-06-15 73 views

回答

2

您的假设是正确的。非规范化会提高性能,但不利之处在于它降低了正确性。

此主题的长度在此以前stackoverflow question

2

岂不行的在数据库中的宽度增加了讨论?

非规范化只应作为最后手段的优化来完成。

它会增加数据库的大小,并增加数据重复并使数据难以保持最新和同步。

+0

这就是为什么它非常适合数据仓库(不保留任何最新信息),并且不适合在线交易数据库。不同的用途对不同的设计会更好。 – 2009-06-15 20:33:11

+0

行的宽度会增加?抱歉。你能解释一下吗? – 2009-06-15 20:38:17

0

非规范化是一个相当广泛的术语,所以没有快速回答您的问题。

在避免加入的情况下,检索速度可能会更快。但是,您正在增加更新和数据维护的复杂性,因此需要进行折衷。

您似乎在询问在系统范围内查询次数或速度是否会得到提高,这也不完全是它的意义 - 最好将其视为特定的本地优化在应用程序中遇到瓶颈,即要考虑使单个查询或一组查询运行得更快。

2

如果您碰巧在Microsoft SQL Server中工作,我强烈建议您将表格标准化并使用所谓的索引视图进行非规范化。这些是半永久性的数据结构,只要基础表被更新就更新。通过这种方式,您可以保持两全其美 - 规范化模式和快速非规范化数据!

Oracle也可能存在类似的情况,不确定。

0

除了“与数据库中的行”,你的答案都是正确的。

“反规范化”意味着在一行中存储比绝对必要的更多信息。如果不增加行宽,这是不可能的。

但最重要的是:你没有提出所有的问题。

你还在想,如果你故意在你的数据库中引入Redencancy,那么你不应该同时引入一些额外的数据库约束,以防止你的数据库包含损坏的数据(与自身相矛盾的数据)?

如果对这个问题的答案是'是',那么也许你应该问自己,是否强制执行所有那些仅仅因为你介绍赎回而需要的额外约束,不会导致你产生类似的(或多更新性能损失)。

相关问题