逻辑数据库设计:是将概念数据模型转化为逻辑数据模型的过程。最终的数据库必须满足用户对于数据共享、灵活性和易于访问等方面的需求。
关系数据模型
- 关系数据模型采用表的方式来存储数据。
- 关系数据模型包含三个组成部分:
1)数据结构:数据以具有行和列的表的方式组织。
2)数据操纵:利用功能强大的操纵(使用SQL语言)来操纵存储在关系中的数据。
3)数据完整性:在操纵数据时,包含相应的机制来定义业务规则以维护数据的完整性。
关系数据结构
- 关系:是一个已命名的二维数据表。每个关系(表)包含一组已命名的列,以及任意数目的未命名的行。关系中的每一行对应一条记录,记录中包含一个实体的数据(属性)值。
- 关系键:用户必须能够根据行中的数据值来存储或检索关系中的一行数据。为实现这个目的,每个关系必须有一个主键。
- 主键:是可以惟一标识关系中每一行的属性(或属性集)。我们通常在作为主键的属性名加下划线。在E-R模型中作为实体标识符的属性(或属性集)在表示该实体的关系中也可能是主键的组成部分。(但是也有一些例外:比如关联实体不一定有标识,弱实体的标识符只是弱实体主键的一部分。)此外,一个实体中可以作为关联关系主键的属性可能有多个。
- 复合键:是由多个属性构成的主键。
- 外键:是一个数据库中关系的属性(可能是复合属性),它是该数据库的另一个关系的主键。外键用来实现两个表或关系之间的联系。外键通常用虚线下划线来表示。
关系的性质
关系是二维的数据表,但并不是所有的表都是关系,关系具有一些非关系表所不具有的性质。如下:
1)数据库内的每个关系(表)的名字是惟一的
2)任意行的任一列是原子的(单值)。在关系内,不允许有多值属性
3)每一行是惟一的,同一关系内的任意两行都不能相同
4)表中的每个属性(列)的名字是惟一的
5)关系中列的顺序(从左到右)是无关的。交换关系的任意两列不影响关系的意义和使用
6)关系中的行的顺序(从上到下)是无关的。和列的情况一样,关系中的行也可以交换或是以任意顺序存储
完整性约束
关系数据模型包含有多种类型的约束(业务规则),它们用于维护数据库内数据的正确性和完整性。最主要的几种完整性约束包括域约束、实体完整性、参照完整性和动作断言。
- 域约束:关系中某一列的所有值都必须来源于同一个域。一个域定义通常包含以下部分:域名、含义、数据类型、大小(或长度)、允许的取值或允许的范围。
- 实体完整性:确保每个关系都有一个主键,而且主键的所有数据值都是有效的。特别是,它能保证每个主键的属性值都非空。
- 参照完整性:是两个关系的行之间维持一致性的规则。要求如果一个关系中有外键,则每个外键的值必须与另一个关系的主键取值匹配,或者必须为null。
- 动作断言
良构关系:直观的说,良构关系应该有最小的冗余,并可以让用户在表中插入、修改和删除表中的行,且不出现错误和不一致的情况。如果不是良构关系,则关系中数据的冗余可能导致错误或不一致的情况(称为异常)。有三种可能的异常:插入异常、删除异常和修改异常。
将EER图转化为关系:通过使用一组定义好的规则,可以方便地将E-R图转化(映射)为关系。具体映射步骤见书本。
规范化
定义:将含有异常的关系分解为更小的,良构的关系的过程。
步骤:分为几个阶段来实现和理解,每一个阶段都对应有一个范式。
范式:根据函数依赖(或是属性间联系)对关系应用某些简单准则后所得到的关系的状态。
函数依赖:存在于两个属性或两个属性集之间的约束。
候选键:可以惟一标识关系中某一行的属性或属性集。(主键是候选键中的一个)
基本范式:
1)第一范式:不含多值属性。
2)第二范式:满足第一范式,且任意非键属性都完全函数依赖于主键。(不是依赖于部分主键)
3)第三范式:满足第二范式,且不含传递依赖。(传递依赖是在两个(或多个)非键属性间的函数依赖)