SQL Server 数据库数据完整性的研究与分析

时间:2022-08-15 07:08:10

SQL Server 数据库数据完整性的研究与分析

【 摘 要 】 目前已经进入了信息化的时代,数据的种类和数量急剧增加,数据库的使用已经不可缺少。但是数据库中存储的数据,由于人为的输入等因素,数据存储的正确性和相容性无法保证,经常实现不符合语义规定的数据和错误信息的输入。数据库完整性就是为了保证数据库中数据的正确性和相容性。文章重点介绍SQL Server数据库的数据完整性。

【 关键词 】 SQL Server;数据库;完整性

Data Integrity's Research And Analysis Based On The SQL Server Database

Chen Zeng-xiang

(Suzhou Polytechnic Institute of Agriculture JiangsuSuzhou 215008)

【 Abstract 】 The current has entered the era of information technology, and data type and quantity increase sharply. Various types of databases have been indispensable. Due to human factors and other factors, it is a very difficult thing to ensure that the data is correct and compatibility. Inappropriate data and error information input are often appeared. Database integrity is to ensure that the data in the database is correct and compatibility. We focus on the introduction of SQL Server database data integrity.

【 Keywords 】 SQL Server; database; integrity

0 引言

数据完整性Data Integrity,它的提出是为了解决数据库中存在不符合语义规定的数据或者因错误信息的输入、导入造成对数据的无效操作或错误信息。它需要做到两点:一是保证数据库中数据的正确性Accuracy;二是保证其可靠性Reliability。

数据库完整性是由各种完整性约束来保证。数据库完整性设计就是对约束的设计。文章详细介绍何为数据库完整性,数据库完整性具体如何保证及其数据库完整性的具体分类。重点介绍SQL Server数据库的数据完整性。

1 简介

数据完整性高低,标志着数据库中数据质量好坏,它可以衡量一个数据库中数据的质量。它可以条理化杂乱无章的数据,不仅仅确保数据的正确性,而且确保这些数据可以被存放到最正确的位置上。它是管理数据库中一种有效的手段,是确保数据库中数据准确一致及符合业务规则的一种思想。

数据库中的数据的来源都是外界的输入,因此数据库中的数据来源具有不可确定性和难控制性。数据在输入时会因为人为粗心等等各种不确定的原因导致数据的不正确。为了能够有效地利用数据库去管理数据,确保输入数据符合业务规定,关系型数据库系统尤其是多用户的关系型数据库系统就必须依靠数据完整性来保证。数据完整性与应用程序的数据结构中存储和使用的实际值有关。应用程序必须对使用您的数据的每个进程进行有意控制,以确保信息持续准确。

2 数据库完整性的特点

为了满足数据完整性要求的数据必须要具有以下三个特点:

(1)数据的具体值正确无误。首先我们需要保证数据库输入数据的正确性,可以通过对数据进行标准化,输入检查,定义业务规则等方式。

(2)必须保证同一个表内数据间的和谐关系。比如学员学号必须唯一等限制,确保同一表中的数据之间没有冲突。

(3)必须保证不同个表间的和谐关系。比如学员学号和姓名的对应,在其他表中的相关字段要进行统一,可用引用完整性,设置外键等方式确保其和谐关系。

3 数据库完整性的分类和SQL Server中的应用

数据完整性,我们可以将其大体分为四类:实体完整性、参照完整性、域完整性和用户自定义的完整性。

3.1 实体完整性 Entity Integrity

实体完整性有一个特定的固定,它要求表的每一行有唯一性,即在表中每行都作为惟一的实体而存在。实体完整性可以保证关系中的每个元组都是可识别和唯一的。对表定义IDENTITYY约束和UNIQUE PRIMARY- KEY约束,就是实体完整性的最好体现。例如,若属性A是关系R的主属性,则属性A不可以为空值。

主关键字中的属性、即主属性不能取空值。如果主属性取空值,则意味着关系中的某个元组是不可标识的,即存在不可区分的实体,这与实体的定义也是矛盾的。

如下面的代码就表现了数据库完整性中的实体完整性:

CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,

Sname CHAR(20));

关系数据库管理系统可以用主关键字实现实体完整性,这是由关系系统自动支持的。SQL Server属于关系型数据库,也满足此约束。

3.2 参照完整性Referential Integrity

在现实世界中,各个实体之间存在着各种各样的关系。仿照现实世界,关系模型里的实体之间也是用关系建立联系的,而各关系间也是用关系描述的,这样就自然而然的会存在关系及其关系间的相互参照或相互引用。参照完整性也是关系模型必须满足的完整性约束条件。

所谓参照完整性,是指表中的主关键字和外关键字的数据要相统一对应。它规定有主关键字的表中所对应的外关键字的行存在。这样就确保了表与表间的数据的一致统一性,防止了表中存在正确数据丢失或者不符合的数据存储在数据库中。参照完整性一般建立在两种关系之上,一是主关键字和外关键字间,二是唯一性关键字和外关键字间。

