文档介绍:SQL数据库设计与实现
轴
为什么需要设计数据库 2-2
良好的数据库设计:
节省数据的存储空间
能够保证数据的完整性
方便进行数据库应用系统的开发
糟糕的数据库设计:
数据冗余、存储空间浪费
内存空加各表之间的关系
20
数据规范化
仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构
常见数据库设计的问题有:信息重复,更新异常,插入异常,删除异常
Dr 最初定义了规范化的三个级别,范式是具有最小冗余的表结构。这些范式是:
第一范式(1st NF -First Normal Fromate)
第二范式(2nd NF-Second Normal Fromate)
第三范式(3rd NF- Third Normal Fromate)
21
第一范式 (1st NF)
BuyerID
Country
City
1
1
4
2
中国
中国
日本
美国
北京
北京
东京
纽约
…
…
…
BuyerID
Address
1
2
3
4
中国北京市
美国纽约市
英国利物浦
日本东京市
…
…
第一范式的目标是确保每列的原子性
如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
22
第二范式 (2nd NF)
如果一个关系满足1NF,并且除了主键以外的其他列,都依赖与该主键,则满足第二范式(2NF)
第二范式要求每个表只描述一件事情
Orders
字 段
例 子
订单编号
产品编号
订购日期
价 格
001
A001
2000-2-3
$
…
…
Orders
字 段
例 子
订单编号
订购日期
001
2000-2-3
Products
字 段
例 子
产品编号
价 格
A001
$
23
第三范式 (3rd NF)
如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)
Armstrong公理定义的传递依赖:ABC是关系R的3个属性,如果A——〉B且B——〉C,可得出A——〉C
Orders
字 段
例 子
订单编号
订购日期
顾客编号
001
2000-2-3
AB001
顾客姓名
Tony
…
…
Orders
字 段
例 子
订单编号
订购日期
顾客编号
001
2000-2-3
AB001
…
…
24
规范化实例 5-1
假设某建筑公司要设计一个数据库。公司的业务规
则概括说明如下:
公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等
公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等
公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与工程师不同)
公司定期制定一个工资报表,如图-1所示
25
规范化实例 5-2
工程号
工程名称
职工号
姓名
职务
小时工资率
工时
实发工资
A1
花园大厦
1001
齐光明
工程师
65
13
1002
李思岐
技术员
60
16
1004
葛宇宏
律师
60
19
小计
A2
立交桥
1001
齐光明
工程师
65
15
1003
鞠明亮
工人
55
17
小计
A3
临江饭店
1002
李思岐
技术员
60
18
1004
葛宇洪
技术员
60
14
小计
图-1 某公司的工资表
26
规范化实例 5-3
工程号
工程名称
职工号
姓名
职务
小时工资率
工时
A1
花园大厦
1001
齐光明
工程师
65
13
A1
花园大厦
1002
李思岐
技术员
60
16
A1
花园大厦
1001
齐光明
工程师
65
13
A1
花园大厦
1003
鞠明亮
工人
55
17
A3
临江饭店
1002
李思岐
技术员
60
18
A3
临江饭店
1004
葛宇洪
技术员
60
14
图-2 某公司的项目工时表
27
规范化实例 5-4