Chapter2 关系模型
Chapter2 关系模型介绍
参考书目:《数据库系统概念》第7版,机械工程出版社
Reference: Database System Concepts, 7th Edition
- 主要的数据模型,简单独特。
2.1 关系数据库的结构
- 由表的集合构成,每个表具有唯一的名称。
- 如下表所示,每一行记录了teacher的相关信息。每一列是该teacher信息的属性。
- 标识行为最左列。
- 一行代表一组值的联系。每一行称为一个元组(tuple)。有n列则代表每一行为一个n元元组。
- 关系指代表,元祖指代行,属性(attribute)指代列。
- 关系实例(relation instance)代表一个关系的特定一行。关系是元组的集合。因此没有顺序关系。
- 对于每个属性,都具有一个允许取值的集合,我们称为域(domain)。
- 要求对于关系,每个属性的域应该是原子(atomic)的,即元素不可再分。
- 空值(null value)代表值未知或不存在。应该尽量避免空值防止计算/更新困难。
2.2 数据库模式
- 数据库模式(DB schema)和数据库实例(DB instance)之间是不同的。前者是数据库逻辑设计,后者则是一个快照(某个时刻下的表现)
- 关系模式(relation schema)类似于类型定义。我们一般将表的名称既指代模式,又指代一个实例。
- 我们对下表有一个模式:
instructor(id, name, dept_name, salary)
2.3 码
- 必须可以区分元组,即元组的所有属性值必须唯一标识该元组。一般而言(注意是一般而言!!)不允许两个元组在所有属性取值上完全相同。
- 超码(superkey) 是一个或多个属性的组合。超码可以唯一标识元组。
- 唯一能标识元组的超码的最小子集称为候选码(candidate Key)。
- 被选中作为标识的候选码称为主码(primary Key)。也称为主码约束。
- 我们将主码的组成部分标记下划线标识并放在前列。例如classroom(building, room_num,capacity)。
- 主码的选择应该为值很少变化或从不变化的属性。
- 同样主码的属性取值应该要符合其他的关系约束。比如我们不能凭空捏造出不存在的主码值(例如上面的不存在的房间号),称为外码约束(foreign-key constraint)。
- 外码约束(foreign-key constraint) 定义为从关系
的A属性(集)到 关系的主码B。这表明,在前者关系中对A的取值必须是后者关系中某个元组对B的取值。A称为从 引用 的外码(foreign key), 前者为引用关系,后者为被引用关系。 - 被引用属性(集)必须是被引用关系的主码。泛化到满足引用完整性约束。
- 引用完整性约束要求引用关系中的任意元组在指定属性上出现的取值必然出现在被引用关系的至少一个元组的指定属性上。
- 外码约束是引用完整性的特例。
所以什么是外码约束?其实就是选择某个属性作为主码时,这个主码必须要在其他的表上出现过,否则没有意义。例如老师所属的院系必须在院系名单中
。
2.4 模式图
- 带有主码和外码约束的数据库模式使用模式图(schema diagram)标识。我们可以见到下图,下划线代表了我们的主码,箭头代表了引用关系。表的名字显示在最上层。
2.5 关系查询语言
- 查询语言(query language)是用户用来从数据库中请求信息的语言,可以是命令式,声明式,函数式。
- 命令式(imperative):用户指导系统执行特定运算序列得到结果,更新状态变量。
- 函数式(functional):对函数的求之,没有附加作用,不更新程序状态。例如关系代数。
- 声明式(declarative):描述信息而不给出具体步骤或函数,由数据库根据信息中的逻辑进行查询。例如元组关系和域关系演算。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了