《关系模型的数据结构.docx》由会员分享,可在线阅读,更多相关《关系模型的数据结构.docx(6页珍藏版)》请在第壹文秘上搜索。
1、关系模型的数据构造关系模型源于数学,它用二维表来组织数据,而这个二维表在关系数据库中称为关系。关系数据库是表的集合用关系表示实体以及实体间的联系的模型,称为关系模型,下面我们来看看关系模型中的基本术语1 .关系关系就是二维表,它满足以下几个条件1)关系表中的每一列都是不可再分的基本属性。(有子属性,分开了,不是关系表)2)表中的各属性不能重名3)表中的行、列次序并不重要,即交换列的前后顺序(比方将性别放在年龄前面不影响其表达的一个语义。2 .元组表中的每一行数据称为一个元组,它相当于一个记录值3 .属性表中的每一列是一个属性值的集合,列可以命名,称为属性名,属性与前面讲到的实体属性(特征)或记
2、录的字段意义相当。关系表中的每一行数据不允许完全一样,因为存储值完全一样的两行或多行数据并没有实际意义4 .主键主键也称主码或主关键字,是表中用于唯一确定一个元组的一个属性或最小属性组。主键可以由一个属性组成,也可以由多个属性共同组成。如表所示,学号就是此学生基本信息表的主键,因为它可以唯一地确定一个学生。而表所示的关系的主键就由学号和课程号共同组成,因为一个学生可以选修多门课程,而且一门课程也可以有多个学生选修,因此,只有将学号和课程号结合起来才能共同确实定一行记录。通常称由多个属性共同组成的主键为复合主键。表的主键与其实际应用语义有关,与表设计者的意图有关,如表,用(学号,课程号)作为主键
3、在一个学生对一门课程只能有一次考试的前提下是成立的,如果设定一个学生对一门课程可以有屡次考试,那么用(学号,课程号)作主键就不够了,因为一个学生对一门课程有多少次考试,那么这个值就回重复多少遍,如果是这种情况,就必须为这个表添加一个“考试次数歹U,同时作为主键有时一个表中可能存在多个可以作主键的属性,比方,对于学生信息表,如果能够保证姓名肯定不重复的话,那么姓名也可以作为学生基本信息的主键,如果表中存在多个可以作为主键的属性,那么称这些属性为候选键属性,相应的键称为候选键,从中选一个作为主键都是可以的。5 .域属性的取值范围称为域。例如,大学生的年龄假设在1440岁范围内,那么学生的“年龄属性
4、的域就是(1440)关系模型的数据操作增删改查关系模型的数据完整性约束数据完整性是指数据库中存储的数据是有意义的,是正确的。主要包括三大类1)实体完整性是指的是关系数据库中所有的表都必须有主键,而且表中不允许存在以下两种情况(1)无主键值的记录(2)主键值一样的记录因为假设记录没有主键值,那么此记录在表中一定是无意义的。关系模型中的每一行记录都对应客观存在的一个实例或一个事实,比方,一个学号唯地确定了一个学生,如果表中存在没有学号的学生记录,那么此学生一定不属于正常管理的学生。另外,如果表中存在主键值相等的两个或多个记录,那么这两个或多个记录会对应同一个实例,这会出现两种情况。第一,表中的其他
5、值也完全一样,那么这些记录就是重复记录,存储重复的记录是没有意义的,第二,如果其他值不完全一样,那么会出现语义矛盾,哪条记录才是真实的实体中每个具体的记录值(一行数据,比方学生实体中的每个具体的学生,称为实体的一个实例。2)参照完整性参照完整性有时也称为引用完整性。现实世界中的实体之间往往存在着某种联系,在关系模型中,实体以及实体之间的联系都是用关系来表示的,这样就自然存在着关系(表)与关系(表)之间的引用关系。参照完整性就是描述实体之间的联系的。参照E整性一般是指多个实体或表之间的关联关系。比方表2-3中,学生选课信息表所描述的学生必须受限于表2-1学生基本信息表中已有的学生,不能在学生选课
6、信息表中描述一个基本就不存在的学生,也就是学生选课信息表中学号的取值必须在学生基本信息表中学号的取值范围内。这种一个表中某列的取值受限于另一个表的某列的取值范围约束的特点就称为参照完整性。在关系数据库中用外键(foreignkey,有时也称为外部关键字或外码)来实现参照完整性。例如,只要将学生选课表中的“学号定义为引用学生基本信息表的“学号的外键,就可以保证选课表中的“学号的取值在学生基本信息表的已有“学号范围内外键一般出现在联系所对应的关系中,用于表示两个或多个实体之间的关联关系。外键实际上是表中的一个(或多个)属性,它引用某个其他表特殊情况下,也可以是外键所在(2.4的表)的主键,当然,也
7、可以是候选键,但多数情况下是主键。下面举例说明若何指定外键例2-1】学生和专业可以用下面的关系表示,其中主键用下划线标识。学生(,姓名,性别,专业号,出生日期)专业(专业号,专业名)这两个关系之间存在着属性引用关系,即学生关系中的“专业号引用了专业关系中的“专业号,显然,学生关系中的“专业号的值必须是确实存在的专业的专业号。也就是说,学生关系中的“专业号引用了专业关系中的“专业号,是引用了专业关系中的“专业号的外键【例2-2】学生、课程以及学生与课程之间的选课关系可以用以下3个关系表示,其中主键用下划线标识。学生(学号,姓名,性别,专业号,出生日期)课程课程号,课程名,学分选课(生号,课程号,
8、成绩这3个关系中,选课关系中的“学号必须是学生关系中已有的学生,因此选课关系中号引用了学生关系中的“学号。同样,选课关系中的“课程号也必须是课程关系中已有的课程,即选课关系中的“课程号引用了课程关系中的“课程号。因此,选课关系中的“学号”是引用了学生关系中的“学号的外键,而“课程号”是引用了课程关系中的“课程号的外键。主键必须是非空且不重复的,但外键无此要求。外键可以有重复值,这点从表2-3中可以看出。外键也可以取空值,例如,职工与其所在的部门可以用以下两个关系表示。职工(职工号,职工名,部门号,工资级别)部门部门号,部门名)其中,职工关系的“部门号是引用部门关系的“部门号的外键,如果某新来职
9、工还没有被分配到具体的部门,那么其“部门号就为空值;如果职工已经被分配到了某个部门,那么其部门号就有了确定的值非空值)。3)用户定义完整性用户定义的完整性也称为域完整性或语义完整性。任何关系数据库管理系统都应该支持实体完整性和参照完整性,除此之外,不同的数据库应用系统根据其应用环境的不同,往往还需要一些特殊的约束条件,用户定义的完整性就是针对某一具体应用领域定义的数据约束条件,它反映某一具体应用所涉及的数据必须满足应用语义的要求。用户定义的完整性实际上就是指明关系中属性的取值范围,也就是属性的域,这样可以限制关系中属性的取值类型及取值范围,防止属性的值与应用语义矛盾。例如,学生的考试成绩的取值
10、范围为(1100,人的性别的取值是男,女。关系标准化为什么要关系标准化观察这个表的数据,会发现有以下几个问题数据冗余问题:在这个关系中,有关学生所在系和其所对应的宿舍楼的信息有冗余,因为一个系有多少个学生,这个系所对应的宿舍楼的信息就要重复存储多少遍。而且学生基本信息(包括学生学号、姓名、性别、所在系)也有重复,一个学生修了多少门课,他的基本信息就重复多少遍。数据更新问题:如果某一学生从数字媒体系转到了信息管理系,那么不但要修改此学生的SdePt列的值,还要修改其SIoC列的值,从而使修改复杂化。数据插入问题:如果新成立了某个系,并且也确定好了此系学生的宿舍楼,即已经有了SdePt和SlOC信
11、息,但也不能将这个信息插入到表1中,因为这个系还没有招生,其Sno和Cno列的值均为空,而Sno和CrIo是这个表的主属性,因此不能为空。数据删除问题:如果一个学生只选了一门课,而后来又不选了,那么应该删除此学生选此门课程的记录。但由于这个学生只选了一门课,那么删掉此学生的选课记录的同时也删掉了此学生的其他基本信息。这些都是操作异常,为什么会出现操作异常呢,就是关系模式没有设计好。为了解决这类似的问题,我们就要按照关系标准化去进展设计。1.关系中的码例1:有关系模式:学生(学号,姓名,性别,身份证号,年龄,所在系)候选码为:学号,身份证号主键可以为“学号或者是“身份证号”。主属性为:学号,身份
12、证号作主属性为:姓名,性别,年龄,所在系。例2:有关系模式:选课(学号,课程号,考试次数,成绩设一个学生对一门课程可以有屡次考试,每一次考试有一个考试成绩候选码为:(学号,课程号,考试次数),也为主键主属性为:学号,课程号,考试次数非主属性为:成绩。例3:有关系模式:授课(教师号,课程号,学年)其语义为:一个教师在一个学年可以讲授多门不同的课程,可以在不同学年对同门课程讲授屡次,但不能在同一个学年对同门课程讲授屡次。门课程在-个学年可以由多个不同的教师讲授,同一个学年可以开设多门课程,同一门课程可以在不同学年开设屡次。其候选码为:(教师号,课程号,学年),因为只有(教师号,课程号,学年)三者才
13、能唯一确实定一个元组。这里的候选码也是主键主属性为:教师号,课程号,学年。没有非主属性。称这种候选码为全部属性的表为全码表。2.范式INF第一范式ClNFJ是指数据表中的每个字段必须是不可拆分的最小单元。2NF第二范式(2NF)是指满足INF后,要求表中的所有列,都必须依赖于主键,而不能有任可一列与主键没有关系,也就是说一个表只描述T牛事情。这个是什么意思呢,意思就是说,表中除了主键的其他列,不能和主键没有关系,但其实这句话又有点相互矛盾,既然没关系,又若何会放在同一列中呢,其实可以这样想,单独把这一列和主键拿出来,如果他们之间没有关系,那肯定是不满足第二范式的。这是一张成绩表,包括学号、课程
14、号、成绩和学分,主键为学号,但是单独将学分和学号拿出来,两个没有关系,所以不满足第二范式。第三范式3NF是指必须先满足第二范式(2NF)z另外要求表中的每一列只与主键直接相关而不是间接相关。这个又是什么意思呢,似乎和第二范式的描述差不多啊,其实不然,还是有细微差异的,第三范式保证了表中的字段消除了传递依赖,比方C依赖于B,B依赖于A,那么C依赖于A,像这样的情况不能让A、B、C出现在同一个表中。可以看出,学院地点与学号不是直接相关连,学院地点和学院号直接相关连,所以不满足数据库第三范式。若何转换呢2NF函数依赖关系的分解过程有以下几个步骤可以用模式分解的方法将非2NF的关系模式分解为多个2NF
15、的关系模式。步骤用组成主键的属性集合的每一个子集作为主键构成一个关系模式。将依赖于这些主键的属性放置到相应的关系模式中最后去掉只由主键的子集构成的关系模式例如,对S-LY表,首先分解为如下的三个关系模式下划线局部表示主键):S-I(Sno,.)C(Cno,.)S-c(Sno,Cno,.)然后,将依赖于这些主键的属性放置到相应的关系模式中,形成如下三个关系模式S-l(Sno,Sname,Ssex,Sdept,Sloc)C(Cno)S-c(sno,con,grade)最后,去掉只由主键的子集构成的关系模式,也就是去掉C(Cno)关系模式。SLC关系模式最终被分解的形式为:s-l(Sno,Shane,Ssex,Sdept,Sloc)s-c(Sno,Cno,Grade)从表6-2所示的数据可以看出,一个系有多少个学生,就会重复描述每个系和其所在的宿舍楼多少遍,因此还存在数据冗余,也就存在操作异常。比方,当新组建一个系时,如果此系还没有招收学生,但已分配了宿舍楼,那么还是无法将此系的信息插入到数据库中,因为这时的学号为空。由此看到,第二范式的关系模式同样还可能存在操作异常情况,因此还需要对此关系模式进展进一步的分解。3NF在建设在2NF的根基上把