📜  违反关系数据库中的约束

📅  最后修改于: 2021-09-08 15:50:50             🧑  作者: Mango

在这里,我们将了解由于关系中的任何更改而可能在数据库上发生的违规。

主要有三种操作可以改变关系的状态,这些修改如下:

  1. 插 –
    在数据库的关系中插入新元组。
  2. 删除 –
    删除数据库上的一些现有关系。
  3. 更新(修改)——
    更改一些现有元组的值。
    每当我们将上述修改应用于数据库中的关系时,不应违反关系数据库的约束。

    插入操作:
    在关系中插入元组时,可能会以下列方式违反约束:

    1. 域约束:
    只有当属性的给定值没有出现在相应的域中或者它不是适当的数据类型时,域约束才会被违反。

    例子:
    假设域约束说你在关系中插入的所有值都应该大于 10,如果你插入一个小于 10 的值会导致你违反域约束,所以被拒绝。

    2.实体完整性约束:
    将 NULL 值插入关系中新元组的主键的任何部分可能会导致违反实体完整性约束。

    例子:

    Insert (NULL, ‘Bikash, ‘M’, ‘Jaipur’, ‘123456’) into EMP 

    上述插入违反了实体完整性约束,因为
    主键 EID,这是不允许的,因此会被拒绝。

    3. 关键限制:
    在已存在于同一关系的另一个元组中的关系的新元组中插入值时,可能会导致违反关键约束。

    例子:

    Insert (’1200’, ‘Arjun’, ‘9976657777’, ‘Mumbai’) into EMPLOYEE 

    如果 EID=1200 已经存在于同一关系中的某个元组中,则此插入违反了键约束,因此会被拒绝。

    参照完整性 :
    在关系 1 的外键中插入一个值时,在关系 2 中引用的主键中没有对应的值,在这种情况下违反了参照完整性。

    例子:
    当我们尝试在表 1 的 EID(外键)中插入一个值 1200 时,没有表 2 对应的 EID(主键),那么它会导致违规,因此被拒绝。

可以纠正此类违规的解决方案是,如果任何插入违反了任何约束,则默认操作是拒绝此类操作。

删除操作:
在删除关系中的元组时,它可能只会导致违反参照完整性约束。

    引用完整性约束:
    仅当关系 1 中的元组被删除,该元组被数据库中表 2 的其他元组的外键引用时,才会导致违规,如果发生这种删除,则表 2 中外键的元组中的值将变为空,这最终将违反参照完整性约束。

下面列出了可能纠正由于删除而导致的参照完整性违规的解决方案:

  1. 限制 –
    这里我们拒绝删除。
  2. 级联 –
    这里如果删除了父表(引用关系)中的一条记录,那么子表(引用关系)中的相应记录也会被自动删除。
  3. 设置 null 或设置默认值 –
    这里我们修改导致违规的引用属性值,我们要么设置 NULL 要么更改为另一个有效值