如何设计数据库(2)
2010-02-04 16:30
225 查看
数据规范化
• 第一范式(1st NF -First Normal Fromate)
– 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)。第一范式的目标是确保每列的原子性。
• 公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等
• 公司定期制定一个工资报表,如图-1所示
图-1 某公司打印的工资报表
图-2 某公司的项目工时表
大家都看到,上面这样设计的表会有很多问题:
1.表中包含大量的冗余,可能会导致数据异常:
• 删除异常
例如,1001号职工要辞职,则必须删除所有职工号=1001的数据行。这样的删除操作,很可能丢失了其它有用的数据
2.采用这种方法设计表的结构,虽然很容易产生工资报表,但是每当一名职工分配一个工程时,都要重复输入大量的数据。这种重复的输入操作,很可能导致数据的不一致性。
[align=center][/align]
我们用第二范式规范一下:
我们再用第三范式规范一下,是不是明晰了很多?!
规范化和性能的关系
• 通过在给定的表中插入计算列(如成绩总分),以方便查询
•
• 第一范式(1st NF -First Normal Fromate)
– 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)。第一范式的目标是确保每列的原子性。
• 公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等
• 公司定期制定一个工资报表,如图-1所示
工程号 | 工程名称 | 职工号 | 姓名 | 职务 | 小时工资率 | 工时 | 实发工资 |
A1 | 花园大厦 | 1001 | 齐光明 | 工程师 | 65 | 13 | 845.00 |
1002 | 李思岐 | 技术员 | 60 | 16 | 960.00 | ||
1004 | 葛宇宏 | 律师 | 60 | 19 | 1140.00 | ||
小计 | 2945.00 | ||||||
A2 | 立交桥 | 1001 | 齐光明 | 工程师 | 65 | 15 | 975.00 |
1003 | 鞠明亮 | 工人 | 55 | 17 | 935.00 | ||
小计 | 1910.00 | ||||||
A3 | 临江饭店 | 1002 | 李思岐 | 技术员 | 60 | 18 | 1080.00 |
1004 | 葛宇洪 | 律师 | 60 | 14 | 840.00 | ||
小计 | 1920.00 |
工程号 | 工程名称 | 职工号 | 姓名 | 职务 | 小时工资率 | 工时 |
A1 | 花园大厦 | 1001 | 齐光明 | 工程师 | 65 | 13 |
A1 | 花园大厦 | 1002 | 李思岐 | 技术员 | 60 | 16 |
A1 | 花园大厦 | 1004 | 葛宇洪 | 律师 | 60 | 19 |
A2 | 立交桥 | 1001 | 齐光明 | 工程师 | 65 | 15 |
A2 | 立交桥 | 1003 | 鞠明亮 | 工人 | 55 | 17 |
A3 | 临江饭店 | 1002 | 李思岐 | 技术员 | 60 | 18 |
A3 | 临江饭店 | 1004 | 葛宇洪 | 律师 | 60 | 14 |
大家都看到,上面这样设计的表会有很多问题:
1.表中包含大量的冗余,可能会导致数据异常:
• 删除异常
例如,1001号职工要辞职,则必须删除所有职工号=1001的数据行。这样的删除操作,很可能丢失了其它有用的数据
2.采用这种方法设计表的结构,虽然很容易产生工资报表,但是每当一名职工分配一个工程时,都要重复输入大量的数据。这种重复的输入操作,很可能导致数据的不一致性。
[align=center][/align]
我们用第二范式规范一下:
我们再用第三范式规范一下,是不是明晰了很多?!
规范化和性能的关系
• 通过在给定的表中插入计算列(如成绩总分),以方便查询
•
相关文章推荐
- 大数据量的系统的数据库结构如何设计?
- [图解] 11招教你如何玩转数据库设计
- 我们该如何设计数据库:“普通——文艺——二逼”的区别
- 如何构建千万用户级别 后台数据库架构设计的思路
- 大数据量的系统的数据库结构如何设计?
- 文档型数据库设计模式-如何存储树形数据
- 11招教你如何玩转数据库设计跬
- 如何使用sql查询数据库表结构的设计(sqlserver,oracle)
- 如何设计数据库表实现完整的RBAC(基于角色权限控制)
- 如何设计数据库(1)
- 如何在Linux下用C/C++语言操作数据库sqlite3(很不错!设计编译链接等很多问题!)
- [ZT]如何使用Erwin进行基于MYSQL的数据库设计
- 数据库结构设计的更改,默认不准,如何让它许可
- 希望大牛讨论 树状数据如何选择数据库和设计存储格式
- 我们该如何设计数据库(三)
- web聊天类数据库功能表结构如何设计?
- 如何设计动态(不定)字段的产品数据库表?
- 如何设计数据库(2)?
- 开发人员如何有效的进行数据库设计
- 我们该如何设计数据库