关系数据模型
数据模型
数据模型的不同层次
- 概念模型(Conceptual Data Model,CDM)
- 面向现实世界建模
- 主要用来描述现实世界的概念化结构,与具体DBMS无关
- 逻辑模型(Logical Data Model,LDM)
- 面向用户建模
- 用户从数据库所看到的数据模型;
- 物理模型(Physical Data Model,PDM)
- 面向具体的DBMS,面向机器
- 描述数据在存储介质上的组织结构
数据模型的三要素、
- 数据结构
与数据类型、内容、性质有关的对象,如关系模型中的域、属性、关系等 与数据之间联系有关的对象。数据结构是对系统静态特征的描述。 - 数据操作
指对数据库中各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则。数据库主要有检索和更新(包括插入、删除、修改)两大类操作。数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)及实现操作的语言。数据操作是对系统动态特性的描述。 - 数据的约束条件
一组完整性规则的集合。
数据模型的发展过程:从层次模型到网状模型


关系模型
关系实例
- 由命名的若干列和行组成的表格。一般地,关系指代实例。
- 关系中的行称为元组
- 关系实例中元组的数目称为基(Cardinality)。
- 元组的次序是无关紧要(关系是元组的集合)。
关系模式(Relation Schema)
包括:关系名、属性的名字及相关联的域名、完整性约束
关系必须是规范化的,满足一定的规范条件
最基本的规范条件(第一范式,1NF):关系的每一个分量必须是一个不可分的数据项,即不能表中有表。
关系数据库
关系数据库是关系的有限集合。关系数据库也是由两部分组成:关系模式的集合及对应的关系实例的集合。
- 关系模式的集合称为数据库模式
- 对应的关系实例的集合称为数据库实例
数据结构
关系(Relation)是笛卡尔积的一个有意义的子集
是一张二维表
每个关系都有一个关系名。
二维表存放两类数据:实体本身的数据,实体之间的联系
- 元组(Tuple) :表中的一行,表示一个实体,关系是由元组组成的。
- 属性(Attribute) :表中的每一列在关系中称为属性,每个属性都有一个属性名,属性值则是各元组属性的取值;
- 域(Domain)属性的取值范围称为域。同一属性只能在相同域中取值。例如,性别属性“Psex”的域为“男”和“女”
- 分量(Component) :元组中的一个属性值。
- 键(Key) :关系中能唯一区分不同元组的属性或属性组合,关键字的属性值不能取“空值”——实体完整性规则。
- 候选健(Candidate Key)
凡在关系中能够唯一区分确定不同元组的属性或属性组合,称为候选健。关系中能够成为关键字的属性或属性组合可能不是唯一的。包括在候选键中的属性成为主属性,不包括在候选键中的属性称为非主属性。 - 主键(Primary Key,PK)
当一个关系中有多个候选健的时候,从中选定一个作为关系的主键。关系中主键是唯一的。每个关系中有且只有一个主键。 - 外键(Foreign Key,FK)
关系中某个属性或属性组合并非该关系的键,但却是另一个关系的主键,称此属性或属性组合组合为本关系的外键。
关系模式(Relation Schema)
对关系的描述称为关系模式,其格式为:
关系名(属性名l,属性名2,…,属性名n)
例如:患者(编号,姓名,性别,年龄)
数据操作
关系数据操作包括两类:
- 查询
- 更新 (插入、删除和修改 )
用户可以通过关系语言来完成对数据的各种操作,关系语言特点是高度非过程化,即用户只需说明“做什么”而不必说明“怎么做”。
数据约束
关系数据约束:
- 数据模型中固有的约束,如元组不能重复。
- 可以在数据模型的模式中直接表述的约束,如数据定义语言(DDL)中指定的完整性约束。
- 不能在数据模型的模式中直接表述的约束,由应用程序表示和执行。
特点
关系数据模型的优点:
- 关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。
- 数据结构简单、清晰。
- 更高的数据独立性,更好的安全保密性。
- 丰富的完整性。
关系数据模型的缺点:
- 对“现实世界”实体的表达能力弱。
- 由于存取路径对用户透明,查询效率往往不如非关系数据模型。
- 关系模型只有一些固定的操作集。
- 不能很好的支持业务规则。
性质
- 有一个关系名,并且跟关系模式中所有其他关系不重名;
- 每一个单元格都包含且仅包含一个原子值;
- 每个属性都有一个不同的名字(指同一关系中);
- 同一属性中的各个值都取自相同的域;
- 各个元组互不相同,不存在重复元组;
- 属性的顺序并不重要;
- 理论上讲,元组的顺序并不重要。
关系的操作
关系的操作本质上是对集合的操作 ,操作的对象与结果都是集合。
一次一集合(set at a time)。
- 查询:选择、投影、连接、除、并、交、差
- 数据更新:插入、删除、修改
并运算:所有至少出现在两个关系中之一的元组集合。
$$
R\cup S ={ t | t\in R \vee t\in S }
$$
两个关系R和S若进行并运算,则它们必须是相容的
关系R和S必须是同元的,即它们的属性数目必须相同。
语义是一致的
R的第i个属性的域必须和S的第i个属性的域相同
交运算:结果仍为n目关系,由既属于R又属于S的元组组成,记为:
$$
R\cap S ={ t | t\in R \wedge \ t\in S }
$$
差运算:设关系R和S具有相同的关系模式,。且它们相容,R和S的差是由属于R但不属于S的元组构成的集合,记为:
$$
R-S ={ t | t\in R \wedge t\notin S }
$$
笛卡尔积:两个分别为n目和m目的关系R和S的笛卡尔积是一个 (n+m)列的元组的集合。
元组的前n列是关系R的一个元组,后m列是关系S的一个元组。
若R有k1个元组,S有k2个元组,则关系R和关系S的笛卡尔积有k1×k2个元组。
$$
R\times S = {t_r \cap t_s | t_r \in R \wedge t_s \in S }
$$
选择运算:从关系中找出满足给定条件的所有元组称为选择。
经过选择运算得到的结果可以形成新的关系,其关系模式不变,但其中元组的数目小于或等于原来的关系中的元组的个数,它是原关系的一个子集。
$$
\sigma_F(R)={t | t\in R , F(t) = True }
$$
投影运算:从关系中挑选若干属性组成的新的关系,投影的结果中要去掉相同的行。垂直方向抽取元组
$$
\Pi_A(R) = { t[A] | t\in R } , A\subseteq R
$$
条件连接(q连接):A,B为R和S上度数相等且可比的属性列, 为等号时称为等值连接
$$
R \mathop{\bowtie} \limits_{A=B} S = { \widehat{rs}|r\in R\wedge s\in S\wedge r[A] \Theta s[B]}
$$
自然连接:从两个关系的广义笛卡儿积中选取在相同属性列B上取值相等的元组,并去掉重复的行。n\自然连接中相等的分量必须是相同的属性组,并且要在结果中去掉重复的属性,而等值连接则不必。
$$
R\infty S=:{:\widehat{\mathrm{rs}}:|:\mathrm{r\in R}:\wedge:\mathrm{s\in S}:\wedge:\mathrm{r}[\mathrm{B}]=s[\mathrm{B}]:}
$$
左连接(Left Join)
R左连接S:所有来自R的元组和那些连接字段相等处的S的元组。
右连接(Right Join)
R右连接S:所有来自S的元组和那些连接字段相等处的R的元组。
关系数据库的语言
关系的完整性
关系模型的完整性规则是对关系的某种约束条件,保证数据库中数据的正确性和一致性,三类完整性约束如下:
- 实体完整性:主码不能取空值
- 参照完整性:通过外码实现,避免孤子记录
- 用户定义的完整性:各类商业规则
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。