3

我目前正在开发一个 mvc 应用程序以从现有的 sql server 数据库中读取。数据库是非规范化的 - 我正在考虑修改一些表以在一定程度上对其进行规范化。

这导致与其他开发人员讨论作为读取数据的最有效方式,或者结构是否应该改变。数据将通过 ado.net 使用存储过程读取。我的问题是,在一个表中有多个字段(非规范化)或有几个带有内部连接(规范化)的表来检索数据是否更高效?

我应该提到,表上的操作将是 95% 读取,5% 写入。

4

5 回答 5

4

您应该使用非规范化数据进行数据分析,密集报告使用。出于上述目的,具有非规范化将有助于提高性能。

对于您将要实现的应用程序没有太多了解,对于“标准”客户端-服务器应用程序,您应该使用 DOM 大量类并不断读写数据,我会投票支持规范化数据并尽可能避免维护重复数据。尝试简化表的设计,使它们对您的域模型“感觉舒适”。

因此,简而言之,为密集数据读取规范化更高性能,为密集读取和写入域对象模型类非规范化更高性能(和更全面)。

于 2012-10-17T22:01:14.933 回答
1

为报告应用程序保持非规范化。

只要非规范化结构满足您的需求,它就会更快。

如果它是从规范化数据库中填充的,那么一切都很好。即使不是,我仍然不会规范化这个数据库,我会为数据收集创建一个规范化版本,然后使用它来填充您当前的结构。

从一个数据库收集和报告您必须做出的设计妥协,不会花费很长时间比另一台数据库服务器和某种传输方式花费更多。

于 2012-10-17T21:57:59.353 回答
0

如果您要阅读多于写作,那么非规范化是一个好主意。

如果您将写作多于阅读,则应该规范化您的表格。

如果您不确定,或者将两者混合使用,请尝试对这两种配置进行基准测试或负载测试,看看哪个更适合您的应用程序。

于 2012-10-17T21:37:43.350 回答
0

检索非规范化的数据是一个不错的选择,因为更少的连接数,存储比性能成本便宜。

于 2012-10-17T21:38:21.400 回答
0

规范化主要是关于消除重复,以便于维护和最小化所需的存储。

非规范化主要是为了提高特定查询的性能,但由于某些数据是重复的(通常是关键数据),它确实使维护变得更加棘手,并增加了存储需求。

于 2012-10-17T21:39:07.603 回答