最先系统、严格地提出关系模型的是美国 IBM 公司的 E.F.Codd.

关系数据结构及形式化定义

关系

(domain) 是一组具有相同数据类型的值的集合。 笛卡尔积 (Cartesian product) 是一组域之间的集合运算,定义为 `D_1 xx D_2 xx cdots xx D_n = {(d_1, d_2, cdots, d_n): d_i in D_i, i = 1, 2, cdots, n}`. 其中每个元素 `(d_1, d_2, cdots, d_n)` 叫作一个 `n` 元组 (`n`-tuple) 或简称元组 (tuple)。元组中的每一个值 `d_i` 叫作一个分量 (component)。

`D_1 xx D_2 xx cdots xx D_n` 的子集 `R` 叫作域 `D_1, D_2, cdots, D_n` 上的关系,记为 `R(D_1, D_2, cdots, D_n)`。 称域的个数 `n` 为关系 `R` 的 (degree)。 `n = 1` 时,称 `R` 是一个一元关系 (unary relation),`n = 2` 时,称 `R` 是一个二元关系 (binary relation)。 关系是笛卡尔积的有限子集,所以关系是一张二维表,每行对应一个元组,每列对应一个域。由于域可以相同,为加以区别,为每列起一个名字,称为属性。`n` 目关系必有 `n` 个属性。 若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码 (candidate key)