时间:2014.02.18
地点:基地
————————————————————————————
一。关系数据库的结构
关系数据库有表构成,每个表都有唯一的名字。表中每一行为一个记录项,每项代表的是一组取值之间的联系。于是可以说表就是这样一种关系得集合。在数学上,每项类似于元组的概念(元组tuple即一组值得序列),n个值之间的一种联系在数学上描述为n元组,对应于表中的一行。而每一列的取值即各项的属性取值。关系实例可用来表示一个关系的特定实例,前面已经说了,表其实是在描述一种关系的集合,那么关系实例即表中对应的一行,一行数据的关系满足该关系,是一个实例。
关系是元组的集合,对应关系的每个属性,都存在一个允许取值的集合,称为该属性的域。有了这些概念我们可以说: instructor(表名)关系的salary(列名)属性的域就是所有可能工资值得集合,而name(列名)属性的域是所有可能教师名字的集合。就关系r来说,关系r的所有属性要求是原子的,域中的元素不可再分,没有子成分(这里重要的不是域本身是什么,而在与我们怎样使用域中的元素,比如电话号码属性存放了单个电话号码,若果我们使用时将电话号码拆分为国家编号,地区编号,则是非原子对待,若是将电话号码视为一个整体不可拆分使用,则认为是原子的)。
空(null)是一个特殊的值,表示值未知或不存在,空值给数据库的访问和更新带来了许多困难,应该尽量避免使用。
————————————————————————————
二、数据库模式
数据库模式:数据库的逻辑设计
数据库实例:数据库中数据的一个快照
其实这两个概念有类似于面向对象程序设计的类的设计和一个类的实例,对不对?、
关系模式由属性序列以及各属性对应域组成,相当于定义一个类,而关系实例对应于一个变量的取值,给定变量,它的取值是可以变化的。
考察一个表department,它有三个属性:dept_name,building,budget
于是我们称:department关系的关系模式为:department(dept_name,building,budget),
在不同关系模式中我们可以使用相同属性将不同关系的元组联系起来。
————————————————————————————
三、码
我们必须有一种能区分给定关系中的不同元组的方法,即一个元组中必须有属性在取值上各不相同使得区分各元组。我们将这样一个或多个属性的集合成为超码,超码中各属性的组合可以使我们在一个关系中唯一的标识一个元组。根据定义,超码中可能包含无关紧要的属性,如果K是一个超码,那么K的任意超集也是一个超码,因此我们定义个最小超码,成为候选码。另外几个不同的属性集都可以做候选码也是可能的。我们用主码代表被数据库设计者选中的。主要用来区分不同元组的候选码。码是整个关系的一种性质,关系中任意两个不同元组都不允许同时在码的属性上具有相同的值。
主码的选中应该选择那些值从不或者极少变化的属性,并保证唯一性,例如一个人的地址可能会变化不宜作为主码,而身份证号码可以。并且习惯上,一个关系模式的主码属性列在其它属性的前面。
另外,一个关系模式r1可能在它的属性中包括另一个关系模式r2的主码,那么该属性在r1上称作参照r2的外码,关系r1也称作外码依赖的参照关系,r2叫做外码的被参照关系,例如dept_name是department的主码,在instructor关系中也存在,故称instructor的dept_name属性在instructor是外码,它参照了department。从instructor关系中任意取一个元组ta,那么在department关系中必然存在某个元组tb,是的ta在dept_name属性上的取值与tb在主码dept_name上的取值相同。参照关系还涉及参照完整性约束的概念,即要求在参照关系中,任意元组在特定属性上的取值必然等于被参照关系某个元组在特定属性上的取值。