内容正文:
关系数据库规范化思想
1
为什么要规范化
赵小刚同学在开发一个数据库应用系统时,需要设计一个学生学习情况数据库,该数据库包含属性:学号、姓名、年龄、所在班级、课程编号、课程名、成绩。
基于这7个属性,赵小刚构造了一个关系S_C_G(学号、姓名、所在班级、年龄、课程编号、课程名、成绩),假定表2-10的关键字是由“学号”与“课程编号”组成的。
表2-10 关系S_C_G的一个实例
3
赵小刚同学基于关系S_C_G开发了一个成绩管理系统,它有输入、修改、査询等功能。可是不久,他就发现出了问题:
(1)当他录入成绩时,对同个学生的信息(学号、姓名、班级、年龄),如“陈军”,需要输入多次,不胜其烦。
(2)老师需要新增一门课程“Flash动画制作”,可是因为该门课程还没有学生选修,所以没有办法把该课程的信息添加进去。
(3)刘明间学因退学,关于他的记录被删除了,结果查询课程时,少了“算法与程序设计”这门课程。
4
交流
在赵小刚同学的设计方案中:
(1)课程信息(课程名、课程编号)是不是也需要多次输入呢?
(2)当新增加一个学生,他还没有选修课程时,能不能把他的信息添加进去呢?
问题出在哪里?还会有什么问题?怎么解决这些问题?
5
另外,梁虹同学基于同样的任务也设计了一个数据库,该数据库由三个关系组成:
学生表(学号,姓名,班级,年龄),关键字是“学号”;
课程表(课程编号,课程名),关键字是“课程编号”;
成绩表(学号,课程编号,成绩),关键字是“学号”和“课程编号”。
表2-11、2-12、2-13是梁虹同学设计的关系数据库的一个实例:
6
学号 姓名 班级 年龄
0001 陈军 高二(1)班 15
0002 李强 高二(2)班 16
0003 刘明 高二(3)班 15
表2-11 学生表
课程编号 课程名
C101 数据管理
C102 多媒体
C103 网络技术
C105 人工智能
C107 程序设计
表2-12 课程表
学号 课程编号 成绩
0001 C101 5
0001 C102 5
0001 C105 3
0002 C103 3
0002 C105 3
0003 C107 4
表2-13 成绩表
7
交流