database-02-关系模型介绍

3199 字
16 分钟
database-02-关系模型介绍

数据库系统原理
关系模型介绍
2025#

关系模型概述§2.0#

关系模型由关系数据库、关系操作集合和关系完整性约束三部分组成

  • 单一的数据结构——关系(Relation)
    • 实体和实体之间的联系都用关系描述
  • 关系操作
    • 特点:一次一集合
    • 语言:关系代数、ALPHA、元组关系演算、QBE、SQL…
  • 三类完整性约束
    • 实体完整性
    • 参照完整性
    • 用户定义完整性

关系数据库的结构(Structure)§2.1#

直观概念,非形式化定义

关系(Relation)#

对应不可分简单二维表

 学生名单
学号姓名年龄性别
2005004王小明19社会学
2005006王小明20商品学
2005008王小明18法律
…………………………

 职工名单
职工号姓名工资职称
基本津贴
86051张三20481024工程师
…………………………

元组(Tuple)#

表中的一行即为一个元组

学生名单
学号姓名年龄性别
2005004王小明19社会学
2005006王小明20商品学
2005008王小明18法律
…………………………

属性(Attribute)#

表中的一列即为一个属性

学生名单
学号姓名年龄性别
2005004王小明19社会学
2005006王小明20商品学
2005008王小明18法律
…………………………

码(Key)#

表中的某属性组,它可以唯一确定一个元组

学生名单
学号姓名年龄性别
2005004王小明19社会学
2005006王小明20商品学
2005008王小明18法律
…………………………

域(Domain)#

属性的取值范围

学生名单
学号姓名年龄性别
2005004王小明19社会学
2005006王小明20商品学
2005008王小明18法律
…………………………

分量#

元组中的一个属性值(联系矢量概念)

学生名单
学号姓名年龄性别
2005004王小明19社会学
2005006王小明20商品学
2005008王小明18法律
…………………………

关系模式(型):对关系的描述#

关系名(属性1,属性2,……,属性n)

学生名单
学号姓名年龄性别
     
     
     
     

概念总结#

  • 关系(Relation):对应不可分的二维表
  • 元组(Tuple):表中的一行即为一个元组
  • 属性(Attribute):表中的一列即为一个属性
  • (Key):表中的某属性组,它可以唯一确定一个元组
  • (Domain):属性的取值范围
  • 分量:元组中的一个属性值(联系矢量概念)
  • 关系模式(型):对关系的描述
  • 关系名(属性1,属性2,……,属性n)

关系模式(Relation Schema)§2.2#

关系模型-形式化定义(Formal Definition)§2.2.0#

域(Domain)#

域是具有相同数据类型的值的集合

  • 笛卡儿积(卡氏积 Cartesian Product)
    给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡儿积为: D1×D2××Dn{(d1,d2,,dn)diDi,i=1,2,n}D1 \times D2 \times … \times Dn=\{ (d1,d2,…,dn)| di \in Di, i=1,2,…n \} 其中每一个元素称为一个n元组n-tuple),元素中的每个值di称为一个分量
  • 例:
    D1={大,中,小},D2={红,绿}
    D1×D2={(大,红),(大,绿),(中,红),(中,绿),(小,红),(小,绿)}
    D2×D1={(红,大),(绿,大),(红,中),(绿,中),(红,小),(绿,小)}
笛卡儿积不满足交换律,D1×D2≠D2×D1;即笛卡儿积中元素(元组)的各分量是有序的。
  • 基数
    Di(i=1,2,,n)Di(i=1,2,…,n)为有限集,其基数为Di|Di|,则D1×D2××DnD1×D2×… ×Dn的基数为:D1×D2××Dn|D1|×|D2|×… ×|Dn|

