确保数据完整性
一、认识约束
约束是数据库中保证数据库里表中数据完整性的手段。录入数据库中的数据都有实际的意义,而约束的作用就是保证数据在实际业务中是有意义的,也就是减少脏数据的机会。
1.1 什么是约束
使用数据库约束就是保证数据库完整性的方法。数据库设计的完整性实际上是为了保证数据的正确性,那么为了保证书的正确性,在SQL Server 中设计的完整性主要由三个:实体完整性、区域完整性、参考完整性。
1.实体完整性
实体完整性针对表中行数据,要求表中的逐渐字段都不能为空或者重复值。如:每个人的身份证号都是唯一的。
2.区域完整性
区域完整性针对表中列数据,是保证数据库中在有效范围内,可以使用数据类型或CHECK约束来设置。如:性别只有男和女。
3.参照完整性
参照完整性,可以保证数据表中相关联的数据的正确性,使用外键就可以保证参照完整性。参照完整性是为了避免产生脏数据。
1.2 约束的类型
约束是一种强制实施数据库完整性的方法。利用约束可以定义列中允许中的规则,它的优先级高于DML触发器、规则和默认值。
1.主键约束(Primary Key)
主键约束在每个数据表中只能有一个,但是一个主键约束可以有多个列组成,通常把有多个列组成的主键又叫复合主键。主键约束可以保证主键列的数据没有重复值且值不为空。
2.外键约束(Foreign Key)
外键约束之所以被成为参照约束,是因为它主要用来把一个表中的数据和另外一个表中的数据进行关联,表与表之间的关联是为了保证数据库中数据的完整性。
3.唯一约束(Unique)
唯一约束和主键约束都是设置表中的列不能重复的约束,区别就是一个表中只能有一个主键约束,却可以有多个唯一约束,通常情况下设置唯一约束就是为了使非主键列没有重复值。唯一约束与主键约束的另一个区别就是如果表中的某一列中有空值,那么就不能设置为主键列,但可以设置成唯一约束。
4.检查约束(Check)
检查约束是为了指定表中列的取值范围的,该约束更适合完成与业务逻辑相关的限制。
5.非空约束(Not NULL)
非空约束是为了约束表中的列不允许为空的。
1.3约束的语法
在SQL Server中创建和修改约束可以利用SSMS工具图形界面完成,也可以利用T-SQL来完成,下面介绍创建T-SQL常用的语法:
[ CONSTRAINT constraint_name ]
{
{PRIMARY KEY | UNIQUE}
[CLUSTERED | NONCLUSTERED]
(column [ASC | DESC][…])
[WITH FILLFACTOR = fillfactor
[WITH (<index_option>[,…])]
[ON{ partition_scheme_name(partition_column_name…) | filegroup | “default”}]
| FOREIGN KEY
(column [,…])
REFERENCES referenced_table_name [(ref_column[…])]
| CHECK [NOT FOR REPLICATION ](logical_expression)
}
语法说明:
*CONSTRAINT项:关键词,表明指定约束。
*constraint_name项:约束名称,要求符合标识符规则,不能以“#”开头。
*PRIMARY KEY 项:表示主键约束,允许单列或多列组合。
*UNIQUE项:表示唯一约束。
*CLUSTERED | NONCLUSTERED项:表示为主键约束或唯一约束创建聚集或非聚集索引。
*WITH FILLFACTOR项:指定存储索引位置时应采用的每个索引页的填充程度。
默认值为0,可在0~100之间。
*[ON{partition_scheme_name(partition_column_name…)|filegroup|“default”}]项:表示为指定约束创建的索引的存储位置。