数据模型
数据模型(Data Model)用于描述数据或信息的标记,一般由三部分组成:
- 数据结构(structure of the data): 数据库系统中讨论的数据结构是一种物理数据模型(physical data model),在数据库中,数据模型处于比数据结构更高的层次,为强调这一点,将其称之为概念模型(conceptual model)。
- 数据操作(operation on the data): 在数据库数据模型中,数据操作是在数据上附加的一些有限的可执行操作集,例如查询(query, 检索信息操作),修改(modification,修改数据库操作)等。这些限制对于数据库是一个强有力的约束操作,通过这些约束操作,开发者可以在一个较高层级上对数据库操作进行描述,从而是的数据库管理系统可以更有效地执行这些操作。
- 数据上的约束(constraint on the data): 例如一周的每天只能是1~7的正数,一部电影最多只能有一个名字等等。
数据库有三大经典的数据模型:关系数据模型、网状数据模型和层次数据模型。
- 层次模型(hierarchical model)是一种基于树结构的模型,类似于半结构化数据模型,其缺点是他是真正在物理层次上操作,这样开发者无法在一个较高的层次上进行代码实现。
- 网状模型(network model)是一种基于图的位于物理层次上的模型。
- 关系数据模型
关系数据模型
关系数据模型是一种基于表的数据模型,一个关系(relation)就是一个Table。例如下面的关系:
关系模型处理Table,它由三部分组成:
- 描述DB各种数据的基本结构形式(Table/Relation)
- 描述Table与Table间所可能发生的各种操作(关系运算)
- 描述这些操作所应遵循的约束条件(完整性约束)
研究关系模型就是学习Table如何描述,有哪些操作、结果是什么,有哪些约束。
关系基本结构
关系模型的基本结构:Table/Relation
关系的列命名为属性(attribute)。关系名和属性集合的组合称为这个关系的模式(schema)。关系中出含有属性名所在行以外的其他数据行称为元组(tuple),每个元组均有一个分量(component)对应于关系的每个属性。
关系是元组的集合而非元组列表,因此关系中元组出现的顺序不是实质问题。关系模型要求元组每个分量具有原子性,即它必须属于某种元素类型,例如integer或string,不可以是集合、列表等可以分解为更小分量的组合类型。进一步假定与关系的每个属性相关联的是一个域(domain),即一个特殊的元素类型,关系的任一个元组的分量值必须属于对应的列的域。
域(Domain)
域是列的取值范围。它是一组具有相同数据类型的值的集合,集合中元素的个数称为域的基数(Cardinality)。
笛卡尔积(Cartesian Product)
笛卡尔积是所有可能组合成的元组。一组域的笛卡尔积为:
笛卡尔积的每个元素称作一个n-元组(n-tuple),笛卡尔积是由n个域形成的所有可能的n-元组的集合。元组的每一个值叫做一个分量(Component),若的基数为,则笛卡尔积基数即元组个数为。
关系(Relation)
关系是一组域的笛卡尔积的子集,笛卡尔积中具有某一方面意义的那些元组被称作一个关系(Relation)。由于关系的不同列可能来自同一个域,为区分,需要为每一列起一个名字,即属性名。
关系可以用表示,可简记为,这种模式又被称为关系模式(schema)或标题(Head)。其中是关系名称,是属性,是属性所对应的域,n是关系的度或目(degree),关系中元组的数目称为关系的基数(Cardinality)。
关系模式和关系
同一关系模式下,可有很多的关系。关系模式是关系的结构,关系是关系模式在某一时刻的数据。关系模式是稳定的;而关系是某一时刻的值,是随时间可能变化的。
关系实例
一个给定关系中元组集合叫关系的实例(instance)。通常一个数据库系统仅仅维护关系的一个版本即关系的当前元组集合,这个关系实例称为当前实例(current instance)。
关系操作
描述Table与Table间所可能发生的各种操作,也就是关系运算,可以分为:
- 关系代数,它以一个或多个关系为输入,产生一个新的关系。ISBL是基于关系代数设计的数据库语言。
- 关系演算,它以数理逻辑中的谓词演算为基础,根据谓词变量的不同,可以分为关系元组演算(Ingres系统的QUEL是基于元组演算设计的数据库语言)和关系域演算(QBE是基于域演算设计的数据库语言)
基本操作:
扩展操作:
关系约束条件
实体完整性、参照完整性和用户自定义完整性
参考资料
- 数据库系统基础教程(第3版)
- MOOC 哈尔滨工业大学: 数据库系统(上):模型与语言