软考计算题 · 数据库 · 关系代数

两个关系做笛卡尔积后元组数怎么算?

数据库关系代数题里,笛卡尔积是一个很基础、也很容易被低估的计算点。它不需要复杂公式,但要分清“行数”和“列数”分别怎么变化。

计算题专题 软考题库编辑部 持续更新

笛卡尔积:行数相乘,列数相加

如果关系 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|
条件连接有连接条件小于或等于笛卡尔积结果
自然连接按同名属性匹配还要注意重复属性处理
投影选择部分属性主要改变列,不一定改变行

做题时先问:题目问行还是列

关系代数计算题常把元组数和属性数放在一起问。元组数是行数,属性数是列数。题目如果问“有多少个元组”,你就看行;问“有多少个属性”,你就看列。

这个提醒很朴素,但很实用。很多同学不是不会笛卡尔积,而是题目问元组数,他顺手把属性数变化也掺进来了。

相关题目解析

下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。