数据库系统笔记 - chap2 - 关系模型
关系数据结构
关系代数
A set of fundamental operations to retrieve and manipulate tuples in a relation.
These operations take one or some relations as inputs, and outputs a new relation.
并、交、差、笛卡尔积与集合运算相似。
选择(Select)
行视角,选择出符合条件的若干元祖集合。
符号:
举例:
SQL写法: SELECT * FROM R WHERE Name = 'qaq'
投影(Projection)
列视角,选择出若干属性列组成新的关系。
符号:
举例:
SQL写法: SELECT Name, id FROM R WHERE Name = 'qaq'
投影运算会把新关系中的重复行删去(集合的不可重原则)。
连接(Join)
符号:
其中 是 与 上的度数相等且可比较的属性组, 是比较运算符。
SQL: SELECT * FROM R JOIN S USING (ATTRIBUTE1, ATTRIBUTE2, ...)
若 为 ,则叫做等值连接。
自然连接是一种特殊的等值连接,只不过是在等值连接的基础上去掉结果中重复的属性列。
关系的完整性
关系的完整性约束是对关系正确性的限定。关系的完整性分为实体完整性、参照完整性和用户定义完整性。
实体完整性
由于主码 Primary Key
是区分实体的唯一性标识,所以关系 的主码不能取空值 NULL
(若主码由多个属性构成,则所有这些属性都不能取空值)。
CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, // 列级 Sname CHAR(8), Ssex CHAR(2) CHECK(Ssex IN ('男', '女')), ); CREATE TABLE Student ( Sno CHAR(9), Sname CHAR(8), Ssex CHAR(2) CHECK(Ssex IN ('男', '女')), PRIMARY KEY (Sno) // 表级 ); CREATE TABLE SC ( Sno CHAR(5), Cno CHAR(3), Grade int, PRIMARY KEY (Sno, Cno) // 表级,且只能是表级 );
参照完整性
参照完整性定义了外码 Foreign Key
与主码之间的引用规则,即外码的取值要么是 NULL
(若外码包含多个属性,则这些属性的值均取 NULL
;但假如外码中的属性是主属性,则不能取 NULL
),要么是被参照关系中某元组在该属性的取值。(“你从别人那里引用到的任何值,别人得有才能给你引用”)
CREATE TABLE SC ( Sno CHAR(5), Cno CHAR(3), Grade int, PRIMARY KEY (Sno, Cno), // 表级定义实体完整性 FOREIGN KEY (Sno) REFERENCES S(Sno), //表级定义参照完整性 FOREIGN KEY (Cno) REFERENCES C(Cno) //表级定义参照完整性 );
用户定义完整性
用户规定数据必须满足的一系列要求,包括属性上的约束与元组上的约束。
属性上的约束
CREATE TABLE SC ( Sno CHAR(5) NOT NULL // 约束 Sno 非空 Cno CHAR(9) UNIQUE NOT NULL, // 约束 Cno 唯一且非空 Age SMALLINT CHECK (Age >= 18 AND Age <= 23), // 约束 Age 的范围在 [18, 23] 之间 PRIMARY KEY (Sno, Cno), );
元组上的约束
可以在元组层面上限制不同属性之间的取值以及相互约束关系。
CREATE TABLE Student( Sno CHAR(9), Sname CHAR(8) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno), CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%') // 约束了学生性别为男时,其名字不能以 Ms. 开头 );
完整性约束命名子句
CONSTRAINT <完整性约束条件名> <完整性约束条件>
<完整性约束条件>
包括 NOT NULL
, UNIQUE
, PRIMARY KEY
, FOREIGN KEY
, CHECK
短语等。
CREATE TABLE Student( Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999), Sname CHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMERIC(3) CONSTRAINT C3 CHECK (Sage < 30), Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN ('男','女')), CONSTRAINT StudentKey PRIMARY KEY(Sno), CONSTRAINT SnameKey FOREIGN KEY(Sname) REFERENCES C(Sname) );
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术