浅谈SQL Server数据库中数据完整性的应用
2021-10-25孙枫
摘要:在数据库广泛应用的当下,保证数据的准确性和有效性显得尤为重要。文章基于SQL Server数据库,分析了其数据完整性的概念及分类,通过典型例子帮助用户了解相關方法的使用。
关键词:SQL Server;数据完整性;约束
引言
在信息技术迅速发展的今天,数据库应用越来越广泛。如网站、医疗、交通、高校、政府、企业等无一不每天在利用数据库存储与管理着大量的数据。而往往在数据录入时,会因种种原因经常会出现重复、无效、错误等信息。在众多后台数据库管理系统中,因SQL Server有着功能强大、操作简便等特点,受到了广大数据库用户喜爱,文章基于SQL Server数据库介绍数据完整性机制以及相关应用[1]。
1数据完整性的概念和分类
数据完整性是指存储在数据库中的数据的一致性和准确性[2]。它是应用防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据完整性分为四类:实体完整性、域完整性、参照完整性和用户自定义完整性。其定义分别为:
实体完整性:是指保证表中所有的行唯一。实体完整性要求表中的所有行都要有一个唯一的标识符,即通过设置“主键”来实现。数据库中的“主键”字段则是不能输入重复值或空值,所谓“空值”其实就是“没有”或“无意义”的值。反言之,如果主属性取了空值,则无法进行唯一标识,这与现实世界的应用环境相矛盾。
域完整性:是指一个列的输入有效性。域完整性主要用于保证给定字段数据的输入有效性,强制域完整性的方法有:限制类型、格式或可能值的范围。如限制学生成绩必须在0~100之间,性别只能是“男”或“女”等。
参照完整性:是指保证主关键字和外部关键字之间的参照关系。参照完整性又称引用完整性,利用“外键”来确保相关联的表(两个或两个以上表)间数据的一致性。当添加、删除和修改记录时,参照完整性可以保证表之间已定义的关系,确保键值在所有表中一致。如向“学生成绩表”中添加某个学生成绩时必须确保所有添加成绩的学生必须在“学生表”中是存在的,否则不允许添加。
用户自定义完整性:是指根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出约束性条件。这一约束机制一般不应由应用程序提供,而应有由关系模型提供定义并检验,用户定义完整性主要包括字段有效性约束和记录有效性。
2数据完整性的应用
为了确保数据的完整与有效性,防止数据库中存在不符合语义规定的数据,防止因错误信息的输入、输出而造成无效的操作或错误信息,SQL Servr提供了4种手段来实现数据完整性,即缺省值、规则、约束和触发器等[3]。
2.1通过缺省值实现数据完整性
缺省值即默认值,是为列提供数据的一种方式,如果用户在进行插入操作时不为列输入任务数据,则使用缺省值自动输入。可利用表设计器创建表时指定默认值,也可在使用Create Table语句中的Default子句指定默认值。
SQL语句中利用默认值实现数据完整性应用例子如下:
Create Table Teacher --创建教师表
(t_id char(10),
t_name varchar(10),
t_professor varchar(10) default(“助教”))--职称字段默认值为助教
2.2通过规则实现数据完整性
规则是用以限制存储在表中或用户自定义数据类型的值,是独立的数据库对象,只有将规则绑定到列或用户自定义数据类型时,规则才能起作用,而表中的每列或每个用户定义数据类型只能和一个规则绑定。如果要删除规则,则应先解除绑定。
SQL语句中利用规则实现数据完整性应用例子如下:
Create Rule r_age as @age<=100 and @age>=1
--定义规则年龄限制区间
Exec sp_bindrule ‘r_age’,’teacher.age’
--使用存储过程绑定规则
2.3通过约束实现数据完整性
约束是指在创建表时设置各种条件对输入、修改的数据进行监测,使不符合语义规定的数据不能进入数据库,以确保数据的完整性与有效性。SQL Server数据库提供了主键约束、外键约束、唯一约束、检查约束、非空约束与自动编号约束等6种约束方式。
2.3.1主键约束(PRIMARY KEY)
主键约束是为了保证数据实体完整性,用于唯一地标识表中的每一行。主键字段不能出现重复值或空值。在一个表中只能有一个主键,主键可以是一个字段,也可以是字段的组合。
Create Table Department --创建系部表
(d_id char(10) PRIMARY KEY, --系部编号,设置为主键
d_name varchar(20),
d_leader varchar(10))
2.3.2外键约束(FOREIGN KEY)
外键约束是为了保证数据参照完整性,用于在建立一个或多个表的字段之间的引用联系。在创建时在被引用表上创建主键或唯一约束,在引用表的字段上创建外键约束。外键约束必须是另一个表的主键,这样在当前表上才能称为外键。
Create Table Teacher
(t_id char(10) PRIMARY KEY, --教师工号,设置为主键
t_name varchar(10),
t_sex char(2)CHECK(t_sex=’男’or t_sex=’女’),
t_professor varchar(10) default(“助教”))
d_id char(10) FOREIGN KEY references Deparment(d_id))
--系部編号,外键,与系部表的“系部编号”关联
2.3.3唯一约束(UNIQUE)
唯一约束要求该列唯一,允许有空值,但只能出现一个空值。与主键约束类似,也具有唯一性,为表中的一列或多列提供数据实体完整性,一个表可以设置多个唯一约束。
Create Table Department
(d_id char(10) PRIMARY KEY,
d_name varchar(20) UNIQUE, --系部名称,唯一约束
d_leader varchar(10) UNIQUE)) --系部领导,唯一约束
2.3.4检查约束(CHECK)
检查约束是为了保证域完整性,检查约束可为所属字段设定一个逻辑表达式来限定有效取值范围。检查约束只在添加和修改记录时有效,在删除时无效。一个列上只能定义一个检查约束。
Create Table Teacher
(t_id char(10) PRIMARY KEY,
t_name varchar(10),
t_sex char(2)CHECK(t_sex=’男’or t_sex=’女’),
--教师性别,检查约束
t_professor varchar(10) default(“助教”))
d_id char(10) FOREIGN KEY references Deparment(d_id))
2.3.5非空约束(NOT NULL)
非空约束也是为了保证数据实体完整性,有些表中字段虽然不需要设置主键字段,但其信息不允许为空值,则可利用非空约束来设置。
Create Table Teacher
(t_id char(10) PRIMARY KEY,
t_name varchar(10) NOT NULL, --教师姓名,非空约束
t_sex char(2)CHECK(t_sex=’男’or t_sex=’女’),
t_professor varchar(10) default(“助教”))
d_id char(10) FOREIGN KEY references Deparment(d_id))
2.3.6自动编号约束(IDENTITY)
自动编号约束又称作标识列,采用数字编号的方式依次增加一个增量。是为那些数字顺序递增的列准备的约束,可以自动完成数值添加。
Create Table Department
(d_id int identity(1,1)PRIMARY KEY,
--系部编号,整型,主键约束,自动编号(增量为1)
d_name varchar(20) UNIQUE,
d_leader varchar(10) UNIQUE))
若要实现更为复杂的数据约束,可以使用触发器实现,在此不再赘述。
3结束语
通过上述数据完整性的概念与分类阐述,并通过相关例子的实现来说明数据完整性是如何建立和实施。在具体应用过程中,需要结合实际情况选择相应方法来保证数据的准确性和有效性。
作者简介:
孙枫(1977-),女,江苏南通人,中学高级,硕士研究生(方向:现代教育技术),江苏省南通第一中学信息中心教师。
参考文献:
[1]陈洁,薛恒威. SQL Server数据库中数据完整性的分析与实践[J]河北软件职业技术学院学院学报,2018
[2]陈金萍,陈艳,姜广坤. SQL Server2012数据库项目化教程[M].清华大学出版社,2017
[3]从艳. SQL Server数据库完整性的维护[J].电脑知识与技术,2007
[4]陈增祥. SQL Server数据库数据完整性的研究与分析[J].信息安全与技术,2012
[5]李浩,周媛媛. SQL Server数据完整性及约束[J].科技与企业,2013