第 2 章 关系数据库 · 第一节
域、笛卡尔积与关系
从取值范围到所有可能的搭配,再挑出有意义的那部分
这一章给“表”下一个严格的定义,再讲怎样描述一张表,以及怎样保证表里的数据是对的。
知道更多本章分五节
课件的三个板块拆成五节。2.1 关系的形式化定义及性质分成两节,先从域搭到关系,再讲关系头、关系体和五条性质。2.2 关系模式单独一节,2.3 关系的码和关系的完整性分成两节,先讲候选码、主码、外码,再讲三类完整性。
知道更多为什么要形式化
第 1 章说关系模型建立在严格的数学概念之上,这一章就是那套概念。定义 2.1 到定义 2.7 一共七条,每一条都在说表的某一个部分:域说一列能取什么值,笛卡尔积和关系说表是怎样搭出来的,关系模式说表怎么描述,码和完整性说表里的数据靠什么管住。
想一想
一张 Excel 表要满足什么条件,才配叫“关系”?
三个板块回答三个问题:表在数学上是什么,怎样描述一张表,表里的数据靠什么保证是对的。
重 点三个板块的关系
2.1 从域出发一步步搭出关系,相当于讲砖和墙。2.2 的关系模式是表的说明书,相当于讲图纸。2.3 的码是认出一行的依据,完整性是三条必须遵守的规矩,相当于讲验收标准。考试最常考的是候选码的判断和三类完整性的归类,分别在第四节和第五节。
打个比方
第 1 章第 46 页说关系是一张规范化的二维表,表名、表头、表体三部分。这一章把三个部分各自换成数学的说法:表头是关系头,表体是关系体,整张表是笛卡尔积的一个子集。
域是一组类型相同的值的集合,域里值的个数叫基数。
关键术语
域Domain一组具有相同数据类型的值的集合,也叫值域,记作 D。
基数Cardinality域里包含的值的个数,记作 m。
重 点定义 2.1 的两个要点
“相同数据类型”是说一个域里的值必须是同一种东西,整数和姓名不能混在一个域里。三个例子都来自第 1 章表 1-1 的教师关系 t:D1 是姓名一列出现过的六个名字,D2 是性别一列的男和女,D3 是年龄一列的六个数。基数就是数一数域里有几个不同的值。
打个比方
点单时辣度只能选微辣、中辣、特辣,这三个值就是辣度的域,基数是 3。填“很辣”会被退回,因为它不在域里。
笛卡尔积是从每个域各取一个值拼成有序组,所有拼法合起来的集合。
关键术语
元组Tuple笛卡尔积里的一个元素,n 个分量按顺序排成的一组,也叫 n 元组。
分量Component元组里的一个值,第 i 个分量来自第 i 个域。
重 点把定义 2.2 的式子读成人话
花括号表示这是一个集合。竖线左边写的是集合里的元素长什么样,是一个 n 位的小括号。竖线右边是条件,第 i 位的值必须来自第 i 个域。元组是有序的,(1,2,3) 和 (2,3,1) 是不同的元组,因为第一位有第一位的含义,位置换了含义就换了。
打个比方
穿衣搭配:上衣域、裤子域、鞋域各选一件,一套搭配是一个元组,上衣是这个元组的一个分量。顺序有意义,因为上衣就穿在上面,不能和鞋换位置。
想一想
两个域各有 3 个值,它们的笛卡尔积里有几个元组?
笛卡尔积的基数等于各个域基数的乘积,姓名 6 个乘性别 2 个等于 12 个元组。
重 点为什么是相乘
第一个位置有 m1 种选法,第一位不管选什么,第二个位置都有 m2 种选法,所以两位合起来是 m1 乘 m2 种,往后每加一个域再乘一次。12 个元组里有一半在现实里并不存在,比如 (刘杨,女),笛卡尔积只负责列出全部可能,不负责判断真假,这正是下面几页要讲的事。
练一练
三个域的基数分别是 4、2、3,它们的笛卡尔积的基数是多少?
- A9
- B24
- C12
- D6
答案 B基数相乘,4 乘 2 乘 3 等于 24。选 9 的是把三个数加起来了,笛卡尔积的规则是相乘,不是相加。
想一想
如果再加一个有 4 个值的“职称”域,元组个数变成多少?
食堂点餐三列各选一个,2 乘 3 乘 2 等于 12 种套餐,这就是笛卡尔积。
重 点课件里的三个关键词
每列各取一个,对应定义里的“di 来自 Di”。全部列出,对应“所有元组的集合”,一种搭配都不能漏。数量是个数相乘,对应上一页的基数公式。课件下半页把定义 2.2 的三个术语各配了一句人话:有序是位置有意义,分量是小括号里的每一位,基数是个数相乘。
6 个名字和 2 种性别逐一配对,得到 12 个二元组。
重 点逐一配对是什么意思
每个名字都要和男、女各配一次,一个都不漏,所以刘杨出现了两次,石丽也出现了两次。两个域的笛卡尔积里每个元组有两个分量,所以叫二元组。这 12 个二元组里只有 6 个是真的,另外 6 个只是可能。
打个比方
班级合影排队,6 个人每人试两种站位,一共 12 张照片,其中大半照片里的站位并不是真实安排。笛卡尔积就是把这 12 张照片全部洗出来。
笛卡尔积可以画成一张二维表,每个元组是一行,每个域是一列。
重 点从集合到表
花括号换成表格,一个元组换成一行,一个域换成一列,表头 tn 和 sex 就是后面要讲的属性名。表上 12 行里有 6 行是假的,说明笛卡尔积只是原材料,真正的表要从这 12 行里挑。
打个比方
一张空白排班表列出了所有人和所有班次的全部组合,真正的排班只在其中几格打勾。全部组合是笛卡尔积,打了勾的那几格是关系。
09
第 2 章 · 第一节
笛卡尔积和数据库有什么关系
关系(表)是若干域的笛卡尔积中的一个子集,笛卡尔积是全部可能,表是满足约束的那部分可能。
重 点三句话的逻辑
先列出全部可能,再从中挑出真实存在的,得到的就是表。挑选的依据叫约束,这个词到第五节会变成“完整性”。这一页是整章的分水岭,前面的域和笛卡尔积都是为了说清“全部可能”,后面的关系、模式、码都在说“挑出来的那部分”。
打个比方
食材两两随便搭配是笛卡尔积,餐厅真正卖的那几道菜是关系。菜单上没有“可乐炒米饭”,不是因为它拼不出来,而是因为它不符合约束。
想一想
“子集”这个词意味着表里可能出现笛卡尔积之外的行吗?
定义 2.3 把关系写成 R(D1, D2, …, Dn),R 是关系的名字,n 是关系的目或度,也就是列数。
关键术语
关系Relation笛卡尔积的任一子集,定义在 n 个域上的叫 n 元关系。
度Degree关系的目,也就是它有几个属性、几列。
重 点读图
图上一行是一个元组,一列是一个属性,每一列的值来自一个域,属性的名字必须唯一。教师关系 T1 是从 12 行里挑出来的 6 行,它的度是 2。
试一试从 12 行里挑出关系
D1 × D2 的全部 12 行,点一行决定留不留
| tn 姓名 | sex 性别 |
| 刘杨 | 男 |
| 刘杨 | 女 |
| 石丽 | 男 |
| 石丽 | 女 |
| 顾伟 | 男 |
| 顾伟 | 女 |
| 赵礼 | 男 |
| 赵礼 | 女 |
| 赵希希 | 男 |
| 赵希希 | 女 |
| 张刚 | 男 |
| 张刚 | 女 |
11
第 2 章 · 第一节
什么是关系:把所有可能变成有意义的表
关系等于若干域的笛卡尔积中的一个有意义的子集,再给它起个名字 R。
重 点五个词串成一句
域是一列允许出现的取值范围,属性是一列的名字,元组是一行,度是列数,关系是有名字的子集。课件特别提醒同一个关系里属性名必须唯一,两列都叫 name,查询时就分不清要哪一列。
打个比方
课件的餐厅比方:笛卡尔积像把所有食材随便搭在一起,关系是餐厅真正卖的菜,从所有可能的搭配里筛掉没意义的,只留符合约束的那些,再给这道菜起个名字,这个名字就是 R。
四点说明:按度分单元、二元关系,元组个数是基数,属性名唯一而不同列可以同域,实际中的关系是有意义的子集。
重 点第三条最容易混
域和属性不是一回事,“职业”和“兼职”两列可以来自同一个域{教师,工人,辅导员},但必须有不同的名字。属性是列的名字,域是列的取值范围,一个域可以被好几列共用。表头一样的两张表叫同类关系,比如今年的学生表和去年的学生表。
练一练
教师关系 t 有 8 列 6 行,它的度和基数各是多少?
- A度 6,基数 8
- B度 8,基数 6
- C度 48,基数 48
- D度 14,基数 14
答案 B度是列数,也就是属性的个数,这里是 8。基数是元组的个数,也就是行数,这里是 6。两个数不能相乘也不能相加。
想一想
“职业”和“兼职”两列来自同一个域,值可以相同吗?