一、定义并理解以下术语,并说明它们之间的联系与区别:
1.域:
定义: 每个属性的取值范围对应一个值的集合,称为该属性的域(domain)。
解释: 例如{1,2} 、大于0且小于一百的整数………可以称之为域( 域是有相同数据类型值的集合)
2.笛卡尔积:
定义: 又称直积,结果是有序对的集合,(对于X × Y来说)有序对第一个对象是属于X的一个成员,有序对第二个对象是属于Y的一个成员。
解释: 比如:集合X = { w , e },集合Y = { 1 , 2 , 3 },则两个集合的笛卡尔积为{ (w , 1) , (w , 2) , (2 , 3) , (e , 1) , (e , 2) , (e , 3) }。
3.关系:
定义: 关系模型中的单一的数据结构,可以理解为一张二维表(属性名+表名+数据),关系可以有三种类型:
基本表(实际存在的表,是实际存储数据的逻辑表示)
查询表(查询结果对应的表)
视图表(由基本表或其他视图表导出的表,不对应实际存储的数据);
解释: 比如:现实世界中的实体以及实体之间的联系我们用一种结构类型来描述,我们称之为关系(一张表)。
4.元组:
定义: 给定一组可相同的域(n个),他们的笛卡尔积的每一个元素,称为n元组,简称元组。
解释: 通俗来说,元组就是二维表中的行。
5.属性:
定义: 在现实世界中,一个事物常常取若干特性来描述,这些特性称为属性。
解释: 通俗来说,属性就是二维表中的列。
就像上面提到的:关系可以说是一张二维表,元组可以说是关系的行;属性可以说是关系的列,笛卡尔积可以说是在属性(列)上的一种运算。
1.候选码:
定义: 候选码: 关系中的某一属性组的值能够唯一标识一个元组,而其子集不能,则该属性组为候选码。
解释: 表的所有记录都有个不同的候选码;
不能为空;
通俗来说是能够唯一标识一条记录的最小属性集;
2.主码:
定义: 若一个关系中有多个候选码,则选定其中的一个作为主码
解释: 是从候选码里人为挑选的一条;
一个数据表只能有一个主码;
所有的记录的主键取值都不同;
不能为空
3.外码:
定义: 如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
解释: 外码并不一定要与相应的主码同名;
为了便于识别,当外码与相应的主码属于不同关系时,我们可以给他们取相同的名字;
外码能反映两个关系之间的一对多或多对多的关系
是能够唯一标识一条记录的最小属性集,主码是从候选码中人为的挑选出来的一条。
1.关系:
定义: 请见本文上方(属性名+表名+数据)
2.关系模式:
定义: 对关系的描述方式。(属性名+表名)
解释: 一般表示为:关系名(属性1、属性2、……、属性n)
例如:学生(学号,姓名,年龄)。
要求:关系的每一个分量必须是不可分的数据项,并且关系必须是规范化的。
3.关系数据库:
定义: 在一定范围内,所有实体及实体之间联系集合构成一个关系数据库。
关系是关系模式在某一时刻的状态或内容。
关系模式是静态的、稳定的;关系是动态的、随时间不断变化的。我们可以把关系模式和关系统称为关系;
关系数据库是按照关系模型建立的数据库。
首先,我们新建两张表(名称分别为father和mother),father表如下所示:
mother表如下:
这里我们对其进行求笛卡尔积,结果如下:
我们得到一张新表,这张表中有多条元组,我们规定一种“关系”,就是父亲i 和 母亲i 是一家人。否则不是一家人。则我们可以从结果表中抽出下表:
父亲 | 母亲 |
---|---|
父亲1 | 母亲1 |
父亲2 | 母亲2 |
父亲3 | 母亲3 |
我们称这张表中的“一家人”为 关系
下面我们来做一道练习题题目:假设有一个SPJ数据库,包括S、P、J以及SPJ四种关系模式
1. S(SNO,SNAME,STATUS,CITY);
2. P(PNO,PNAME,COLOR,WEIGHT):
3. J(JNO,JNAME,CITY);
4. SPJ(SNO,PNO,JNO,QTY).
供应商表s由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY) 组成。
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT) 组成。
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
今有若干数据如下:
接下来我们用关系代数表示以下查询:
(1)求供应工程J1零件的供应商号码SNO;
ΠSNO(σJNO=′J1′(SPJ))\Pi_{SNO}( \sigma_{JNO = 'J1'}(SPJ))ΠSNO(σJNO=′J1′(SPJ))
(2)求供应工程J零件P1的供应商号码SNO;
ΠSNO(σJNO=′J1′∧PNO=′P1′(SPJ))\Pi_{SNO}( \sigma_{JNO = 'J1' \wedge PNO = 'P1'}(SPJ))ΠSNO(σJNO=′J1′∧PNO=′P1′(SPJ))
(3)求供应工程JI零件为红色的供应商号码SNO;
ΠSNO(ΠSNO,PNO(σJNO=′J1′(SPJ))⋈ΠPNO(σCOLOR=′红′(P)))\Pi_{SNO(\Pi_{SNO , PNO}(\sigma_{JNO = 'J1'}(SPJ)) \Join \Pi_{PNO}( \sigma_{COLOR='红'}(P)) )}ΠSNO(ΠSNO,PNO(σJNO=′J1′(SPJ))⋈ΠPNO(σCOLOR=′红′(P)))
(4)求没有使用天津供应商生产的红色零件的工程号JNO;
ΠJNO(J)−ΠJNO(ΠSNO(σCITY=′天津′(S))⋈ΠSNO,PNO,JNO(SPJ)⋈ΠPNO(σCOLOR=′红′(P)))\Pi_{JNO}(J){-\Pi_{JNO}({\Pi_{SNO}({\sigma_{CITY='天津'}(S)}) \Join \Pi_{SNO , PNO , JNO }({SPJ}) \Join \Pi_{PNO}({\sigma_{COLOR = '红'}(P)}) }) }ΠJNO(J)−ΠJNO(ΠSNO(σCITY=′天津′(S))⋈ΠSNO,PNO,JNO(SPJ)⋈ΠPNO(σCOLOR=′红′(P)))
(5)求至少用了供应商S1所供应的全部零件的工程号JNO.
ΠJNO,PNO(SPJ)÷ΠPNO(σSNO=′S1′(SPJ))\Pi_{JNO , PNO}({SPJ} ) \div \Pi_{PNO}({\sigma_{SNO='S1'}(SPJ)})ΠJNO,PNO(SPJ)÷ΠPNO(σSNO=′S1′(SPJ))