以下内容为本人在学习《Access 2007 宝典》(人民邮电出版社)过程中,总结和实践。
1 数据库设计
A 第一范式(first normal form)要求: 关键词: 唯一
要求表中的每个元素都只能包含一个唯一值,并且表中不能包含重复的数据组
解释: "包含唯一值"的意思是,一个字段内只能有一种属性的内容.
比如字段"BookTitle"中,包含了"7 Cookie Magic",表示购买了7本名为"Cookie Magic"的书,
这就违反了第一范式的要求
B 第二范式(2NF) 关键词: 分解(decomposition)
要求将一个大表分成几个单表,每个单表都表示一部分数据,但所包含的数据没有丢失
C 第三范式(3NF) 关键词: 简洁
要求删除所有可以从本表其他字段或者其他表中可以获得数据的字段
D 反规范化
特别是针对第三范式(3NF),有些时候直接存储计算结果,比动态计算更省时.
但是,对数据库方案进行反规范化的大部分步骤,都会导致额外的编程时间.
2 表关系
A 一对一
⑴ 纯粹的一对一关系并不常见.大部分情况下,第二个表中所包含的数据大部分都包含在第一个表中.
一对一关系通常都要避免,因为违反了规范化的规则(如果描述的是同一个实体,那么数据就不应该划分为多表)
但有时某些敏感信息不能和普通信息放在一起.比如客户的银行帐号等,此时就需要一对一关系表.
B 一对多
C 多对多
关系更复杂,但是可以划分成2个单独的一对多关系,二者通过一个关联表链接在一起
D 传递(pass-through,有时称作"祖父-孙子"关系)
祖父表通过第三个表与孙子表相关联
3 参照完整性(referential integrity)
A 参照完整性严格按照表的主键字段(主键或者外键)进行操作,进行添加,修改或者删除时都会检查
这也是为什么关键表一定要设定主键/外键的原因
B 第一规则: 任何主键都不能包含空值(null)
几个字段组成复合主键时,这个复合主键中所有字段都必须包含值,没有字段允许为空.
C 第二规则: 所有外键值都必须匹配对应主键值.
意味着: 一对多关系的"多"端的表中每条记录,在"一"端的表中都必须有一条对应记录.
那些在"一"端没有对应记录的"多"端记录被称为"孤儿记录",应该从数据库中删除.
4 复合主键带来的问题:
A 导致数据库设计变复杂.
⑴ 如果父表中3个字段定义为复合主键,那么每个字表中必须出现相同的3个字段
⑵ 要确保复合主键中所有字段都存在值
B 多数情况下,复合主键带来的问题 > 带来的优势
5 创建关系并实施参照完整性
A 创建关系的意义:
创建表与表关系之后,在创建查询时,关系会自动显示出来
B 创建参照完整性的意义:
如果不实施,那么修改主键字段,删除记录等操作,不会发出警告,可能产生孤儿记录
C 实施参照完整性可能遇到的问题
点击"创建"之后,可能会有以下提示: 原因是该关系违反了参照完整性规则,比如有孤儿记录的字表.
解决办法:
使用"查询向导"创建一个"查找不匹配项"查询,寻找"多"端表中违反参照完整性的记录.
然后可以将"不匹配项"查询转换成"删除"查询" ,以删除孤儿记录;或者在"多"端表中关联字段中添加值
D "级联更新相关字段" 建议勾选
E "级联删除相关记录" 慎用,可能导致数据的意外删除