引言
现在比较流行的数据库都支持关系数据库,因为其完整的数学模型。本节从数据模型三要素的角度来讨论关系模型,为建立关系数据库打基础。
关系及引申概念
- 关系:R(D1,D2,…,Dn): D1×D2×…×Dn(笛卡尔积)的子集称为在域D1,D2,…,Dn上的关系(同离散数学)
- 域:取值范围
- 属性:不同的列称为属性
- 候选码:能唯一标识一个元组的一个属性组
- 全码:候选码的属性组是全部属性
这个列出一个表格就很明显了,这里暂时不列,因为以后有很多。有一条据说很重要的性质:分量必须取原子值,意思大概就是一个属性值下面不能再分出两个属性了,不能说这些元组有3个属性,同样的关系里那些却有四个。很好理解。
以上,其实我们把关系数据结构里的重要的概念已经全部涵盖了。
关系模式与关系数据库
之前我们已经提到模式的问题。关系模式就是型,用R(A1,A2,…,An)表示一个模板,其中A1,A2…表示属性。关系是具体的内容。关系数据库是所有关系的集合,从型上来说是关系模式的集合,从值上来说是关系的集合。
关系的三类完整性约束
我们说数据模型要有三要素,数据结构、数据操作、完整性约束。关系模型的数据结构显然就是关系的数据结构,主要数据操作也和其他模型差不多,接下来讨论完整性约束。
- 实体完整性:关系主属性不能取空值,很好理解,否则无法标识元组。
- 参照完整性:遵守参照完整性规则。这个规则初看起来很绕,但是只要理清是哪些关系、哪些属性组再比较就可以了。具体来说:
需要两个关系R,S(这两个关系可以是同一个),一个属性(组)F。F是关系R的外码,但这个F同时和S的主码相对应。于是F所在的关系R在属性(组)F上的取值必须取S某个元素的主码值或空值。
补充定义外码:仍然是两个关系(可以说同一个)和一个属性(组)。F是R的一个属性(组)但不是R的码,但和S的主码相对应。
- 用户自定义的完整性
小结
至此,我们定义了关系模型的结构,在存储数据方面已经没有问题了。接下来要考虑如何对其进行操作,这就要涉及关系代数的运算。