数据库设计:反规范化与基础规则
1. 反规范化的考量
在数据库设计中,我们不能过度沉迷于数据的规范化。虽然规范化是数据库设计的重要原则,但有时过度规范化可能并非最佳选择。以下是一些需要考虑反规范化的情况:
- 计算列与派生数据 :如果声明一个计算列或存储一些派生数据能让报表运行更高效,那么可以考虑添加。但要权衡利弊,比如“汇总”数据与源数据不同步的风险,以及如何发现和修复这种不同步。
- 减少连接表数量 :在表中添加一个或多个反规范化列,有时可以消除或显著减少检索信息所需的连接表数量。例如,在一个常用基表中添加一列,可将九表连接减少到三表连接,查询时间缩短约 90%。
- 历史数据处理 :对于基本不变且仅用于报表的历史数据,数据完整性问题的考量可以降低。将数据“扁平化”(反规范化)到几个表中,能提高处理速度。
- 方便用户自定义报表 :随着用户对工具的使用越来越熟练,越来越多的用户希望直接访问数据库进行自定义报表。高度规范化的数据库对他们来说可能像迷宫一样难以使用,反规范化可以让他们的工作更轻松。
不过,如果不确定是否要反规范化,还是优先选择规范化。规范化有助于保证数据完整性,在事务环境中也能提供更好的性能。
2. 超越规范化的设计规则
2.1 保持简单
在数据库设计中,我们会遇到各种新奇的想法,但并非所有想法都是好的。不要盲目遵循“因为我们一直这样做”的方法,但也要认识到经过实践检验的方法往往是有效的。SQL Server 2012 提供了很
超级会员免费看
订阅专栏 解锁全文

378

被折叠的 条评论
为什么被折叠?



