2012-10-17 150 views
3

我目前正在开发一个mvc应用程序来从现有的sql server数据库中读取。数据库是非规范化的 - 我正在考虑修改一些表格以将其归一化到一定程度。更高性能有规范化或非规范化表

这引发了与开发人员的讨论,作为读取数据的最佳方式,或者结构是否应该更改。数据将通过存储过程通过ado.net读取。我的问题是,在表中有多个字段(非规格化),或者有多个带有内部联接(标准化)的表来检索数据,性能会更好吗?

我应该提到,对表格的操作将被读取95%,写入5%。

回答

3

您应该使用非规范化的数据进行数据分析,并使用强化报告。为了提到的目的,具有非正规化将有助于提高性能。

而不必了解你要实现的应用中,对于“标准”的客户端 - 服务器应用程序,你应该不断地与一个DOM大量的类并读取&写数据很多知识,我会去投票用于规范化数据并尽可能地避免重复数据。尝试简化表格的设计,让他们对您的领域模型感到“舒服”。

因此,简要地说,对于密集数据读取规范化更多性能,对于密集读取非规格化更高性能(更全面)的&写域对象模型类。

+0

表上的行动将是读95%,5%的写入,所以更好地规范? – amateur

+0

如果这95%要花费在报表上,那么将会花费数百个关于非规范化数据的JOIN,那么我会建议你,是的,保持数据正常化。 –

+0

这些读取适用于将数据显示给最终用户的实时系统。我有点不清楚,您的建议是将数据拆分为多个表还是将它保存为一个(避免连接)? – amateur

0

如果您要阅读的不仅仅是写作,反规范化是一个好主意。

如果您的写作不仅仅是阅读,而且应该规范化您的表格。

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

0

检索非规格化的数据是不错的选择,因为连接数量少,存储成本低于性能成本。

0

正常化主要是为了消除重复,以便于维护和最小化所需的存储。

非规范化主要是为了提高特定查询的性能,但是因为一些数据是重复的(通常是关键数据),它使维护触摸麻烦,并增加存储需求。

1

保持对报告应用程序的标准化。

只要非标准化的结构满足您的需求,它会更快。

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

的设计折衷,你必须做出做收集和从一个数据库报告,不要多久,就耗费了大量的比另一台数据库服务器和某种传输manouever的更多。