数据模型 / Chapter 2
* 层次数据模型(了解)
用树型(层次)结构表示实体类型及实体间联系。只能表示1:N联系。编写应用程序比较复杂。
除根以外,所有的记录型都应该有唯一的双亲。PCR:双亲子女关系
现实世界中需多数据不是层次型的。而层次数据模型在表示多对多、多个祖先的关系时会产生数据冗余,浪费存储空间,且会导致数据的不一致。
* 网状数据模型(了解)
用有向图(网络结构)表示实体及实体之间联系。编写应用程序比较复杂。
关系数据模型
以集合论中的关系概念为基础。用表格结构表达实体集,用外键表示实体间联系。
基本概念
-
属性和域
属性描述事物的特征,域是一个属性的所有合法取值的集合。
-
关系和元组
例如:学生的关系模式 STUDENT(学号,姓名),其中某一个学生 <9098138,李彤> 就是关系R的一个元组
关系对应表,属性对应列,元组对应行。
-
键
关系的某一个属性或属性组的值唯一地决定其它所有属性的值,而其任何真子集无此性质。通常从键中选一个作为主键。
外键是引用其它关系的键或本关系的键。
完整性约束
-
域完整性约束
属性值应是域中的值,或在语义合法的前提下可为空。
-
实体完整性约束
每一个关系都应有一个值非空的主键,用来唯一识别一个元组。
-
引用完整性约束
外键要么是空缺,要么是引用实际存在的主键值。
-
一般性完整性约束
关系代数操作
-
选择操作\(\sigma _{cond} (R)\)
横向挑选,选出符合条件cond的记录。相当于
SELECT * FROM R WHERE cond
。性质:
后者效率更高。
-
投影操作\(\Pi _{attrs}(R)\)
竖向挑选,选出R中的attrs这些属性。
与选择操作组合使用即可实现我们常用的
SELECT attrs FROM R WHERE cond
。 -
集合操作
交并差。参与集合操作的项目必须有相同的目,且对应属性的域相同才有意义。
-
连接操作$R ∞_{cond} S=\sigma _{cond}(R \times S) $
即作笛卡尔积后进行选择操作。笛卡尔积是将两个表强行拼在一起,属性数为两个表属性数的和,记录数为两个表记录数的积,如[a,b,c]×[1,2,3]=[[a,1], [a,2], [a,3], ...]
连接条件
-
等连接
条件均为=构成。①做笛卡尔积;②选择出同时满足R.Ai=S.Ai的元组。
-
自然连接
在等连接后去除重复属性。
-
-
除法
R÷S就是判断关系R中,属性或属性集X的各种取值的属性或属性集Y构成的集合,是否包含关系S中属性Y的所有取值。
-
外连接
外连接与连接操作的区别在于保留非匹配元组
- 左外连接:保留左关系的非匹配元组
- 右外连接:保留右关系的非匹配元组
- 全外连接:保留左、右关系的非匹配元组
关系演算
关系代数表示关系的操作,用户必须指出运算方法步骤;而关系演算用谓词公式表示查询条件,指出“做什么”,而“怎么做”则由系统去完成。目前,面向用户的关系数据库语言基本上都以关系演算为基础。
-
元组关系演算
{t[〈属性表〉]|P(t)}
t是元组变量,如查询整个t,则可省去属性表。P(t)是t应满足的谓词。
-
域关系演算
以域为变量。
关系GRADE(学号,课程号,成绩),查询须补考的学生的学号和补考的课程号:
E-R数据模型
传统数据模型以记录为基础,不能很好地面向用户和应用,记录和实体不一定相对应。
E-R数据模型是一种有代表性的统一的非传统数据模型。E-R不是面向实现,而是面向现实世界的。
- 实体:可以相互区别、被人识别的事物
- 属性:实体的特征
- 实体键:能够唯一识别实体的属性或属性组
- 联系:表示实体和实体间的关系,一对一、一对多、多对多
- 实体参与度:实体参与联系的次数范围,例如学生的选课次数
范式
构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。
-
第一范式(1NF)
每个属性值都是不可再分的最小数据单位
例如职工可能有多个电话,则电话应分属性或分记录存储,不能合起来存储
-
第二范式(2NF)
非主属性全部依赖于全部主键
-
第三范式(3NF)
非主键列必须直接依赖于主键,不能存在传递依赖
例如:主键是课程编号,列1是教师名,列2是教师地址。教师地址传递依赖于教师名,不满足第三范式。