什么是数据库约束的明确定义?为什么约束对数据库很重要?约束的类型有哪些?
什么是数据库约束的明确定义?为什么约束对数据库很重要?约束的类型有哪些?
Answers:
约束是数据库架构定义的一部分。
约束通常与表相关联,并使用CREATE CONSTRAINT
或CREATE ASSERTION
SQL语句创建。
它们定义了数据库中的数据必须遵守的某些属性。它们可以应用于一列,整个表,多个表或整个架构。可靠的数据库系统可确保约束始终存在(对于所谓的延迟约束,事务内部可能除外)。
常见的约束条件有:
要了解为什么我们需要约束,您必须首先了解数据完整性的价值。
数据完整性是指数据的有效性。您的数据有效吗?您的数据代表您设计的目的吗?
我想问的您可能会想到的奇怪问题,但可悲的是,很多时候,数据库中充斥着垃圾数据,对其他表中行的无效引用,这些数据早已消失……以及对业务逻辑没有任何意义的值解决方案了。
所有这些垃圾不仅会降低性能,而且在应用程序逻辑下也是一个定时炸弹,最终将检索未经设计可理解的数据。
约束是您在设计时创建的规则,可以防止数据损坏。对于您的数据库解决方案的长期生存至关重要。没有限制,您的解决方案肯定会随着时间和大量使用而衰减。
您必须承认,设计数据库设计只是解决方案的诞生。在此之后,它必须(希望)生存很长时间,并且要承受其最终用户(即客户端应用程序)的各种(奇怪的)行为。但是,开发中的设计阶段对于解决方案的长期成功至关重要!尊重它,并付出它所需要的时间和精力。
一位智者曾经说过:“数据必须保护自己!” 。这就是约束的作用。这是使数据库中的数据尽可能有效的规则。
有很多方法可以做到这一点,但是基本上可以归结为:
sys.check_constraints
AdventureWorks示例数据库中的视图正如我在这里暗示的那样,为数据库设计构建最佳和最防御性的约束方法需要一些透彻的考虑。您首先需要了解上述不同约束类型的可能性和局限性。进一步的阅读可能包括:
祝好运!;)
约束指示哪些值对数据库中的数据有效。例如,您可以强制a值不为null(NOT NULL
约束),或者它作为另一个表中的唯一约束存在(一个FOREIGN KEY
约束),或者在该表中是唯一的(一个UNIQUE
约束或PRIMARY KEY
取决于您的要求的约束) )。可以使用CHECK
约束来实现更一般的约束。
有关SQL Server 2008约束的MSDN文档可能是您最好的起点。
UNIQUE
约束(PRIMARY KEY
约束是其变体)。检查给定字段的所有值在表中是否唯一。这是- X
轴约束(记录)
CHECK
约束(NOT NULL
约束是其变体)。检查同一记录的字段上的表达式是否满足特定条件。这是- Y
轴约束(字段)
FOREIGN KEY
约束。检查是否在另一个表的某个字段的值中找到该字段的值。这是- Z
轴约束(表)。
CHECK
约束来编写唯一约束和外键约束,那么为什么将其分类为不同的呢?即“- Y
轴”(无论什么意思)。
FOREIGN KEY
使用CHECK
约束实现?
SELECT
查询。您不能在中的CHECK
约束中使用子查询(或引用当前记录外部值的任何其他构造)SQL Server
。
数据库是概念(或业务)模型的计算机化逻辑表示,由一组非正式业务规则组成。这些规则是用户理解的数据含义。因为计算机仅包含形式表示,所以业务规则不能直接在数据库中表示。它们必须映射到一个正式的表示形式,即一个逻辑模型,该逻辑模型由一组完整性约束组成。这些约束(数据库模式)是业务规则在数据库中的逻辑表示形式,因此是DBMS理解的数据含义。因此,如果DBMS不了解和/或不执行代表业务规则的全套约束,则对数据的含义不完全了解,因此,
注意:DBMS的“已理解”含义(完整性约束)与用户所理解的含义(业务规则)并不相同,但是尽管失去了某些含义,我们仍具有从数据中机械化逻辑推理的能力。
费边·帕斯卡(Fabian Pascal)的“老错误”
约束是可以验证特定条件的条件。与数据库相关的约束包括域完整性,实体完整性,引用完整性,用户定义的完整性约束等。