数据库关系模式有哪些类型?( 二 )


虽然超码可以唯一标识一个实体,但是可能大多数超码中含有多余的属性,所以需要候选码 。
例如学生表,学生(学号,姓名,年龄,性别,专业),其中的学号是可以唯一标识一个元组,所以学号可以作为候选码 。既然学号都可以作候选码,那么学号和姓名这两个属性的组合就可以唯一区别一个元组 。此时的学号可以成为码,学号和姓名的组合也可以成为码,但是学号和姓名的组合不能成为候选码,因为即使去掉姓名属性,剩下的学号属性也完全可以唯一地标识一个元组 。也就是说,候选码中的所有属性都是必需的,缺少任何一个属性,都不能唯一标识一个元组 。
(3)主码(PrimaryKey) 。主码是从多个候选码中任意选出一个作为主键,这个被选中的候选码就称为主码 。如果候选码只有一个,那么候选码就是主码 。虽然说主码的选择是比较随意的,但在实际开发中还是需要一定的经验,不然开发出来的系统会出现问题 。一般来说,主码都应该选择那些从不或者极少变化的属性 。
例如,在一个职工实体中,职工(职工号,姓名,入职时间,部门,岗位,工资,职级,工龄,电话),职工号可以用来唯一确定实体中的一个元组,所以职工号是一个候选码 。如果实体属性——姓名、入职时间、部门三者组合也能唯一地确定一个元组,则(姓名,入职时间,部门)也是一个候选码 。在上述两个候选码中任选一个均可作为职工实体的主码,一般来说直接选择职工号作为实体的主码是最为简单方便的 。
1.3.2关系模式的定义关系是数据库二维表中的数据记录,关系模式是数据库二维表的表结构,关系是动态的,关系模式是静态的 。
关系模式可由六个元素来描述,分别是R、U、D、dom、I、F 。其中,R为关系的名称;
U为组成该关系的属性名的集合;D为U集合中属性的域集合;dom为属性集U向域集D的映射;I为完整约束集合;F为属性间数据的依赖关系集合 。
一个关系模式通常表示为R(U,D,dom,I,F),也可以忽略其他元素,直接简化为R(U)或R(A1,A2,A3,…,An),其中A1,A2,A3,…,An为属性名 。
例如,在一个选课模块中,包含“学生”“课程”“选修”等关系实体 。“学生”实体的属性有SNO(学号)、SNAME(姓名)、AGE(年龄)、SEX(性别)、SDEPT(系部),其中“学号”为主键;“课程”实体的属性有CNO(课程号)、CNAME(课程名称)、CDEPT(系部)、TNAME(教师),其中“课程号”为主键;“选修”实体的属性有GRADE(成绩)、SNO(学号)、CNO(课程号),其中“学号”和“课程号”为联合主键 。学生和课程之间是多对多的关联关系,即一个学生可以同时选修多门课程,一门课程也可以同时被多个学生选修 。这种多对多的关联关系可以通过“选修”关系实体作为中间桥接实体,变成两个一对多的实体关联关系,如图所示 。
图学生选课实体
从图的实体关系图中可以得到选课模块的实体关系模式集——学生关系、课程关系、选修关系,具体关系模式如下:学生关系模式Student(SNO,SNAME,AGE,SEX,SDEPT);
课程关系模式Course(CNO,CNAME,CDEPT,TNAME);
选修关系模式StudentCourse(SNO,CNO,GRADE) 。
对以上定义的三个关系模式实例化,插入初始化数据后,可得到学生、课程、选修三个关系的实例,如图所示 。图中矩形框圈住部分为选课模块中的关系模式(表结构);椭圆框圈住部分为选课模块中的关系(数据) 。整个选课模块的表环境由关系模式与关系两部分共同组成,缺一不可 。关系模式的分解标准关系模式的规范化过程实际上就是关系模式的“分解”过程,即把逻辑上独立的信息放在独立的关系模式中 。分解是解决数据冗余的主要方法,也是规范化的一条原则——关系模式有冗余问题就要分解 。
数据库设计者在进行关系数据库设计时,应参照模式规范化理论,尽可能使数据库模式保持高的标准 。一般尽量把关系数据库设计成巴斯?科德范式(BCNF)的模式集,如果设计成巴斯?科德范式(BCNF)模式集时达不到保持函数依赖的标准,那么只能降低要求,设计成第三范式(3NF)的模式集,以达到保持函数依赖和无损分解的基本要求 。
学生、课程、选修三个关系的实例
1.分解的定义一个关系模式可以分解成众多子关系模式,分解方式不同,得到的子关系模式也不同 。
关系模式的分解是指把某一个关系模式按照某一种方式进行分解得到的所有子关系模式 。

推荐阅读