数据库设计经验总结
2010-04-23 01:25
459 查看
数据库设计的范式
1NF 属性不可分割
2NF 没有部分依赖
3NF 没有传递依赖
反规范化设计
反规范化设计的前提
反规范化设计是规范化设计之后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的。
反规范化设计的优点
能够减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。
反规范化设计的缺点
反规范化设计会带来数据的重复存储,浪费了额外的磁盘空间,并且由于多处存储,增加了数据维护的复杂性。
反规范化设计的方法
增加冗余列
增加派生列
表合并
表分割
水平分割
建立多个列定义相同的表,将一个表中的数据行分别保存在多个表中。水平分割可以降低单表索引的层数和大小。
水平分割应用的几种情况:
表记录数很多
表中的数据具有独立性,比如数据可明显按所属地区、年度等属性进行划分
表内容需要存储在多个介质上
垂直分割
把一个表的列定义拆分到多个表中,并且具有相同的主键列。水平分割可以降低数据行的大小。
比如一个表中列数太多,并且某些列数据常用,而某些列数据不常用,就可以进行垂直分割。
反规范设计的数据维护
反规范设计的数据需要额外的工作来维护数据的完整性,一般可以通过以下几种方式进行
应用逻辑
在应用程序的事务中对同一数据的多处存储进行维护。
这种方式比较难于管理,一个维护逻辑很容易出现在多个应用程序当中,容易遗漏。
批处理维护
由批处理程序批量的处理所有的非规范化关系涉及的数据。一般定期运行,运行间隔根据业务来决定,并且可以利用Job来自动运行批处理程序。可用于对冗余数据的实时性要求不高或者有一定规则的环境。
触发器
在数据库端建立触发器,对原数据的修改会立即触发对冗余列的修改。可用于对数据实时性要求较高的环境,但同时会降低数据的插入和更新速度。
扇形陷阱与深坑陷阱 (Fan Trap and Chasm Trap)
两个陷阱的解释
设计过程中应注意避免扇形陷阱出现,在设计玩成之后也应检查所有连续顺序相邻的两个one to many关系,以确保没有实际的深坑陷阱出现。
文章信息
版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
原文出处: http://www.aiview.com/
写于: 2005-08-02 [Edit]
作者: Alex (email &msn)
1NF 属性不可分割
2NF 没有部分依赖
3NF 没有传递依赖
反规范化设计
反规范化设计的前提
反规范化设计是规范化设计之后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的。
反规范化设计的优点
能够减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。
反规范化设计的缺点
反规范化设计会带来数据的重复存储,浪费了额外的磁盘空间,并且由于多处存储,增加了数据维护的复杂性。
反规范化设计的方法
增加冗余列
增加派生列
表合并
表分割
水平分割
建立多个列定义相同的表,将一个表中的数据行分别保存在多个表中。水平分割可以降低单表索引的层数和大小。
水平分割应用的几种情况:
表记录数很多
表中的数据具有独立性,比如数据可明显按所属地区、年度等属性进行划分
表内容需要存储在多个介质上
垂直分割
把一个表的列定义拆分到多个表中,并且具有相同的主键列。水平分割可以降低数据行的大小。
比如一个表中列数太多,并且某些列数据常用,而某些列数据不常用,就可以进行垂直分割。
反规范设计的数据维护
反规范设计的数据需要额外的工作来维护数据的完整性,一般可以通过以下几种方式进行
应用逻辑
在应用程序的事务中对同一数据的多处存储进行维护。
这种方式比较难于管理,一个维护逻辑很容易出现在多个应用程序当中,容易遗漏。
批处理维护
由批处理程序批量的处理所有的非规范化关系涉及的数据。一般定期运行,运行间隔根据业务来决定,并且可以利用Job来自动运行批处理程序。可用于对冗余数据的实时性要求不高或者有一定规则的环境。
触发器
在数据库端建立触发器,对原数据的修改会立即触发对冗余列的修改。可用于对数据实时性要求较高的环境,但同时会降低数据的插入和更新速度。
扇形陷阱与深坑陷阱 (Fan Trap and Chasm Trap)
两个陷阱的解释
设计过程中应注意避免扇形陷阱出现,在设计玩成之后也应检查所有连续顺序相邻的两个one to many关系,以确保没有实际的深坑陷阱出现。
文章信息
版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
原文出处: http://www.aiview.com/
写于: 2005-08-02 [Edit]
作者: Alex (email &msn)
相关文章推荐
- SQL Server 数据库设计经验总结
- 数据库设计经验总结------SQL Server + .NET篇
- SQL SERVER 数据库设计经验总结
- 大量的数据库分析与设计实践中总结出的经验
- 数据库设计之数据库,数据表和字段等的命名总结
- thinkphp的目录结构设计经验总结
- 互联网公司面试问题总结之设计模式和数据库
- 数据库设计经验谈 (二)
- APP设计中“登录”按钮的高度多少才好呢?经验总结!
- [数据库]数据库设计经验谈(转载)
- 数据库设计经验谈(5 终章)
- 数据库设计:同一字段可以复选多值 方法总结
- WINCE应用层设计经验总结-关于用串口发AT命令给蓝牙
- 学习设计模式经验总结
- 后台数据库设计以及跨库总结
- MySQL 数据库设计总结
- 数据库设计经验谈(1)
- 数据库设计范式精彩总结
- 数据库设计实践经验
- 互联网B端产品设计经验总结