数据完整性与约束:<o:p></o:p>
一: 数据不完整性: <o:p></o:p>
<o:p> </o:p>
1: 实体(行)信息导致的不完整: <o:p></o:p>
<o:p> </o:p>
一个编号分配给两个人的情况.知道了 ID (如“1”),也不能知道到底是哪个用户,他的姓名是什么(到底是张三,还是李四)<o:p></o:p>
<o:p> </o:p>
2、 域(列)信息导致的不完整: (一颗老鼠屎,坏了一锅粥):<o:p></o:p>
<o:p> </o:p>
(由于录入有误, 某 ID 的出生年月是1980-01-02,) 与其它人都不是一个世纪的人,根<o:p></o:p>
本就不是一个有效的,符合逻辑的出生日期. ,如果数据库中有这样的不符合逻辑的数据存在,导致我们在统计用户的年龄信息时得到的统计数据将不可信<o:p></o:p>
<o:p> </o:p>
3、 表间引用导致不完整:<o:p></o:p>
<o:p> </o:p>
在Users 表中的第“5”行数据(姓名为赵六),指定的部门编号(DeptID)为“8”,部分编号等于“8”的是哪个部门呢,在此没有这样一个部门,也就是说在数据库中,体现的这一信息是错误的,不可信的.<o:p></o:p>
<o:p> </o:p>
因此:一个表中引用 到另一个表中没有的(不完整的)数据的这种形式叫不符合引用完整性。<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
4: 业务规则导致的不完整<o:p></o:p>
<o:p> </o:p>
举例:<o:p></o:p>
业务规则: 一个部门的领导只能是本部门的人员担任,或者是院机关的人来兼任<o:p></o:p>
在此规则下,我们如果一个部门表中部门 2 的领导的编号(ManagerID)为“3”,但编号是“3”的用户根本就不是编号为“2”的剖门,也不是规则允许的编号为“3”的院机关,在此是编号为“1”的部门的.<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
二: 在设计数据库时有一个原则:<o:p></o:p>
<o:p> </o:p>
“宁可数据不能进入数据库,也要保证进入数据库的数据都是正确的”,的确这样,一个错误的数据,宁可让它不要进入数据库中,因为那会导致数据库中其它数据的不可信,只有这样才能充分保证数据库中数据的正确性。<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
三: 解决数据完整性的方式与约束:<o:p></o:p>
1、 各完整性之间的关系<o:p></o:p>
完整性可以分如下几种类型: 实体完整性,域完整性,引用完整性,自定义完整性.他们的逻辑关系图:
<o:p></o:p>
<v:shapetype o:spt="75" coordsize="21600,21600" stroked="f" id="_x0000_t75" filled="f" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" o:extrusionok="f" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape type="#_x0000_t75" id="_x0000_i1025" style="WIDTH: 364.5pt; HEIGHT: 240.75pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:title="数据完整性"></v:imagedata></v:shape><o:p></o:p>
2、 约束:<o:p></o:p>
<o:p> </o:p>
(1). 约束主要在数据进入到数据库之前进行的一系列的校验,主要有如下几种情况会触发这种数据的检验:在数据插入、数据更新、数据删除时.<o:p></o:p>
<o:p> </o:p>
(2). 从实现方式分,约束分为两种:<o:p></o:p>
列约束: 用来限定表中每行数据中的某一列的数据是否正确.<o:p></o:p>
表约束: 用来限定表中每行数据中的一列或者多列是否正确<o:p></o:p>
<o:p> </o:p>
四: 完整性的实施:<o:p></o:p>
<o:p> </o:p>
1、 实体完整性:<o:p></o:p>
数据库表的一行,代表一个唯一的一个实体,实体完整性就是要确保将行定义为特定<o:p></o:p>
表的唯一实体。也就是要有可以唯一标识一行的列存在,在SQL Server 中,可以采用如下<o:p></o:p>
方式来保证:<o:p></o:p>
<o:p> </o:p>
(1). 主键约束:<o:p></o:p>
(2). 标识列: 可以做为主键的列<o:p></o:p>
(3). 唯一约束与唯一索引<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
2、 域完整性:<o:p></o:p>
域完整性主要是保证输入到指定列中的数据的有效性, 主要有如下方式:<o:p></o:p>
(1) 指定相应的数据类型与宽度<o:p></o:p>
(2) 非空约束<o:p></o:p>
(3) 默认值<o:p></o:p>
(4) Check 约束<o:p></o:p>
<o:p> </o:p>
3. 引用完整性:<o:p></o:p>
<o:p> </o:p>
由于表间引用而出现的数据不完整的情况, 在数据库系统中,主要通过外键约束来实现:<o:p></o:p>
<o:p> </o:p>
注意:<o:p></o:p>
(*). 外键所参照的列只能是主键或者侯选键,对于普通的列不能作为外键参照列。<o:p></o:p>
(*). 选键是指具备主键的功能,可以唯一确定一行(也就是说这一列没有重复<o:p></o:p>
值),但没有被指定为表的主键,而是在该列上创建了唯一索引或者唯一性约<o:p></o:p>
束的列称为侯选键<o:p></o:p>
(1). 在删除主键表中一行数据时,如果主键表中的一行数据( 例如 DeptID = 3 )被外键表中数据引用,那么在直接删除 DeptID = 3 时,就会报错. 呢么如何做呢 ?<o:p></o:p>
有两种方式:<o:p></o:p>
第一: 将外键表中 DeptID = 3 的所有行全部删除<o:p></o:p>
第二: 在删除表 DeptID = 3 之前,先将外键表中相应的DeptID列值设置为 NULL 值.<o:p></o:p>
(2) 指定了“级联更新相关的字段”后,在需要修改主键列信息时,数据库管理系统会自动修改外键列中的相应的数据,如果指定了“级联删除相关的记录”,在删除主键表中一行数据时外键表中的相关数据行也一起被删掉.<o:p></o:p>
注意:<o:p></o:p>
(1)、 在创建外键约束时虽然可以指定不对“Insert 和Update 强制关系”,但一般不建<o:p></o:p>
议这样做,因为这样就失去了外键应有的作用。<o:p></o:p>
(2)、 如果删除主键表中的一行数据时需要按照前面介绍的第二种办式处理,即在删<o:p></o:p>
除主键表中的一行时,先将外键表中的外键列设置为NULL 的情况.( 以后补上)<o:p></o:p>
<o:p> </o:p>
4 自定义的完整性<o:p></o:p>
<o:p> </o:p>
用户定义完整性使您得以定义不属于其它任何完整性分类的特定业务规则。所有的完<o:p></o:p>
整性类型都支持用户定义完整性(CREATE TABLE 中的所有列级和表级约束、存储过程和<o:p></o:p>
触发器)。<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
分享到:
相关推荐
数据控制-完整性约束
掌握SQL中实现数据完整性的方法,加深理解关系数据模型的三类完整性约束
SQL SERVER数据完整性及约束.pdf
1. 了解实现数据完整性的概念及实施数据完整性的重要性。 2. 掌握数据完整性的分类。 3. 掌握完整性约束的添加、删除方法。 4. 掌握默认值的创建、实施与删除方法。 5. 掌握规则的创建、实施与删除方法。 6. 掌握...
完整性约束对数据库的重要性; 实体完整性的创建、修改和维护; 域完整性的创建、修改和维护; 参照完整性的创建、修改和维护; 用户定义完整性的创建、修改和维护。
索引与数据完整性约束,这是学校数据库的重点 ,要好好学习啊 以后会对你的学校有用。
11.sql.server.2005.数据完整性-约束 11.sql.server.2005.数据完整性-约束
违反完整性约束的解决办法2) 执行上面(1)的存储过程 (3)使用dom命令连接数据库,然后执行下面的语句
数据库原理及应用;创建数据库及关系表、数据完整性约束;计算机、SQL
关于Oracle数据库的数据完整性约束的类型和实现
数据库的数据完整性是设计数据库的核心内容,一个数据库的完整性约束设计的好坏,将直接影响到这个数据库的性能,同 时也会影响到整个数据库的开发,因此一个好的数据库需要严格考虑其完整性约束。该文主要结合学生...
数据库系统之实体完整性约束 数据库系统之实体完整性约束 数据库完整性 数据库完整性 今天做了⼀道数据库的上机题,其中的⼀些知识觉得挺有⽤的,因此打算整理出来⼀篇博客来与⼤家分享⼀下。这⾥的语句针对的都是...
1.熟悉和掌握数据库的创建和表的方法 2.熟悉和掌握创建三类数据完整性(实体完整性、参照完整性和用户自定义)约束 掌握用命令方式管理数据的基本操作
第B章-索引与数据完整性约束优秀文档.ppt
MySQL索引与数据完整性约束PPT教案学习.pptx
使用SQL对数据进行完整性控制(3类完整性、CHECK短语、CONSTRAIN子句、触发器); 分析当操作违反了完整性约束条件时系统的处理方法。
MySQL 与SQL Server 数据完整性约束的比较教学.pdf
企业局域网的安全与运维Ⅱ数据完整性约束.pptx
Oracle数据库的完整性约束规则详解.DOC
企业局域网的安全与运维Ⅱ_数据完整性约束.zip