数据库设计之反规范化
来源:互联网 发布:java 日志记录 编辑:程序博客网 时间:2024/05/01 16:36
数据库设计的范式
1NF 属性不可分割
2NF 没有部分依赖
3NF 没有传递依赖
反规范化设计
反规范化设计的前提
反规范化设计是规范化设计之后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的。
反规范化设计的优点
能够减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。
反规范化设计的缺点
反规范化设计会带来数据的重复存储,浪费了额外的磁盘空间,并且由于多处存储,增加了数据维护的复杂性。
反规范化设计的方法
增加冗余列
增加派生列
表合并
表分割
水平分割(补充一下,在oracle中我们可以使用表分区实现水平分割)
建立多个列定义相同的表,将一个表中的数据行分别保存在多个表中。水平分割可以降低单表索引的层数和大小。
水平分割应用的几种情况:
表记录数很多
表中的数据具有独立性,比如数据可明显按所属地区、年度等属性进行划分
表内容需要存储在多个介质上
垂直分割
把一个表的列定义拆分到多个表中,并且具有相同的主键列。水平分割可以降低数据行的大小。
比如一个表中列数太多,并且某些列数据常用,而某些列数据不常用,就可以进行垂直分割。
反规范设计的数据维护
反规范设计的数据需要额外的工作来维护数据的完整性,一般可以通过以下几种方式进行
应用逻辑
在应用程序的事务中对同一数据的多处存储进行维护。
这种方式比较难于管理,一个维护逻辑很容易出现在多个应用程序当中,容易遗漏。
批处理维护
由批处理程序批量的处理所有的非规范化关系涉及的数据。一般定期运行,运行间隔根据业务来决定,并且可以利用Job来自动运行批处理程序。可用于对冗余数据的实时性要求不高或者有一定规则的环境。
触发器
在数据库端建立触发器,对原数据的修改会立即触发对冗余列的修改。可用于对数据实时性要求较高的环境,但同时会降低数据的插入和更新速度。
扇形陷阱与深坑陷阱 (Fan Trap and Chasm Trap)
两个陷阱的解释
设计过程中应注意避免扇形陷阱出现,在设计玩成之后也应检查所有连续顺序相邻的两个one to many关系,以确保没有实际的深坑陷阱出现。
- 数据库设计之反规范化
- 数据库设计之反规范化
- 数据库设计之规范化
- 数据库:反规范化
- 规范化----数据库设计之表设计
- 规范化----数据库设计之表设计
- 数据库设计阶段中为何要考虑“反规范化”
- 数据库设计中反规范化技术的应用
- 关系数据库设计的规范化与非规范化之争
- 关系数据库设计的规范化与非规范化之争
- 关系数据库设计的规范化与非规范化之争
- 数据库设计:规范化设计
- 数据库设计中的规范化
- 数据库设计中的规范化
- 数据库设计的规范化
- 数据库---反规范化技术、大数据
- 数据库设计之规范化--------几种范式详解
- 规范化与反规范化
- android 2.2联系人表结构
- 系统自带监控cpu占用率、内存占用率及网络带宽监控——Windows下的perfmon简介
- c++ 字符串分割
- 字串距离
- ext3rescue linux下文件恢复
- 数据库设计之反规范化
- 新手如何看k线(图)
- WCF一步一步往前爬(三)
- 反向代理服务器的工作原理
- VB和C#
- 运算符重载
- 北京是个人吃人的地方
- git简单设置
- c++ 获取文件后缀名