2.2 关系模式与关系数据库模式
上一节说清了表是什么,这一节说怎样描述一张表,答案是关系模式。

重 点这一块看的时候抓两点
第一,R(U,D,DOM,F) 五个字母各代表什么,第 23 页用 CourseSelect 逐个填了一遍。第二,关系模式和关系的区别是型和值的区别,第 24 页和第 27 页两张图说的是同一件事。第 25 页的五个关系模式后面各章反复用,见一次记一次。
想一想
描述一张表,最少要说清哪几样东西?
上一节说清了表是什么,这一节说怎样描述一张表,答案是关系模式。

第一,R(U,D,DOM,F) 五个字母各代表什么,第 23 页用 CourseSelect 逐个填了一遍。第二,关系模式和关系的区别是型和值的区别,第 24 页和第 27 页两张图说的是同一件事。第 25 页的五个关系模式后面各章反复用,见一次记一次。
描述一张表,最少要说清哪几样东西?
关系模式 R(U, D, DOM, F) 是对关系的描述,日常简记为 R(A1, A2, …, An)。

R 是名字,U 是有哪些列,D 是用到哪些域,DOM 是哪一列用哪个域,F 是列与列之间的规则。简记时只写名字和列名,因为域和规则通常另外说明。课件上的标题句“表是怎么被规定出来的,答案就是关系模式”,把这一页说完了。
一份表单的说明书:表单叫什么名字,有哪些栏,每一栏填什么类型的内容,哪一栏对应哪种类型,各栏之间要满足什么规矩。五样说清,谁都能照着印出同样的表单。
简记形式 R(A1, …, An) 丢掉了哪几样信息?
用 CourseSelect 把五个字母各填一遍:U 是三个属性名,D 是三个域,DOM 把属性和域一一配对,F 是主键约束。

U = {studentId,courseId,term}。D = {学号域,课程号域,{2025春,2025秋}}。DOM(term) = {2025春,2025秋},给每一列穿上尺码。F = {(studentId,courseId,term) 是主键}。课件提醒 D 是 domain 不是 data,它装的是取值范围,不是数据。
F 是属性间依赖关系的集合,典型的是函数依赖和键约束。studentId 决定 name 和 major,意思是知道学号就能确定姓名和专业,这是第 12 章的主角。在 SQL 里 F 靠 PRIMARY KEY、UNIQUE、FOREIGN KEY、CHECK 这些约束落地。
DOM 和 D 的区别是什么?
关系模式对应关系头,静态稳定,关系对应关系体,随数据更新不断变化。

关系模式对应关系头,是型,固定不变。关系对应关系体,是值,随数据更新变化。课件底部两句:新增 1000 条选课记录,模式没变。把 term 从两个值扩到四个值,改的是模式。
班级花名册的表头一年不变,名单每学期都在变。表头是关系模式,某一天的名单是关系。
加一列改的是表的结构,也就是关系头,关系模式跟着变。其余三个都只动了关系体里的数据,模式不变。
把一门课的课时从 48 改成 64,改的是模式还是关系?
教学数据库有五个关系模式,教师、学生、课程描述实体,选课、授课描述联系。

教师、学生、课程三个模式各描述一类实体。选课、授课两个模式描述实体之间的联系,它们的属性正好是两边的主码,选课多了一个成绩。括号里第一个属性通常就是主码,选课和授课要两个属性合起来才够。
这五张表贯穿全书,第 5、6 章的每一条 SQL 都在它们上面练,第 12 章拿它们讲范式,第 13 章反过来讲它们是怎么设计出来的。
授课(教师号,课程号) 为什么不需要“姓名”这一列?
关系模式的实例就是某一时刻表里的全部行,这六行是教师关系模式此刻的值。

这张表有六个元组,度是 8,一行里 8 个分量按模式的属性顺序排列,第一个是教师号,最后一个是院系。工资一列出现 3610.5 和 3332.67,说明它的域是实数,年龄一列都是整数。明天给谁涨一次工资,实例就变了,模式没有变。
关系模式像考试的答题卡样式,实例像这次考试收上来的全部答题卡。下次考试换一批答题卡,样式还是那一张。
这六行里,哪一列的值能唯一认出一位教师?
关系数据库模式是全部关系模式的集合,是型,关系数据库是这些模式在某一时刻的值。

一个关系模式描述一张表,关系数据库模式描述整个库里所有的表。型与值的对比和第 1 章三级模式里的“模式”是同一回事,说的都是全局逻辑结构。teaching 的关系数据库模式就是第 25 页那五行。
teaching 数据库的关系数据库模式里有几个关系模式?