一、域:
定义:域是一组具有相同数据类型的值的集合
举例:自然数、实数、{0,1,2,3}、大于0小于100的整数等等
个人理解:你可以将域理解为一个地域,因为满足相同的条件而聚集在一起,有点像我们人类的村落聚集地。
二、笛卡尔积:
定义:给定一组域D1,D2,...,Dn,允许其中的某些域是相同的,D1,D2,...,Dn的笛卡尔积为:
D1 x D2 x ... xDn = {(d1,d2,...,dn) | di∈Di,i=1,2,...,n}
其中集合中的每一个元素(d1,d2,...,dn)叫做一个n元组,简称元组。元素中的每个值di叫做一个分量。
个人理解:你可以用坐标系的思想来理解笛卡尔积:
以两组域D1、D2的笛卡尔积举例,你可以将D1看做x轴,D2看做y轴;当在D1域中取一个值,D2域中取一个值的时候;就好像在直角坐标系x和y轴上各取了一个值,确定了一个坐标,也就是相当于确定了一个2元组。
三个域求笛卡尔积时,你可以看做空间直角坐标系,思想以此类推到多维域求笛卡尔积。
可以将笛卡尔积表示成为一个二维表。表的每一行对应一个元组,同一列的所有取值都源自于一个域。
例如:
D1 = {A1,B1} D2 = {A2,B2} D3 = {A3,B3}
则D1 x D2 x D3 = {(A1,A2,A3),(A1,A2,B3),(A1,B2,A3),(A1,B2,B3),(B1,A2,A3),(B1,A2,B3),(B1,B2,A3),(B1,B2,B3)}
用二维表可以表示为:(为啥叫二维呢?因为在平面上就是二维世界啊!)
| A1 | A2 | A3 |
| A1 | A2 | B3 |
| A1 | B2 | A3 |
| A1 | B2 | B3 |
| B1 | A2 | A3 |
| B1 | A2 | B3 |
| B1 | B2 | A3 |
| B1 | B2 | B3 |
三、关系:
定义:D1 x D2 x ... xDn的子集叫做域D1,D2,...,Dn上的关系,表示为R(D1,D2,...,Dn)。
R是关系的名字,n是关系的目或度(用坐标思想来理解的话,相当于对应坐标的维数)。
几点说明:
-
我们不难看出关系是笛卡尔积的有限子集(无限的话就没有意义了),所以关系也是对应着一张表,表的每行是一个元组,每列的取值源自于同一个域。
-
因为有的域可以重复,为了加以区分,所以我们对每一个列取名字,称为属性。
-
如果关系中的某一个属性组的值能够唯一的确定某一个元组,但是属性组的子集却不能,那么我们称这个属性组为候选码。(其实就像我们的身份证号码一样,唯一的确定了我们的存在,但是缺一位都不行,缺了一位,别人就可能和你的其他位的数字一样,就无法在唯一确定你是你了!)(所以候选码就像是元组的身份证号码)
-
一个关系可能有多个候选码(就像在学校你的身份证号可以唯一的确定你,你的学籍号也可以唯一的确定你!),任意选择其中一个作为主码。
-
所有候选码包含的属性被称为主属性,其他属性则被称为非主属性或者非码属性。
个人小结:
-
关系是笛卡尔积的一个子集
-
候选码唯一标识元组,选候选码中的一个为主码
-
候选码中的属性为主属性,其余为非主属性
四、关系的性质说明:
-
因为有属性来将列与列之间区分,列的顺序可以随意调换。
-
同一列的所有取值都来自同一个域,因此他们的取值是同一类型的数据。
-
不同的列可以取同一个域的数据。(也就是说,同一列的数据要求一定在同一个域;至于列与列之间取不取同一个域不做要求。)
-
任意两个元组的候选码不能取一样的值。(一样的话就不能唯一确定了,就像你的身份证号和别人一样,你就难以证明你是你了!)
-
行的次序可以任意调换。(列有属性来彼此区分,行有候选码来彼此区分,所有次序都可以随意调换)
-
每一个分量的取值都不可分。(什么意思呢?就是你不能嵌套,一个分量就是一个值,你不能和俄罗斯套娃一样里面还套着别的数据。)
五、关系模式:
定义:关系模式是对关系的描述。
表示:R(U,D,DOM,F)
其中R为关系名,U为属性名字的集合,D是U中属性所在的域,DOM是属性到域的映像集合,F为属性之间数据的依赖关系的集合。
换句话说:关系模式确定了关系里面有什么东西,这些东西具体怎么取值,彼此之间有什么联系。
注意:
关系模式确定了基本不再变化了,但是关系是一直在变的,你的一些操作不断地在更新数据。
换句话说:关系模式和关系就像是Java里面类和对象之间的关系,冰箱里面做冰的模具和冰块的关系。
六、关系模式的存储结构:
第一种:关系数据库中的一个表(关系)就对应一个操作系统的文件,将具体存储工作交给操作系统。(靠别人)
第二种:关系数据库管理系统自己向操作系统要一些存储空间,然后再自己划分具体的空间怎样安排。(靠自己)