2.1关系数据库的结构
关系数据库由表(table)的集合组成,每个表都有唯一的名字。
表中的一行代表一组值之间的一种联系
在关系模型中,关系(relation)用来指代表,元祖(tuple)用来指代行,属性(attribute)指代表中的列
关系实例(relation instance)用来表示一个关系的特定实例,也就是所包含的一组特定的行
对于关系的每个属性,都存在一个允许取值的集合,称为该属性的域(domain),要求关系r的所有属性的域都是原子的。
空(null)值是一个特殊值表示该值不存在或者未知
2.2 数据库模式
数据库模式(database schema)和数据库实例(database instance),前者是数据库的逻辑的设计,后者是给定时刻数据库中数据的一个快照
关系的概念对应程序设计语言中变量的概念,关系模式(relation schema)的概念对应程序设计语言中的类的定义,关系实例的概念对应于程序设计语言中变量的值
2.3 码
一个关系中没有两个元组在所有的属性上取值都相同
超码(superkey)是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一标识一个元组。
一个超码的任意子集都不能称为超码时,称为这个超码为候选码(candidate key)
主码(primary key)代表在数据库设计时被选中的候选码
码的指定代表了被建模的事物在现实世界中的约束
一个关系模式r1可能在他的属性中包含另外一个关系模式r2的主码,这个主码称为外码(foreign key),r1也称为外码依赖的参照关系(referencing relation),r2叫做外码的被参照关系(referenced relation)
参照完整性约束(referential integrity constraint)要求在参照关系中任意元组的特定属性上的取值必然等于被参照关系中某个元组在特定属性上的取值
2.4 模式图
每个关系用一个矩形来表示
主码属性用下划线来标注,外码依赖用从参照关系的外码属性到被参照关系的主码属性之间的箭头来表示
在这里插入图片描述
2.5 关系查询语言
查询语言(query language)是用户从数据库中获取信息的语言
查询语言分为过程化语言(procedural language)和非过程化语言(nonprocedural language)。
过程化语言,用户指导系统对数据库进行一系列操作
非过程化语言,用户只需描述所需内容,而不需要给出具体过程
有一些纯查询语言:关系代数是过程化的,而元组关系的演算和域关系的演算是非过程化的。
2.6 关系运算
所有过程化的查询语言都提供了一组运算,这些运算要么施加于一个关系上,要么施加于一对关系上。运算的结果是单个关系。
- 选择,返回输入关系中满足谓词的行
- 投影,对输入关系的所有行输出特定属性,从输出中去除重复元组
- 自然连接,从两个输入关系中输出这样的元组:他们在具有相同属性名所有属性上取值相同
- 笛卡尔积,从两个输入关系中输出所有的元组(无论他们在相同属性上的取值是否相同)
- 并(集合运算),输出两个输入关系中元组的并