关联类型
一对一关系
一对一关系是指两个关系表中的字段一一对应,即一个关系表中的一行只能与另一个表中的一行相匹配,反之亦然,其对应关系如图15-13所示。
一对多关系
一对多关系是指关系表中某表中的一行可以和另一表的多行相匹配,而另一个表中一行只对应其一行,这种关系称为一对多,例如图15-14所示的表A和表B的关系,A中一行对应B中多行,而B中一行对应A中一行。
多对多关系
多对多关系是指两个关系表中,一个关系表中的一行可以对应另一表的多行。这种关系一般要通过第3个表定义这种关系。其多对多的关系如图15-15所表示的表A与表B的关系。
关系数据库
关系数据库基本概念
关系是一个带有一些特殊属性的表,这个表就称为关系表,表以行和列的形式存储数据,而一组表组成了数据库。表都由行和列组成,而一个关系型表要具有行和列,其列又称为属性,行又称为元组。其结构形式如图15-4所示。属性的取值范围称为域,其类型和范围具体由属性的性质及其所表示的意义来确定。
关系的基本特点
在关系模型中,关系具有以下基本特点:
数据的表示方法
关系型系统必须符合数据库以表类型提供用户的需求,这里的表是关系型系统的逻辑结构,而非实体结构。实际上在实体层中,系统可以使用任何的一般存储结构,如循序文件、索引、链接等。而在逻辑层中,则将这些实体层结构进行对应,并建立成表,其表的数据存储格式如表15-1所示。
键的选用
主键
组合键
候选键
外键
主键
主键(Primary Key)是能辨识记录的最小字段组,换句话说就是表的最小原子Key。例如在客户表中,每一条客户数据有其个别的客户代号,通过客户代号的内容,就可以直接找到唯一的一条客户记录,故客户代号可以是客户表的主键。被设为Primary Key的字段,其内容值必须具有唯一性且不能是空白。其形式如图15-7所示。
组合键
组合键(Concatenated Key)是指没有一个适合做主键的字段时,选择由一个以上的字段组合而成的主键,称为组合键,其对应形式如图15-8所示。
候选键
候选键(Condidate Key)是指同时拥有两个或两个以上可作为主键的字段,这些有资格成为主键的字段,便成为这个表的候选键。调用时,根据不同的情况从候选键中挑出一个主键。其对应形式如图15-9所示。
外键
外键(Foreign Key)指表中字段是其他表的主键,这个字段称为外键,如果其他表的主键是组合键,那么外键也必须是同样的字段组合,与主键一一对应。其对应形式如图15-10、图15-11所示。
数据模型
层次模型
层次模型是用树形结构来表示实体及其之间联系的模型,在这种模型中,数据被组织成由“根”开始的“树”,每个实体由根开始沿着不同的分支单线延伸,其结构如图15-1所示。树中的每一个节点代表实体型,连线则表示它们之间的关系。其特点是:有且只有一个节点无父节点,此节点即为根节点;其他节点有且只有一个父结点,其适合表示一对多的联系。
网状模型
网状数据模型是用以实体型为节点的有向图表示各实体及其之间的联系的模型,其可以有一个以上的节点无父节点,适合用于表示多对多的联系。
关系模型
关系模型是用二维表格来表示实体及其相互关系的模型,关系模型将信息存储在由行和列组成的表中,其形式就像电子表格的行和列。关系模型与层次模型和网状模型相比有着本质的差别,
正规化
第一范式
第二范式
第三范式
第一范式
第一范式是关系数据库的基本要求,其内容是数据库表的每一列都是不可分割的基本数据项,即要求同一列不能有多个值,即表中不能再含有表,下面通过一个实例讲解其范式,创建一个数据表如下所示:
mysql>CREATE TABLE students(
-> name varchar(50),
-> numb varchar(10)
-> course varchar(10),
->);
数据表中有三个字段,分别存放姓名、学号和课程,现在表中的数据如表15-2所示,其没有相同的属性,但要再插入一些数据,结果如表15-3所示,其出现了大量相同成员。
第二范式
第二级正规化形式需要做如下优化:
这个数据库表不满足第二范式,因为存在如下关系:
(课程名称)→(学分)
(姓名)→(学号,年龄)
其可能会出现如下问题。
第三范式
第三规范化形式需要消除不依赖于该关键字的字段,如课程和年龄、姓名和学分等都是没有关系的字段,因此应将它们从表中分离出来,建立具有姓名—学号—年龄、姓名—课程—分数、课程—学分关系的三个表。
解决上一节的问题把选课关系表SelectCourse改为分成表15-5、表15-6、表15-7所示的三个表即可。
约束
主键约束
主键约束是最重要的约束,并且也是最常用的,其可以保证数据的实体完整性,使表中的记录唯一并可区分。例如表15-12所示students信息表,规范化的数据库每个表都必须设置主键约束,可以设置字段name为主键或numb为主键。
唯一约束
唯一约束是指一列数据或几列数据的组合值在数据表中唯一,其可以保证主键以外的字段值不重复。一个表中可以定义多个唯一约束。
例如表15-13所示的供货商表中,不但可以指定供货商ID为主键,若还需保证供货商厂家地址、账户各字段的值不能重复,则可以设置为唯一约束。
外键约束
通过外键约束使数据库中的多个数据表之间建立关联,如果一个表中某个字段的数据和另一个表中的数据有着密切关联,则要为该字段设置外键约束,外键可以是单一字段,也可以是多个字段的组合。通过外键约束可以建立一对多的逻辑关系。
例如:要设置一个从百货公司进货的表单,使其含有ID、进货价格、进货日期,要与百货公司的售货表单(如表15-14所示)建立联系,则要为进货表单设置外键,设计的表单如表15-15所示。
默认约束
默认值约束是指在没有给定字段值时,该字段可以赋给该属性一个默认的初始值,这对于事先不知道数据又不允许为空的字段很有帮助,使用默认值约束尤其方便并可提高效率;若设置了默认值约束的字段,在给字段指定数据时,要以指定的数据为准。例如创建一个buy表,存储购买的价格,如果不指定,就返回空,其创建程序如下:
综合练习
1.使用数据库语言创建一个满足关系型数据库特点的表。