3

我目前正在构建一个新的应用程序,具有很高的读写比率。在我现在的雇主中,出于性能原因,我们的表格上有很多非规范化数据。拥有完全 3NF 表然后使用索引视图进行所有非规范化是更好的做法吗?我应该对表或视图运行查询吗?

我感兴趣的一些事情的一个例子是列子表的聚合(例如,将用户帖子计数存储在某处)。

4

2 回答 2

3

一般来说,如果您需要非常频繁地访问多个规范化表,那么拥有非规范化视图是一个好主意。在大多数情况下,与使用连接和直接查询表相比,它会显着提高性能,并且通常不会降低可维护性,因为您的视图或连接都可以编写为不知道对表的某些部分所做的更改它不使用。

你的所有表格是否都应该是第三范式是另一个问题。在我使用过的大多数应用程序中,答案是大多数表都应该以这种方式进行标准化,但也有例外。是否破例与数据的使用方式有关,以及您是否可以非常有信心将来不会改变这种使用方式。

由于您以错误的方式做某事而不得不返回并稍后重新规范化可能会付出高昂的代价,但是过度规范化应该易于使用和理解的数据可能会使事情变得比实际需要的更复杂和难以维护。你的旅费可能会改变。

于 2008-10-10T14:59:21.397 回答
3

如果您打算使用视图向用户呈现非规范化数据(并且您正在使用 SQL Server),您应该查看 SCHEMABINDING 子句。如果视图是模式绑定的,您可以对其进行索引,并且索引将在基础表更新时更新。这样,如果索引设置好,查找数据的人实际上可以从索引中进行选择,这样就不需要为每个查询都重新构建复杂的视图,但用户仍然会看到最新的基础表更改的日期。

于 2008-10-10T15:00:53.283 回答