当前位置:Gxlcms > 数据库问题 > 关系数据库

关系数据库

时间:2021-07-01 10:21:17 帮助过:83人阅读

,姓名,性别,专业号,年龄)

    专业(专业号,专业名)

这两个关系之间存在着属性的引用,即学生关系引用了专业关系的主码“专业号”。显然,学生关系中的“专业号”值必须是确实存在的专业的专业号,即专业关系中有该专业的记录。也就是说,学生关系中的某个属性的取值需要参照专业关系的属性取值。

 

例2  学生、课程、学生与课程之间的多对多联系

     学生(学号,姓名,性别,年龄,系)

     课程(课程号,课程名,学分,先行课)

     选修(学号课程号,成绩)

这3个关系之间也存在着属性的引用,即选修关系引用了学生关系的主码“学号”和课程关系的主码“课程号”。

不仅两个或两个以上的关系间可以存在引用关系,同一关系内部属性间也可能存在引用关系。

 

例3 在学生(学号,姓名,性别,专业号,年龄,班长)关系中,“学号”属性是主码,“班长”属性表示该学生所在班级的班长的学号,它引用了本关系“学号”属性,即“班长”必须是确实存在的学生的学号。

 

这三个例子说明关系与关系之间存在着相互引用,相互约束的情况。

引用分析:

  • 引用发生在两个表之间或一个表内部
  • 分别称为被引用表和引用表
  • 被引用列和引用列是同质的(一般同名)
  • 被引用列是主码
  • 引用列称为外码

        

F是关系R的一个或一组属性,但不是关系R的码。如果F与关系S的主码Ks相对应,则称F是关系R外码,关系R为参照关系(Referencing Relation)关系,S为被参照关系(Referenced Relation)或目标关系(Target Relation)。

  • 关系RS不一定是不同的关系
  • 目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上
  • 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别

若属性(或属性组)F是关系R的外码它与关系S的主码Ks相对应(关系RS可是一个关系),则对于R中每个元组在F上的值必须为:

  • · 或者取空值(F的每个属性值均为空值)
  • · 或者等于S中某个元组的主码值。

例1:学生关系中每个元组的“专业号”属性只取下面两类值:

(1)空值,表示尚未给该学生分配专业

(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中

例2 :选修(学号课程号,成绩)

“学号”和“课程号”是选修关系中的主属性,按照实体完整性和参照完整性规则,它们

只能取相应被参照关系中已经存在的主码值

例3 :学生(学号,姓名,性别,专业号,年龄,班长)

“班长”属性值可以取两类值:

(1)空值,表示该学生所在班级尚未选出班长,或该学生本人即是班长;

(2)非空值,这时该值必须是本关系中某个元组的学号值

 

3)         用户定义的完整性

用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。

例:课程(课程号,课程名,学分)

  • “课程名”属性必须取唯一值
  • 非主属性“课程名”也不能取空值
  • “学分”属性只能取值{1,2,3,4}

关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。

 

关系数据库

标签:key   dom   div   示例   标识   order   条件   简单的   字符串   

人气教程排行