数据完整性与约束:<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>
分享到:
相关推荐
关系型数据库(如MySQL, PostgreSQL):数据完整性与约束.docx
通过本次实验,学习者将掌握在SQL中实现数据完整性的方法,并进一步加深对关系数据模型中的三类完整性约束的理解。这不仅有助于确保数据的质量与一致性,还能提高数据库系统的整体性能。 #### 实习内容 ##### 表...
在SQL Server中,存在六种常用的数据完整性约束:空值约束(NULL)、唯一性约束(UNIQUE)、主键约束(PRIMARY KEY)、外键约束(FOREIGN KEY)、检查约束(CHECK)和默认约束(DEFAULT)。每一种约束都是用来保证...
当数据库的操作(如插入、更新或删除记录)试图破坏预先定义的数据完整性规则时,就会发生违反完整性约束的情况。这种情况下,必须采取措施来解决问题,以恢复数据的完整性。本文将详细介绍一个具体的解决方案——一...
完整性约束是实现这一目标的主要手段,它们规定了数据必须遵循的规则。在这个实验中,我们将关注如何在SQL Server Management Studio中创建和管理这些约束。 首先,我们创建两个关系模式——"职工"和"部门"。"职工...
【完整性约束】完整性约束是数据库设计中的核心概念,它确保数据的准确性和一致性。完整性约束主要有三类:实体完整性、参照完整性和用户定义的完整性。 1. **实体完整性**:通常由主键来保证,主键是表中唯一标识...
Oracle 数据完整性约束机制 Oracle 数据库的完整性约束机制是防止无效的数据进入数据库的基表的重要手段。如果任何 DML 执行结果破坏完整性约束,该语句被回滚并返回一上个错误。Oracle 实现的完整性约束完全遵守 ...
参照完整性约束是指对关系间引用数据的一种限制,即基本关系 R1 的外码与基本关系 R2 的主码相对应。SQL 中可以通过外部码的说明来实现参照完整性约束,有两种方法来定义外部码:一种是在该属性的说明后直接加上...
本章主要介绍 MySQL 表定义和完整性约束控制的知识点,涵盖了数据类型、表结构设计、数据完整性约束、索引和视图等方面。 一、数据类型 MySQL 支持多种数据类型,包括数值类型、日期时间型、字符串类型、复合类型...
【数据库实验3报告——数据完整性与安全性控制】 本次实验主要涉及了数据库中关于数据完整性和安全性的关键概念和操作,具体包括数据约束的设定、表的创建与删除、权限的管理等多个方面。以下是对实验内容的详细...
在SQL Server中,实现数据完整性可以通过添加和删除完整性约束来完成。例如,检查约束用于验证字段输入是否符合特定条件,如在Student表中设置Birth字段的检查约束,确保输入的日期不会大于当前日期。默认值约束可以...
数据完整性是数据库设计与管理中的核心概念之一。它确保数据库中的数据保持准确、一致且可靠的状态。数据完整性的重要性体现在两个方面:一是数据的准确性,即确保数据库中的每条记录都符合预定义的数据类型和约束...
索引与数据完整性约束,这是学校数据库的重点 ,要好好学习啊 以后会对你的学校有用。
标题:“MySQL与SQL Server 数据完整性约束的比较教学” 内容知识点: 1. 数据完整性概念:数据完整性是数据库中保证数据一致性和准确性的机制,目的是防止不符合规范的数据写入数据库。数据完整性包含实体完整性...
数据完整性约束是实现这一目标的关键工具,它们定义了数据必须遵循的规则,防止了非法或错误的数据输入。本节我们将深入探讨SQL Server 2005中的数据完整性约束及其重要性。 1. 主键约束:主键是表中的一个或一组列...
4. **域完整性**:虽然不是SQL标准的一部分,但通常与数据完整性相关。域完整性是指确保字段值符合预定义的数据类型和格式,比如日期、数字或字符串。这可以通过设置数据类型的限制、长度限制以及格式验证来实现。 ...
数据库完整性约束条件是确保数据库中数据准确无误和一致性的重要机制。这些约束条件分为静态和动态两类,分别针对数据在不同状态和变化过程中的规则。完整性检查主要关注三个方面:关系、元组和列。 首先,静态列级...
MySQL索引与数据完整性约束 MySQL索引是 MySQL 数据库中的一种数据结构,用于快速查找和检索数据。索引可以提高查询速度、减少磁盘I/O和提高数据库性能。MySQL索引可以分为几种类型,包括普通索引(INDEX)、唯一...
在本实验中,我们将探讨如何在SQL Server中创建数据库、关系表以及设置数据完整性约束。这涉及到数据库的基本操作,包括使用SQL语句来定义表结构、添加和修改字段、以及设置主键和外键约束。 首先,创建数据库的...