什么是数据库约束?

bal*_*569 86 sql sql-server rdbms constraints

什么是数据库约束的明确定义?为什么约束对数据库很重要?有哪些类型的约束?

Zig*_*jec 112

约束是数据库模式定义的一部分.

约束通常与一个表关联,并与创建CREATE CONSTRAINTCREATE ASSERTIONSQL语句.

它们定义数据库中的数据必须符合的某些属性.它们可以应用于列,整个表,多个表或整个模式.可靠的数据库系统确保约束始终保持(除了可能在事务内部,对于所谓的延迟约束).

常见的约束是:

  • not null - 列中的每个值都不能为NULL
  • unique - 指定列中的值对于表中的每一行必须是唯一的
  • 主键 - 指定列中的值对于表中的每一行必须是唯一的,而不是NULL ; 通常,数据库中的每个表都应该有一个主键 - 它用于标识单个记录
  • 外键 - 指定列中的值必须引用另一个表中的现有记录(通过它的主键或其他一些唯一约束)
  • check - 指定了一个表达式,该表达式必须求值为true才能满足约束条件

  • 包含PK的+1,非null,null (3认同)
  • 检查约束条件不得评估为false.他们不一定是真的.未知也很好. (2认同)
  • 类型约束也不是常见的类型吗? (2认同)

Ale*_*lex 36

要了解我们为什么需要约束,您必须首先了解数据完整性的价值.

数据完整性是指数据的有效性.您的数据有效吗?您的数据是否代表您设计的内容?

我问你可能会想到什么奇怪的问题,但遗憾的是,数据库充满了垃圾数据,对其他表中的行的无效引用,很久以前......以及对业务逻辑没有任何意义的值你的解决方案了.

所有这些垃圾并不是唯一容易降低性能的垃圾,而且在你的应用程序逻辑下也是一个定时炸弹,它最终会检索出它无法理解的数据.

约束是您在设计时创建的规则,用于保护您的数据免受损坏.对于数据库解决方案的心脏孩子的长期生存至关重要.没有限制,您的解决方案肯定会随着时间和繁重的使用而衰减.

您必须承认,设计数据库设计只是解决方案的诞生.在此之后,它必须为(希望)长时间生存,并忍受其最终用户(即客户端应用程序)的各种(奇怪)行为.但是,这个设计阶段的开发对于您的解决方案的长期成功至关重要!尊重它,并支付它所需的时间和注意力.

一位聪明人曾经说过:"数据必须保护自己!" .这就是约束所做的.规则使数据库中的数据尽可能有效.

有很多方法可以做到这一点,但基本上归结为:

  • 外键约束可能是最常用的约束,并确保仅在实际存在要引用的目标行时才允许对其他表的引用.这也使得通过删除创建死链接的引用行来打破这种关系是不可能的.
  • 检查约束可以确保在某个列中仅允许特定值.您可以创建一个约束,只允许在VARCHAR列中使用"黄色"或"蓝色"一词.所有其他值都会产生错误.获取使用检查约束的想法检查sys.check_constraintsAdventureWorks示例数据库中的视图
  • SQL Server中的规则只是可重用的Check Constraints(允许您从单个位置维护语法,并使您更容易将约束部署到其他数据库)

正如我在此暗示的那样,为您的数据库设计构建最佳和最具防御性的约束方法需要一些全面的考虑.您首先需要了解上述不同约束类型的可能性和局限性.进一步阅读可能包括:

外键约束 - 微软

外键约束 - w3schools

检查约束

祝好运!;)


小智 6

约束只不过是数据的规则.可以使用约束来定义哪些数据有效以及哪些数据无效.因此,可以保持数据的完整性.以下是广泛使用的约束:

  1. 主键:唯一标识数据.如果已为某个列指定了此约束,则我们无法在该列中输入重复数据
  2. 检查:如NOT NULL.在这里,我们可以指定我们可以为该特定列输入的数据以及该列不期望的数据.
  3. 外键:外键引用其他表的行.因此,一个表中从另一个表引用的数据始终可用于引用表.