关系模型介绍
关系数据库由表table的集合构成,每个表都有唯一的名字。
Relation 关系用来指代表,而元组(tuple)用来指代行。类似的属性attribute指代的是表中的列。
关系实例(relation instance)用来表示一个关系的特定实例。
也就是一组特定的行。
数据库模式 database schema
数据库实例(database instance),前者是数据库的逻辑设计,后者是给定时刻数据库中的数据的一个快照。
Superkey是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一的标识一个元组。
例如instructor关系中的id属性足以将不同的教师元组区分开来,因此,ID是一个超码。另一方面,instructor的nam属性却不是一个超码,因为几个教师可能重名。
超码中可能包含无关紧要的属性。我们通常只对这样的一些超码感兴趣,它们的任意超码真子集都不能成为超码。这样的最小超码称为候选码(candidate key)
我们用主码(Primary key)这个术语来代表数据库设计中选中的,主要用来在一个关系中区分不同元组的候选码。
码是整个关系的一种性质,而不是单个元组的性质。
关系中的任意两个不同元组都不允许同时在码属性上具有相同的值。码的指定代表了被建模的事物在现实世界中的约束。
一个关系模式r1可能在它的属性中包括另外一个关系模式r2的主码。这个属性在r1上称作参照r2的外码(foreign key)关系r1也称为外码依赖的参照关系(referencingrelation ),r2叫做外码的被参照关系(referenced relation)。
参照完整性约束(referentialintegrity constraint)。
要求在参照关系的任意元组在特定属性上的取值必然等于被参照关系中的某个元组在特定属性上的取值。
模式图:
Schema diagram
每一个关系用一个矩形来表示,关系的名字显示在矩形上方,矩形内列出各属性。
主码属性用下划线标注。
外码依赖用从参照关系的外码属性到被参照关系上的主码属性之间的箭头表示。
关系查询语言
Query Language 是用户用来从数据库中请求获取信息的语言。这些语言通常比标准的程序设计语言层次更高。
在过程花语言(proceduralLanguage)中,用户指导系统对数据库进行一系列操作以计算出所需结果。在非过程化语言(nonprocedural language)中,用户只需描述所需信息,而不用给出获取该信息的据图过程。
关系运算
所有的过程化关系查询语言都提供了一组运算,这些运算要么施加于单个关系上,要么施加于一对关系上。这些运算具有一个很好的,并且也是所需的性质:预算结果总是单个的关系。
连接运算可以通过下述方式来结合两个关系:把分别来自两个关系的元组对合并成单个元组。有几种不同的方式来对关系进行连接。
书中取例子:自然连接:对于来自instructor关系的一个元组与department关系中的一个元组来说,如果它们在dept_name属性上取值相同,那它们就是匹配的。所有这样匹配的元组都会在连接结果中出现。通常来说,两个关系上的自然连接运算所匹配的元组在两个关系公有的所有属性上取值相同。
笛卡儿积运算从两个关系中合并元组,但不同于连接运算的是,其结果包含来自两个关系元组的所有对,无论他们的属性值是否相同。
关系代数
符号(名字) | 使用示例 |
|
|
|
|
|
|
|
|
|
|
参考资料:
《数据库系统概念》 Abraham Silberschatz等编著