📜  关系数据库模型的约束

📅  最后修改于: 2021-09-09 11:37:28             🧑  作者: Mango

在对关系数据库的设计进行建模时,我们可以设置一些限制,例如允许在关系中插入哪些值,允许在关系中进行什么样的修改和删除。这些是我们对关系数据库施加的限制。

在像 ER 模型这样的模型中,我们没有这样的特征。

数据库中的约束可以分为 3 个主要类别:

  1. 应用于数据模型的约束称为隐式约束
  2. 通过在 DDL(数据定义语言)中指定直接应用于数据模型模式的约束。这些被称为基于模式的约束或显式约束
  3. 不能直接应用于数据模型模式的约束。我们称这些为基于应用程序或语义约束

所以在这里我们将处理隐式约束

关系型数据库的约束主要有4种类型:

  1. 域约束
  2. 关键约束
  3. 实体完整性约束
  4. 参照完整性约束

让我们详细讨论上述每个约束。

1. 域约束:

  1. 每个域都必须包含原子值(最小的不可分割单位),这意味着不允许复合和多值属性。
  2. 我们在这里执行数据类型检查,这意味着当我们为列分配数据类型时,我们限制了它可以包含的值。例如。如果我们将属性年龄的数据类型指定为 int,我们不能给它除 int 数据类型以外的值。

例子:
\begin{center} \begin{tabular}{ |c|c|c|c| } \hline EID & Name & Phone \\ \hline \001 & Bikash Dutta & 123456789 \\ & & 234456678\\ \hline \end{tabular} \end{center}

解释:
在上面的关系中,Name 是一个复合属性,Phone 是一个多值属性,因此违反了域约束。

2. 关键约束或唯一性约束:

  1. 这些被称为唯一性约束,因为它确保关系中的每个元组都应该是唯一的。
  2. 一个关系可以有多个键或候选键(最小超键),其中我们选择其中一个键作为主键,我们对从候选键中选择主键没有任何限制,但建议去具有较少属性数量的候选键。
  3. 主键中不允许有空值,因此 Not Null 约束也是键约束的一部分。

例子:
\begin{center} \begin{tabular}{ |c|c|c|c| } \hline EID & Name & Phone \\ \hline \001 & Bikash & 6000000009 \\ \002 & Paul & 9000090009\\ \001 & Tuhin & 9234567892\\ \hline \end{tabular} \end{center}

解释:
在上表中,EID是主键,第一个和最后一个元组在EID中具有相同的值,即01,因此违反了键约束。

3. 实体完整性约束:

  1. 实体完整性约束表示没有主键可以采用 NULL 值,因为使用主键我们可以唯一地标识关系中的每个元组。

例子:
\begin{center} \begin{tabular}{ |c|c|c|c| } \hline EID & Name & Phone \\ \hline \001 & Bikash & 9000900099 \\ \002 & Paul & 600000009\\ NULL & Sony & 9234567892\\ \hline \end{tabular} \end{center}

解释:
在上面的关系中,EID被设为主键,主键不能取NULL值,但在第三个元组中,主键为空,因此违反了实体完整性约束。

4. 参照完整性约束:

  1. 参照完整性约束在两个关系或表之间指定,用于维护两个关系中元组之间的一致性。
  2. 此约束通过外键强制执行,当关系 R1 的外键中的属性与关系 R2 的主键具有相同的域时,则称 R1 的外键引用或引用关系 R1 的主键关系 R2。
  3. 关系 R1 的元组中的外键值可以采用关系 R2 中某个元组的主键值,也可以采用 NULL 值,但不能为空。

例子:
\begin{center} \begin{tabular}{ |c|c|c|c| } \hline EID & Name & DNO \\ \hline \001 & Divine & 12 \\ \002 & Dino & 22\\ \004 & Vivian & 14\\ \hline \end{tabular} \end{center}

\begin{center} \begin{tabular}{ |c|c|c|c| } \hline DNO & Place \\ \hline \112 & Jaipur \\ \113 & Mumbai \\ \114 & Delhi \\ \hline \end{tabular} \end{center}

解释:
上面第一个关系的DNO是外键,第二个关系的DNO是主键。 DNO = 22 在第一个表的外键中是不允许的,因为 DNO = 22
未在第二个关系的主键中定义。因此,这里违反了参照完整性约束