数据模型
数据模型一般用于描述数据库中数据的结构,也包含施加于数据上的各种约束。通常,数据模型提供了一套规则描述数据上的各种操作,比如数据查询和修改。
层次/网状模型
层次模型:类似于半结构化数据模型,是一个基于树的模型。它的缺点是不像现代数据模型那样,它是真正在物理层次上进行操作,这样程序开发者不能在一个较高层次上写出代码。
关系模型
关系代数
关系代数是一门代数。一般地,代数由一些操作符(或称算子)和原子操作数组成。代数允许把操作符作用于原子操作数或代数表达式上来构造表达式。关系代数的原子操作数是代表关系的变量以及代表有限关系的常量。关系代数中的操作都是面向表的。
虽然通用编程语言(例如C或Java)可以解决关系中的大部分问题,但关系代数可以通过对查询语言做出某些限制,从而有以下两个优点:
- 方便进行开发
- 能够编译产生高度优化的代码
关系代数操作符
目前,商业DBMS实现的关系都是包(bag,关系不是元组的集合,即同一个元组可以在关系中多次出现)。然而,在本节中的关系被定义为元组的集合。这样定义的好处是一些集合上的操作可以被清晰地定义与表述(例如集合的交并,包含等),并且操作符可以满足代数定律(例如并操作满足交换律)。关系代数也可以作用在包上,但相应地,操作符会重新定义。
关系代数操作符一般被分为如下四类:
- 关系上的集合操作(交 ∩ \cap ∩, 并 ∪ \cup ∪, 差 − - −)
- 除去某些行或列的操作(选择, 投影)
- 组合两个关系元组的操作,二元操作符(笛卡尔积,连接)
- 重命名操作
如同其他的所有代数一样,关系代数允许任意组合操作符,来实现复杂的表达式,其操作符可以用于任何关系之上,这个关系既可以是某个给定的关系,也可以是操作得到的结果关系。
对于关系R,S,定义如下几个基本操作符:
集合操作:交、并、差
当在 R 和 S 使用(交,差,并)关系运用这些操作,必须遵守以下规则:
- R和S必须必须具有相同集合的表,R和S各个属性的域(取值范围)也必须匹配
- R和S的列需要经过排序,这样可以保证属性序对两个关系来说完全相同
R ∩ S R\cap S R∩S:表示同时存在R和S中存在的元组的集合。
R ∪ S R\cup S R∪S:表示存在R或存在S中元组的集合。
R − S R - S R−S:表示存在R但不存在S中的元组的集合。
投影
从关系R生成一个新的关系S。这个关系S只包含原来关系R中的部分列,即投影操作从关系中去掉不感兴趣的列,剩下的输出形成最终的结果。R和S关系模式不同。
选择
选择产生一个关系R的元祖的子集合。结果关系必须满足涉及某个关系R中属性条件C,即选择操作得到的结果是关系中所有满足选择条件的元组。结果关系模式和原关系模式相同.
笛卡儿积
两个关系的组合,如果R和S具有相同的属性,需要把至少一个关系相应的属性改成不同的名称。若R和S中均有属性A ,新的关系一般记为列记位R.A和S.B
连接:自然连接、 θ \theta θ连接
通过比较两个关系的每一对元组来进行连接操作。在自然连接中,把那些在两个关系的共有属性上值相等的元素接合起来。在 θ \theta θ连接中,则是连接来自两个关系的一对满足 θ \theta θ连接指定的选择条件的元组。关系R和关系S连接时相应的元组必须在某些方面一致。在一个连接当中,如果一个元组不能和另外一个关系任何一个元组配对的话,这个元组就被称为悬浮元组。
命名和重命名 ρ \rho ρ
为有效管理由关系代数生成的结果关系的属性名字,通常会引入重命名操作。 ρ S ( A 1 , A 2 , . . . , A n ) ( R ) \rho_S(A_1,A_2,...,A_n)(R) ρS(A1,A2,...,An)(R) 表示对关系R重新命名,重命名后的关系与关系R有相同的元组,只不过关系的名字变成了S。
关系上的约束
- 作为约束语言的关系代数
许多常见的约束可以用某个关系代数表达式被另外一个所包含的形式表达,或者用某个关系代数表达式等于空集的等价形式表达。用关系代数表示约束有以下两种方法:
- R = ϕ R = \phi R=ϕ,表示R中没有元组
- R ⊆ S R \subseteq S R⊆S,即 ( ∀ x ∈ R ⇒ x ∈ S ) ⟺ R ⊆ S (\forall x \in R \Rightarrow x \in S) \iff R \subseteq S (∀x∈R⇒x∈S)⟺R⊆S,表示任何在R中的元组均在S中
例如,若想表达关系R在属性A上的值非负的约束,可表示为:
σ
A
<
0
=
ϕ
.
\sigma_{A < 0} = \phi.
σA<0=ϕ.
- 引用完整性约束
- 键约束
- 其他约束
半结构化模型
半结构化数据类似数或者图,而非表或数组。目前半结构化数据最主要的体现解释XML,它利用一系列分层嵌套的标签元素来表述数据。半结构化数据上的操作常常会涉及在隐含的树结构中跟踪路径,从一个标签元素开始跟踪到它的一个或多个嵌套子元素,然后再沿着路径跟踪嵌套在其中的子元素,如此一直跟踪下去。
面向对象的数据模型
我们主要介绍ODL(对象定义语言,Object Definition Language)。ODL是一种基于文本的使用面向对象术语描述数据库结构的语言。