关系(Relation)#

  • 定义
    • D1×D2××DnD1 \times D2 \times … \times Dn任意子集叫做在域D1,D2,… ,Dn上的关系,可记做:R(D1,D2,… ,Dn),R为关系名,n是关系的(degree)
      注意: 这里的“子集”是“任意子集”,包括空集
    • 单元关系(Unary relation)和二元关系(Binary relation):目n=1和n=2的关系
    • 笛卡儿积不满足交换律,而关系通过给关系的列附加属性名的方式取消元组各分量的有序性
    • 关系可以是无限集。通常在关系数据模型中限定关系为有限关系
  • 属性(Attribute)
    构造笛卡尔积的域可以重复,意味着关系中的一个元素(元组)的两个不同分量可能来自同一个域,无法通过其来自的域区分是哪个分量。为了区分,为元组的分量(列)取不同的名字,即属性。n目关系有n个属性。
  • 基本关系六性质(三列两行一分量)
    • 列是同质的(来自同一个域)
    • 不同列可出自同一个域,每一列为一个属性,不同属性(列)给不同属性名
    • 列的顺序可任意交换
    • 任意两个元组不能完全相同
    • 行(元组)的顺序可任意交换,即:关系是无序(unordered)的
    • 每一分量是不可分的数据项

属性的类型§2.1#

  • 某个属性所有允许值的集合称为属性的域(domain of the attribute)
  • 属性的值一般要求是“原子的”(atomic),即不可分割
  • 有个特别的值:null ,所有的域中都有这个成员(参见:什是空值(null))
    • null 值会导致许多操作定义复杂化

关系模式/Relation Schema#

关系模式是对关系的描述(是对型的描述)。需描述元组集合的结构:由哪些属性构成,这些属性来自哪些域,以及属性与域之间的映象关系

  • 关系模式的符号表述:R(UDdomF)R(U,D,dom,F)
    RR关系名UU为组成该关系的属性名集合DD为属性组U中属性所来自的域的集合domdom为属性向域的映象集合FF为属性间数据的依赖关系集
  • 通常可以简记为:R(U)R(U)R(A1,A2,,An)R(A1,A2, …,An)
    其中R为关系名,A1,A2, …,An为属性名。而域名及属性向域的映象常常直接说明为属性的类型、长度

模式(schema)与实例(instance) - 关系/Relation#

  • 关系是关系模式的实例(instance),是关系模式在某一时刻的状态或者内容
    • 关系是同型元组的无序集合
    • 关系r的一个成员t是一个元组(tuple),对应简单二维表里的一行
  • 关系模式是静态稳定的,而关系是动态时变的
  • 关系模式定义了元组的语义
    • 一个n目谓词
    • 使该n目谓词为真的笛卡尔积中的元素的全体构成该关系模式中的关系

码(Key)§2.3#

有关系模式: R(U)R(U)

  • 超码(superkey) 令KUK \subseteq U ,如果确定了KK中各属性的值就能够在R(U)R(U)的每个可能关系rr中标记出的唯一元组(或确定rr中无此元组),则KKRR的超码
  • 候选码(Candidate key)
    KKRR的超码,而其子集不是超码,则称属性组KK为该关系的一个候选码
  • 主码(Primary key)
    一个关系可能有多个候选码,则选定其中一个作为主码
  • 主属性(Prime attribute)
    包含在任何候选码中的属性
  • 非主属性(Nonprimary attribute)
    不包含在任何候选码中的属性,又称:非码属性(None-key attribute)
  • 全码(All-key)
    关系模式的所有属性组构成此关系模式的唯一候选码

关系模型 - 完整性(Integrity)约束条件§2.3#

  • 实体完整性(Entity Integrity)
  • 参照完整性(Reference Integrity)
  • 用户定义完整性(Custom Integrity) 其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性

什么是空值(null)#

  • 盘古、上帝、自然数和零
    • 0:什么都没有
  • NULL
    • C++中的null和0
    • 什么都不是和什么都是的null
      • “说似一物即不中”

实体完整性(Entity Integrity)#

  1. 候选码是关系中元组的值标识,所以同一关系中候选码取值不能重复
  2. 若属性AA是关系模式RR主属性,则属性AA不能取空值
