在关系模型中,只有关系这一种单一的数据结构,从用户的角度来说关系模型的逻辑结构就是一张二维表。其中关于数据库结构的数据称为元数据。例如,表名、列名和列所属的表、表和列的属性等都是元数据。
1.关系中基本术语
(1)元组(Tuple)
元组也称记录,关系表中的每行对应一个元组,组成元组的元素称为分量。数据库中的一个实体或实体之间的一个联系均使用一个元组来表示。
例如,在表3-1中有3个元组,分别对应3个学生,“欧阳宝贝,女,工商”是一个元组,由3个分量组成。
表3-1 元组
(2)属性(Attribute)
关系中的每列对应一个域。由于域可以相同,因此,为了加以区分,必须给每列一个命名,这个命名就称为属性。n目关系必有n个属性。
属性具有型和值两层含义:型是指字段名和属性值域;值是指属性具体的取值。
关系中的字段名具有标识列的作用,所以,在同一个关系中的字段名(列名)不能相同。一个关系中通常有个多个属性,属性用于表示实体的特征。
(3)候选码(Candidate Key)
若关系中的某一属性或属性组的值能唯一地标识一个元组,则称该属性或属性组为候选码(Candidate Key)。
(4)主码(Primary Key)
若一个关系中有多个候选码,则选定其中一个为主码(也可以称为主键,主关键字)。
例如,假设关系中没有重名的学生,则学生的“姓名”就是该Student关系的主码;若在Student关系中增加学生的“学号”属性,则Student关系的候选码就为“姓名”和“学号”两个,应当选择“学号”属性作为主码。当包含两个或更多个的键称为复合码(键)。
主码不仅可以标识唯一的行,还可以建立与别的表之间的联系。
主码选择的注意事项:
1)建议取值简单的关键字为主码。例如,学生表中有“学号”和“身份证号”,建议选择“学号”作为主码。
2)在设计数据库表时,复合主键会给表的维护带来不便,因此不建议使用复合主键。
3)数据库开发人员如果不能从已有的字段(或者字段组合)中选择一个主码,那么可以向数据库添加一个没有实际意义的字段作为该表的主码。可以避免“复合主键”情况的发生,同时可以确保数据库表满足第二范式的要求(范式概念稍后介绍)。
4)数据库开发人员如果向数据库表中添加一个没有实际意义的字段作为该表的主键,即代理键。建议该主键的值由数据库管理系统(如MySQL)或者应用程序自动生成,避免人工录入时人为操作产生的错误。
(5)全码(All-Key)
在最简单的情况下,候选码只包含一个属性;在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码。全码是候选码的特例。例如,设有以下关系:学生选课(学号,课程),其中的“学号”和“课程”相互独立,属性间不存在依赖关系,它的码就是全码。
(6)主属性(Prime attribute)和非主属性(Non-prime attribute)
在关系中,候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性。
(7)代理键
代理键是具有DBMS分配的唯一标识符,该标识符已经作为主键添加到表中。每次创建行时由DBMS分配代理键的唯一值,通常是较短的数字,该值永远不变。该值对于用户没有任何意义。MySQL数据库使用AUTO_INCREMENT函数自动分配代理键的数值。在AUTO_INCREMENT中,起始值可以是任意值(默认为1),但增量总是1。
2.数据库中关系的类型
关系数据库中的关系可以有3种类型:基本关系(通常又称为基本表或基表)、查询表和视图表。
基本表是实际存在的表,它是实际存储数据的逻辑表示。
查询表是查询结果表或查询中生成的临时表。
视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
3.关系的性质
1)关系中的元组存储了某个实体或实体某个部分的数据。
2)关系中元组的位置具有顺序无关性,即元组的顺序可以任意交换。
3)同一属性的数据具有同质性,即每一列中的分量是同一类型的数据,它们来自同一个域。
4)同一关系的字段名具有不可重复性,即同一关系中不同属性的数据可出自同一个域,但不同的属性要给予不同的字段名。
5)关系具有元组无冗余性,即关系中的任意两个元组不能完全相同。
6)关系中列的位置具有顺序无关性,即列的次序可以任意交换、重新组织。
7)关系中每个分量必须取原子值,即每个分量都必须是不可分的数据项。
关系模型要求关系必须是规范化的,即要求关系模式必须满足一定的规范条件,这些规范条件中最基本的一条就是关系的每个分量必须是一个不可分的数据项。
4.关系模式
在数据库中要区分型和值。在关系数据库中,关系模式是型,关系是值。关系模式是对关系的描述。那么应该描述哪几个方面呢?
首先,关系是一张二维表,表的每一行对应一个元组,每一列对应一个属性。一个元组就是该关系所涉及的属性集的笛卡儿积中的一个元素。关系是元组的集合,因此,关系模式必须指出这个元组集合的结构,即它由哪些属性构成,这些属性来自哪些域,以及属性与域之间的映像关系。
其次,一个关系通常是由赋予它的元组语义来确定的。元组语义实质上是一个n目谓词(n是属性集中属性的个数),凡使该n目谓词为真的笛卡儿积中的元素的全体就构成了该关系模式的关系。
现实世界随着时间在不断地变化,因而在不同的时刻,关系模式的关系也会有所变化。但是,现实世界的许多已有事实限定了关系模式所有可能的关系必须满足一定的完整性约束条件,这些约束或者通过对属性取值范围的限定,例如,学生的性别只能取值为“男”或“女”,或者通过属性值间的相互关联(主要体现于值的相等与否)反映出来。关系模式应当刻画出这些完整性约束条件,因此,一个关系模式应当是一个5元组。
关系的描述称为关系模式(Relation Schema),它可以形式化地表示为R(U,D,Dom,F)。
其中,R为关系名;U为组成该关系的属性的集合;D为属性组U中的属性所来自的域;Dom为属性向域的映像集合;F为为属性间数据依赖关系的集合。关系模式通常可以简记为R(U)或R(A1,A2,…,An)。其中,R为关系名,A1,A2,…,An为字段名。而域名及属性向域的映像常直接称为属性的类型及长度。
关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。但在实际应用中,人们通常把关系模式和关系都称为关系,这不难以区别。
关系数据库中关于表的三组术语的对应关系如表3-2所示。
表3-2 表的三组术语的对应关系