关系数据模型
本文给出了关系数据模型中各部分的定义,以及模型中存在的约束。 接着给出在该模型上的关系代数及其演算。
关系数据模型与约束
定义:表为关系,行为元组,列标题为属性,值域为域,关系R为关系内含,其状态r(R)为关系外延。关系的另外一种定义:元组为域之间的映射,每个角色都是键值对,此时元组是无序的。
数据库约束分为3类:隐式约束为固有的基于模型的约束;显式约束为基于模式的约束(DDL定义);语义约束为基于应用的约束,又称业务规则。另一类重要的约束为数据依赖,包括函数依赖和多值依赖。以下属于基于模式的约束:
- 域约束。域的数据类型。
- 键约束。超键(superkey)唯一性约束,候选键中选一个主键来标识元组。
- 实体完整性约束。主键不为NULL。
- 参照完整性约束。参照的必须是存在的元组。
另外,还包括语义完整性约束、函数依赖约束。除了如上的状态约束,还包括变迁约束。
对于更新时的违例约束有多种处理:
- 插入。拒绝、修正拒绝插入的原因(级联)
- 删除。拒绝、级联删除、置空或默认值
- 更新。非主键非外键时不会有问题。
关系代数与关系演算
关系代数运算:
运算 | 用途 | 表示法 |
---|---|---|
选择 | 选择满足条件的元组 | $\sigma_{<select~cond>}(R)$ |
投影 | 只选择指定的属性 | $\pi_{<propperty~list>}(R)$ |
连接 | 关系$R_1$和$R_2$中满足连接条件的元组 | $R_1\bowtie_{<join~cond>} R_2$ |
等值连接 | 上述运算的条件中只作相等判断 | $R_1\bowtie_{<join~cond>} R_2$ |
自然连接 | 消除等值连接中重复字段 | ${R_1}_{*<join~cond>} R_2$ |
并 | 取并集 | $R_1\cup R_2$ |
交 | 取交集 | $R_1\cap R_2$ |
差 | 取差集 | $R_1 - R_2$ |
笛卡尔积 | 生成一个关系,其包含两者的所有属性,两者的所有组合 | $R_1 \times R_2$ |
除 | 生成一个关系,其中元组与$R_2$的每一组合都出现在$R_1$中 | $R_1(Z) \div R_2(Y)$ |
其他关系代数运算包括:
- 广义投影。将属性的函数包含在投影列表中。
- 聚集函数。对元组信息进行汇总。\(_{<group~propperty>}\Im_{<function~list>}(R)\)
- 递归闭包。应用与同类型元组间的递归联系。
- 外连接。左外连接将包括左元的所有元组,右外连接将包括右元的所有元组。
- 外并。将并运算作用于部分相容的两个关系。
查询树为一个与关系代数表达式对应的树状数据结构。其输入关系作为叶节点,关系代数运算作为中间节点。
关系演算包括元组关系演算和域演算。元组关系演算的一般表达式为 \(\{t_1.A_j, t_2.A_k, ..., t_n.A_m|COND(t_1, t_2, ...,t_{n+m})\}\)。 公式中可以包括全称量词 \(\forall\), 和存在量词 \(\exists\)。 域演算的变量为单个属性而非元组,其一般表达式为 \(\{x_1,x_2,...,x_n | COND(x_1,x_2,...,x_{n+m})\}\)。
安全表达式保证得到的结果是有限数目的元组。
本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2014/05/12/database-relational-data-model.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。