📜  关系数据库模型的约束

📅  最后修改于: 2021-08-25 18:12:20             🧑  作者: Mango

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

在诸如ER模型之类的模型中,我们没有这些功能。

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

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

因此,在这里我们将处理隐式约束

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

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

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

1.域约束:

  1. 每个域都必须包含原子值(最小的不可分割的单位),这意味着不允许使用复合值和多值属性。
  2. 我们在此处执行数据类型检查,这意味着当我们将数据类型分配给列时,我们会限制它可以包含的值。例如。如果我们将属性age的数据类型指定为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}

解释:
在上述关系中,“名称”是一个复合属性,而“电话”是一个多值属性,因此它违反了域约束。

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

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

例子:

  \begin{center} \begin{tabular}{ |c|c|c|c| }  \hline EID & Name & Phone \\ \hline \001 & Bikash & 6026526747 \\  \002 & Paul &  7002494274\\  \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 & 7002494274 \\  \002 & Paul &  6026526747\\   NULL & Sony & 9234567892\\   \hline \end{tabular} \end{center}

解释:
在上述关系中,EID成为主键,并且主键不能采用NULL值,但是在第三个元组中,主键为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
在第二个关系的主键中未定义。因此,这里违反了参照完整性约束