笛卡尔积:行数相乘,列数相加
如果关系 R 有 m 个元组,关系 S 有 n 个元组,那么 R×S 的元组数就是 m×n。原因很简单:R 中每一行都要和 S 中每一行组合一次。
属性数则通常是两个关系属性数相加。比如 R 有 3 个属性,S 有 4 个属性,R×S 的结果关系通常有 7 个属性。
元组数|R×S| = |R| × |S|
属性数R的属性数 + S的属性数
记忆行数相乘,列数相加
别把笛卡尔积和自然连接混在一起
笛卡尔积是不带条件的全组合,结果往往很大。连接运算通常会带条件,比如 R.A = S.A,只保留满足条件的组合。自然连接还会按同名属性匹配,并去掉重复属性。
考试如果只写 R×S,一般就是笛卡尔积;如果写 R ⋈ S 或给出连接条件,就要按连接含义判断,不能直接套行数相乘。
| 运算 | 是否有条件 | 元组数怎么想 |
|---|---|---|
| 笛卡尔积 R×S | 无条件全组合 | 通常 |R|×|S| |
| 条件连接 | 有连接条件 | 小于或等于笛卡尔积结果 |
| 自然连接 | 按同名属性匹配 | 还要注意重复属性处理 |
| 投影 | 选择部分属性 | 主要改变列,不一定改变行 |
做题时先问:题目问行还是列
关系代数计算题常把元组数和属性数放在一起问。元组数是行数,属性数是列数。题目如果问“有多少个元组”,你就看行;问“有多少个属性”,你就看列。
这个提醒很朴素,但很实用。很多同学不是不会笛卡尔积,而是题目问元组数,他顺手把属性数变化也掺进来了。
相关题目解析
下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。
- 两个关系做笛卡尔积后元组数怎么算?关系代数 / 笛卡尔积