2.1 关系数据库的结构

2.1 关系数据库的结构

关系数据库由的集合构成,每个表有唯一的名字.
一般说来,表中一行代表了一组值之间的一种联系。由于一个表就是这种联系的一个集合,表这个概念和数学上的关系这个概念是密切相关的,这也正是关系数据模型名称的由来。

元组

在数学术语中,元组只是一组值的序列(或列表)。

n元组

在n个值之间的一种联系可以在数学上用关于这些值的一个n元组(n- tuple)来表示,换言之,n元组就是一个有n个值的元组,它对应于表中的一行

等价术语

这样,在关系模型的术语中,关系用来指代,而元组用来指代,属性指代的是表中的

我们用关系实例这个术语来表示一个关系的特定实例,也就是所包含的一组特定的行

元组的顺序不重要

由于关系是元组集合,所以元组在关系中出现的顺序是无关紧要的,为便于说明,当我们在显示关系时,大多数情况下都按其第一个属性排序。

对于关系的每个属性,都存在一个允许取值的集合,称为该属性的域( domain)。这样instructor关系的salary属性的域就是所有可能的工资值的集合,而name属性的域是所有可能的教师名字的集合。

什么是原子的域

**如果域中元素被看作是不可再分的单元,则域是原子的(atomic)**。例如,假设instructor表上有一个属性phone_number,它存放教师的一组联系电话号码。那么phone_umber的域就不是原子的,因为其中的元素是一组电话号,是可以被再分为单个电话号码这样的子成分的。

是不是原子的域与使用这个域的方式有关

重要的问题不在于域本身是什么,而在于我们怎样在数据库中使用域中元素。现在假设phone_number属性存放单个电话号码。即便如此,如果我们把电话号码的属性值拆分成国家编号、地区编号以及本地号码,那么我们还是把它作为非原子值来对待。如果我们把每个电话号码作为不可再分的单元,那么phone_number属性才是原子的域
在本章,以及第3章~第6章,我们假设所有属性的域都是原子的。在第22章中,我们将讨论对关系数据模型进行扩展以便允许非原子域。

尽量避免使用空值

空值(null)是一个特殊的值,表示值未知或不存在。如前所述,如果我们在关系instructor中包括属性phone_number则可能某教师根本没有电话号码,或者电话号码未提供。这时我们就只能使用空值来强调该值未知或不存在。以后我们会看到,空值给数据库访问和更新带来很多困难,因此应尽量避免使用空值。我们先假设不存在空值,然后在3.6节中我们将描述空值对不同操作的影响。