注意:实体完整性约束规定候选码的所有属性都不能取空值,不仅是候选码整体不能取空值
工程实践中实体完整性约束常采用“主码中的属性”

参照完整性(Reference Integrity)#

  • 引用
    现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的。这样就自然存在着关系与关系之间的引用
    • 例1:
      • 学生(学号,姓名,性别,专业号,年龄)
      • 专业(专业号,专业名)
    • 例2:
      • 学生(学号,姓名,性别,年龄)
      • 课程(课程号,课程名)
      • 选修(学号课程号,成绩)
  • 外码(Foreign Key)
    有关系模式 R(U)R(U),令 FUF \subseteq U ,如果FF与关系模式SS的主码KSK_S相对应,则称FFRR的外码,并称RR参照关系(Referencing relation),SS被参照关系(Referenced relation)或目标关系(Target relation)。关系RRSS可以是同一个关系
    • 例:学生(学号,姓名,性别,年龄,同桌学号
      • 外码不一定与对应主码同名
      • R与S不一定是不同的关系
  • 参照完整性FF是关系模式RR外码,被参照关系为SS,则RR的实例中每个元组在FF上的值必须
    1. 或者取空值FF的每个属性值均为空值)
    2. 或者等于SS实例中某个元组的主码值

用户定义的完整性(User-defined Integrity)§2.3.0#

  • 实体完整性和参照性适用于任何关系数据库系统。除此之外,不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件
  • 用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
  • 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能

数据库模式(DB Schema)#

一个数据库包含若干关系,数据库模式就是这些关系的模式的集合
如学校管理数据库中包含信息:instructor 、student、advisor……

  • 糟糕的设计:
    univ (instructor-ID, name, dept_name, salary, student_Id, ..)
    导致
    • 重复信息(例如,两个学生有同一个教师)
    • 需要空值(例如,表示没有顾问的学生)
  • 规范化理论(第8章) 讲解如何设计“良好”的关系模式

关系查询语言/Relational Query Languages§2.5#

  • 过程化(Procedural) vs. 非过程化(Non-procedural)
    • 非过程化又被称为声明式(declarative)
  • “纯” 语言:
    • 关系代数/Relational algebra
    • 元组关系演算/Tuple relational calculus
    • 域关系演算/Domain relational calculus
  • 关系运算符(Relational operators)

关系模型-数据操作/存储模式/优劣§2.0#

  • Operations
    • 一次一集合方式:只需指出“What to do”,而非关模型中需要告诉系统“How to do”。
  • Storage Schema(Physical Level Schema)
    • 表代表所有实体及其联系
    • 物理存储方式极其灵活
  • Good & Bad
    • 严格的数学基础
    • 概念单一,结构简单清晰
    • 存取路径对用户透明
    • 查询效率偏低

简化的选课数据库,后续用于举例#

[课程表:Cou( Cno, Cname, Cpno, Ccredit )] |课程号|课程名|先行课|学分|开课系|

CnoCnameCpnoCcreditdept
1数据库54CS
2数学 2MA
3信息系统14IS
4操作系统63CS
5数据结构74CS
6数据处理 2IS
7C++语言64CS

[学生表:Stu( Sno, Sname, Ssex, Sage, dept )] |学号|姓名|性别|年龄|所属系|

SnoSnameSsexSagedept
95001李勇20CS
95002刘晨19IS
95003王敏18MA
95004张立19IS

[选课表:SC( Sno, Cno, Grade )] |学号|课程号|成绩|

SnoCnoGrade
95001192
95001285
95001388
95002290
95002380

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
database-02-关系模型介绍
https://meteorfate-github-io.pages.dev/posts/02-关系模型介绍/
作者
METEORfate
发布于
2026-03-25
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
METEORfate
Somebody
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
15
分类
3
标签
20
总字数
84,986
运行时长
0
最后活动
0 天前

目录