高级系统架构师笔记——数据库设计基础知识(2)关系数据库基本概念
(2)关系数据库基本概念
- 关系的基本术语:
- 关系数据库模型
- 关系的完整性约束
关系数据库系统是支持关系数据模型的数据库系统。
关系的基本术语:
-
属性(Attribute):描述事务的特征,如学生通过学号、姓名、性别等属性来描述
-
域(Domain):每个属性的取值范围对应一个值的集合,称为该属性的域。如性别域{男, 女}。关系数据模型中所有的域都应是原子数据(Atomic Data)。
-
目或度(Degree):一个关系中属性的个数
-
候选码(Candidate Key):关系中的某一属性或属性组的值能唯一的标识一个元组,该属性或属性组为候选码
-
主码(Primary Key):又称主键,一个关系中有多个候选码,选定其中一个作为主键
-
主属性(Prime Attribute):包含在任何候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性(Non-Prime Attribute)。
-
外码(Foreign Key):如果关系模式R中的属性或属性组不是该关系的码,但它是其他关系的码,则该属性集对关系模式R而言是外码
-
全码(All-key):关系模型的所有属性组是这个关系的候选码,称为全码
-
笛卡尔积:
设 D 1 , D 2 , D 3 , . . . , D n 为任意集合,定义 D 1 , D 2 , D 3 , . . . , D n 的笛卡尔积为: D 1 × D 2 × D 3 × . . . × D n = { ( d 1 , d 2 , d 3 , . . . , d n ) ∣ d i ∈ D i , i = 1 , 2 , 3 , . . . , n } 其中,集合中每一个元素 ( d 1 , d 2 , d 3 , . . . , d n ) 叫作一个 n 元组( n − t u p l e ,及 n 个属性的元组), 元素中每一个值 d i 叫作元组的一个分量。若 D i = ( i = 1 , 2 , 3 , . . . , 0 ) 为有限集, 其基数 ( C a r d i n a l N u m b e r ,元组的个数 ) 为 m i = ( i = 1 , 2 , 3 , . . . , 0 ) , 则 D 1 × D 2 × D 3 × . . . × D n 的基数 M 为: M = ∏ i = 1 n m i 设D_1,D_2,D_3,...,D_n为任意集合,定义D_1,D_2,D_3,...,D_n的笛卡尔积为:\\ D_1 \times D_2 \times D_3 \times ... \times D_n = \{(d_1,d_2,d_3,...,d_n)|d_i\in D_i, i=1,2,3,...,n \} \\ 其中,集合中每一个元素(d_1,d_2,d_3,...,d_n)叫作一个n元组(n-tuple,及n个属性的元组),\\ 元素中每一个值d_i叫作元组的一个分量。若D_i=(i=1,2,3,...,0)为有限集,\\ 其基数(Cardinal Number,元组的个数)为m_i=(i=1,2,3,...,0),\\ 则D_1 \times D_2 \times D_3 \times ... \times D_n的基数M为:\\ M=\prod_{i=1}^n m_i 设D1,D2,D3,...,Dn为任意集合,定义D1,D2,D3,...,Dn的笛卡尔积为:D1×D2×D3×...×Dn={(d1,d2,d3,...,dn)∣di∈Di,i=1,2,3,...,n}其中,集合中每一个元素(d1,d2,d3,...,dn)叫作一个n元组(n−tuple,及n个属性的元组),元素中每一个值di叫作元组的一个分量。若Di=(i=1,2,3,...,0)为有限集,其基数(CardinalNumber,元组的个数)为mi=(i=1,2,3,...,0),则D1×D2×D3×...×Dn的基数M为:M=i=1∏nmi
设 A={1,2}(集合 A 含 2 个元素),B={x,y}(集合 B 含 2 个元素),则:A×B={(1,x),(1,y),(2,x),(2,y)}
关系数据库模型
在数据库中要区分型和值**。关系数据库中的型也称为关系数据库模式**,是关系数据库结构的描述。它包括若干域的定义以及在这些域上定义的若干关系模式。关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常称之为关系数据库。关系的描述称为关系模式(Relation Schema)。可以形式化地表示为:
R ( U , D , d o m , F ) ,其中, R 表示关系名; U 是组成该关系的属性名集合; D 是属性的域; d o m 是属性向域的映像集合; F 为属性间数据的依赖关系集合。 R(U,D,dom,F),其中,\\ R表示关系名;\\ U是组成该关系的属性名集合;\\ D是属性的域;\\ dom是属性向域的映像集合;\\ F为属性间数据的依赖关系集合。 R(U,D,dom,F),其中,R表示关系名;U是组成该关系的属性名集合;D是属性的域;dom是属性向域的映像集合;F为属性间数据的依赖关系集合。
通常将关系模式简记为:
R ( U ) 或 R ( A 1 , A 2 , A 3 , . . . , A n ) ,其中, R 为关系名, A 1 , A 2 , A 3 , . . . , A n 为属性名或域名, 属性向域的映像常常直接说明属性的类型、长度。通常在关系模式主属性上加下画线表示该属性为主码属性。 R(U)或R(A_1,A_2,A_3,...,A_n),其中,\\ R为关系名,\\ A_1,A_2,A_3,...,A_n为属性名或域名,\\ 属性向域的映像常常直接说明属性的类型、长度。通常在关系模式主属性上加下画线表示该属性为主码属性。 R(U)或R(A1,A2,A3,...,An),其中,R为关系名,A1,A2,A3,...,An为属性名或域名,属性向域的映像常常直接说明属性的类型、长度。通常在关系模式主属性上加下画线表示该属性为主码属性。
例如:学生关系S有学号Sno、学生姓名Same、系名SD、年龄SA属性;课程关系C有课程号Cno、课程名Cname、先修课程号PCno属性;学生选课关系SC有学号Sno、课程号Cno、成绩Grade属性。定义关系模式及主码如下:
-
学生关系模式
S ( S n o ‾ , S n a m e , S D , S A ) S(\underline{Sno}, Sname, SD, SA) S(Sno,Sname,SD,SA) -
课程关系模式
C ( C n o ‾ , C n a m e ) , P C n o , D o m ( P c n o ) = C n o C(\underline{Cno}, Cname), PCno, Dom(Pcno)=Cno C(Cno,Cname),PCno,Dom(Pcno)=Cno
PCno是先行课程号,来自Cno域,但由于PCno属性名不等于Cno值域名,所以要用Dom来定义。但是,不
能将Pcno直接改为Cno,因为在关系模型中,各列属性必须取相异的名字。
关系的完整性约束
完整性规则提供了一种手段来保证当授权用户对数据库做修改时不会破坏数据的一致性。因此,完整性规则防止的是对数据的意外破坏。关系模型的完整性规则是对关系的某种约束条件。
-
实体完整性(Entity Integrity):每个数据表都必须有主键,而作为主键的所有字段,其属性必须是唯一且非空值。
-
参照完整性(Referential Integrity):也称引用完整性。若F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值或者取空值(F的每个属性值均为空值),或者等于S中某个元组的主码值。简单来说一个关系中的外键,其数据来源必须是相关联关系的属性值或者空值。比如某企业员工Emp关系模式和部门Dept关系模式表示如下:
- Emp(员工号,姓名,性别,参加工作时间,部门号)
- Dept(部门号,名称,电话,负责人)
Emp和Dept关系存在着属性的引用,即员工关系中的“部门号”值必须是确实存在的部门的部门号。按照关系的完整性规则,员工关系中的“部门号”属性取值要参照部门关系的“部门号"属性取值。如果新入职的员工还未分配具体的部门,那么部门号取空值。
-
用户定义完整性(User Defined Integrity):针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,由应用的环境决定。