参照关系和被参照关系的定义: 设属性关系R1里有一个属性C或属性组C,但C不是关系R1的关键字,关系R2的主关键字为A。如果关系R1的属性或属性组C与关系R2的主关键字A相和谐或者相对应,则我们说关系R1的外部关键字为C,关系R1是参照关系,而R2是被参照关系(或者叫目标关系)。关系R1和关系R2可为同一个关系也可为不同关系。 对于关系R1中每个元组在属性(或属性组)C上的值有两种可能:为空值(属性或属性组C的每个属性均为空值);或者等于R2中某元组的主关键字的值。

参照完整性有一些约束:禁止向表中插入某种数据行,这个数据行满足主表中所不存在的关键字;禁止删除主表记录,该记录满足从表中存在此对应记录;禁止会导致从表中的相应值孤立的主表中的外关键字值改变。

---新建外键约束

ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main;

---删除外键

ALTER TABLE test_sub drop CONSTRAINT main_id_cons

--创建级联删除外键

ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main on delete cascade

--创建级联更新外键

ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main on update cascade

--创建删除被参照主键是 键参照关系的外键设置为null

ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main on update set null

3.3 域完整性Domain Integrity

域完整性所针对的是数据库表中的列,它规定数据库中的列必须属于某种特定的数据类型或者必须满足特定的约束。在数据库中,域完整性的表现有:表中的外键约束和CHECK约束,还有关键字DEFAULT和非空NOT NULL定义等。

如下面的代码所示就表现了数据库完整性中的域的完整性:

--比如,要求年龄只在15~40岁之间而大于或小于的不能插入表中

ALTER TABLE 表名

ADD CONSTRAINT CK_STUAGE CHECK(列名 BETWEEN 15 AND 10)

--表束,对于ID的限制

alter table t add constraint con_T_ID check(ID not like '%''%')

3.4 用户定义的完整性 User-defined Integrity

在数据库中,除了以上规定的约束条件之外,还有许多可自定义的约束。具体问题可以具体分析,不同的特定业务需求,有时可能需要特定的约束条件来控制数据库中的数据。所谓用户自定义的完整性,它针对于某个特定的关系型数据库所指定的特定的约束条件,它能满足某一个特定的具体业务应用中的数据,所必须要满足的某些约束。

一种与应用密切相关的数据完整性约束,如某个属性的值必须唯一 ;某个属性的取值必须在某个范围内 ;某些属性值之间应该满足一定的函数关系等。 类似以上的约束不是关系数据模型本身所要求的,而是为了满足应用方面的语义要求而提出的。在用户定义完整性中最常见的是限定属性的取值范围,即对值域的约束,所以在用户定义完整性中最常见的是域完整性约束。

在SQL Server中,也提供了定义和检验用户自定义完整性的一套机制。SQL Server还提供了一些工具来辅助用户去实现某些特定约束的数据完整性,其中有缺省值Default、规则Rule、约束Constraint ,还有触发器Trigger等。

如下面的代码就表现了数据库完整性中的用户定义完整性:

--创建一个规则SEX值是男或女

create rule [Sex] as @ in ('男','女')

--定义一个员工信息表,其中员工的身份证号具有惟一性,用约束Constraint。

create table employees (

emp_id char(8),

emp_name char(10) ,

emp_cardid char(18),

constraint pk_emp_id primary key (emp_id),

constraint uk_emp_cardid unique (emp_cardid)

) on [primary]

--无论何时删除一个产品类别(即从Categories表中删除一条记录),该触发器都会更新Products表中的Discontinued列。

USE Northwind

CREATE TRIGGER Category_Delete

ON Categories

FOR DELETE

AS

UPDATE P SET Discontinued = 1

FROM Products AS P INNER JOIN deleted AS d

ON P.CategoryID = d.CategoryID

4 总结

数据库中的数据完整性为我们更好地使用数据库提供了强有力的后备保证。使得数据库中被存储的数据一直处于正确统一的状态。它也是检验数据库数据是否合格的一项重要参数。若数据库中存在错误的数据,则我们可以说这个数据库已经缺失了数据完整性。

除了介绍的保证数据完整性的方法,还存在很多方法来确保数据的完整性,如外键、束约、规则和触发器。系统很好地处理了这四者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,相补缺点。

参考文献

[1] 刘敏贤,汤娟.SQL Server数据库应用系统中数据完整性的设计与实施[J].微机发展,2002年04期.

[2] 韩杰.论SQL Server中数据完整性实现[J].现代商贸工业,2009年22期.

[3] 潘林森,姚渝春.SQL Server数据库系统中的数据完整性控制方法[J].重庆师范大学学报(自然科学版),2004年02期.

[4] 王洪香.基于SQL Server数据库完整性约束的几点探讨[J].办公自动化,2006年15期.

作者简介:

陈增祥(1963-),男,汉族,江苏苏州市人,本科;主要研究方向:计算机数据库。

上一篇:数字化校园网中Snort入侵检测系统的设计与实现 下一篇:银行信息系统安全风险分析与控制对策