目的:为设计出一个好的数据库模式提供理念基础或思维方式。
问题:什么叫“好”?
例如,建立一个教务数据库,其中包括学生学号sno、学生所在系sdept、 学生宿舍sloc、系主任姓名mname、课程号cno和成绩grade。
问题:我们应该建立一个什么样的数据库模式?
设计如下:student(sno, sdept, sloc, mname, cno, grade)
问题:该关系的码是什么?这个关系“好”吗?为什么?
分析关系模式好坏的角度
student(sno, sdept, sloc, mname, cno, grade)
关系存在的问题:
1、数据存储冗余大
2、当某系刚成立,也指定了系主任,但还没招生,则数据无法插入(称为“插入异常”)
3、当某个系的学生全部毕业而无学生存在时,但该系还存在,则系名、系主任姓名数据也随之被删除。(称为“删除异常”)
4、当某个学生转系了,则不但要修改该学生的所在系,同时还要修改系主任姓名;若学校规定一个系的学生只有住在同一栋宿舍楼,则还要修改该学生的学生宿舍数据。(称为“修改复杂”,一不小心可能会出错。)
规范化理论提供了设计一个“好”关系模式的指导。
数据依赖
数据依赖:是属性与属性之间的一种约束关系。一般是现实世界中属性间相互联系的抽象;或是数据内在的性质,是语义的体现。
注意:属性间的种种约束关系都是应用系统所涉及的现实世界的要求。
例如,以前所介绍的各种完整性约束就是一种数据依赖。
问题:你认为属性之间还有别的什么约束关系吗?
考虑这种约束关系:
- 当属性sno被确定为某个具体值之后,那么该学号所对应的sname属性的 值是不是被唯一地确定了呢?
- 换句话说,当关系的任意两个元组的sno属性值相等,则sname属性值是 不是一定会相等?
若这种约束关系成立,则称之为属性之间的函数依赖。