数据库——笛卡尔积及基数

首先在CSDN寻找一圈,又在B站找了一圈,大家为什么要复杂化,这样的:

这样的:

设D1,D2,...,Di,...,Dn为任意集合,定义D1,D2,...,Di,...,Dn的笛卡尔积为D1×D2×...×Di×...×Dn={(d1,d2,...,di,...,dn)|di∈Di,i=1,2,3,...,n}

其中,每一个元素(d1,d2,...,di,...,dn)称为一个n元组(n-tuple,即属性的个数),元组的每一个di称为元组的一个分量。若Di(i=1,2,3,...,n)为有限集,其基数(cardinal number,即元组的个数)为mi(i=1,2,3,...,n),则D1×D2×...×Di×...×Dn的基数为各基数之积,笛卡尔积可以用二维表来表示。

这样的:


上面的不看,其实我给大家发张图,再举个例子就明白(图来自互联网,找不到出处了): 

例题:

R*S:

为便于观看,加了空行。


基数可以理解为元组的个数。

那么M=R*S={(A1 B1 C1 A1 B2 C2),( A1  B1 C1 A1 B3 C2)   …….}=  9

进阶理解:

我们描述一个事物,可以用其中若干特征来表示,这些特征称为属性(Attriubute)。

比如描述学生,学生的属性有姓名,性别,身份证号,职业等等,描述苹果,属性有颜色,味道,出产地等等。

同时,每个属性有取值范围,取值范围可以看做是一个值的集合,称为该属性的(domain)。

比如,性别的域为{男,女},也就是说性别的取值范围是男,女;

颜色的域也可以为{赤,橙,黄,绿,青,蓝,紫},也就是说颜色的取值范围是赤,橙,黄,绿,青,蓝,紫;

个位整数的域为{0,1,2,3,4,5,6,7,8,9}等等。

因此,在笛卡尔积定义中用字母D代表域,D可以看成是取值范围,集合,或空间。看哪个好理解了。

若D1={0,1},D2={a,b},D3={c,d},求D1×D2×D3。我们来分析:

D1的取值范围为{0,1}

D2的取值范围为{a,b}

D3的取值范围为{c,d}

根据定义,这有三个域D1,D2,D3相乘,笛卡尔积的每一个元素将会是(d1,d2,d3)的形式,也就是一个三元组。

元组的每个值di都称为元组的一个分量,而每个分量分别来自不同的域D1,D2,D3。

所以,

D1×D2×D3={(0,a,c),(0,a,d),(0,b,c),(0,b,d),(1,a,c),(1,a,d),(1,b,c),(1,b,d)}

它的基数为2×2×2=8,也就是元组的个数为8,用二维表表示的行数为8。

在进行笛卡尔积运算前,需要注意的是,参与运算的某属性的取值范围(域)D1,D2,...,Dn并不会取所代表意义的全部可能的值,但他们的计算值(笛卡尔积)却是所有可能的组合。

例如,姓名的域往往抽取有限个{张三,李四},学号的域也是抽取有限个{100101,100102,100103}。

但笛卡尔积却是他们的所有可能的组合{(张三,100101),(张三,100102),(张三,100103),(李四,100101),(李四,100102),(李四,100103)}。

如果用二维表表示的话,这并没有现实的意义,因为这是所有可能的组合。

而现实情况是,一个人只可能有一个学号,一个学号只能对应一个人。

所以,引出另一个定义:

D1×D2×...×Di×...×Dn的子集称为在域D1,D2,...,Di,...,Dn上的关系,记为R(D1,D2,...,Di,...,Dn),称关系R为n元关系。

如图,用该二维表表示的关系R为4元关系。它是域D1,D2,D3,D4(学号,姓名,专业,性别)笛卡尔积的子集。而关系R具有现实意义,因为它可能就是某一学校的学生表。

域D1,D2,D3,D4(学号,姓名,专业,性别)笛卡尔积的基数为3×3×3×2=54,这里是它的子集,只有3行,基数为3。

同时,关系R也可以看做一个域(二维表),有三种取值,一个元组意为一个取值。可以与另一个域(二维表)做笛卡尔积,形成一个新的域(二维表)。

  • 16
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程图一乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值