当前位置:文档之家› 实验2.3用户自定义完整性

实验2.3用户自定义完整性

-2-
软件 C122 彭静 126226
实验截图
(2)在 worker 表中插入一条合法记录。 实验代码
实验截图 (3)演示插入违反 U2 约束的例子,U2 规定元组的 sage 属性的值必须<=28。 实验代码
实验截图 (4)去除 U2 约束。
-3-
实验代码
软件 C122 彭静 126226
实验截图
不同的关系数据库系统根据其应用环境的不同,往往需要一些特殊的约束条 件。用户自定义的完整性即是针对某个特定关系数据库的约束条件,它反映某 一具体应用所涉及的数据必须满足的语义要求。 它主要包括: (1)域完整性(Domain Integrity) [1] 域完整性是指数据库中的列必须满足某种特定的数据类型或约束。域约束 是最常见的用户自定义完整性约束,当有新数据插入到数据库中,系统可以按 照定义进行关系属性取值是否正确的检测。其中,约束又包括取值范围精度等 规定。表中的 CHECK FOREIGN KEY 约束和 DEFAULT NOT NULL 定义都属于域完整 性的范畴。 [2] 现在的 RDBMS 中,一般都有域完整性检查功能。SQL Server 提供了定义和 检验这类完整性的机制,以便用统一的系统方法来处理它们。而不是用应用程 序来承担这一功能。其他的完整性类型都支持用户定义的完整性。 [3] 一个属性能否取空值一般由语义决定,也是域约束的内容之一。 (2)其他用户自定义完整性 不同的关系数据库系统根据其应用环境的不同,往 往还需要一些特殊的约束条件。其他类型的用户自定义的完整性即是针对某个 特定关系数据库的约束条件,它反映某个具体应用所涉及的数据必须满足的语 义要求。 2)SQL 中的约束机制 约束主要包括如下两种。 静态约束:对静态对 约束是反映数据库状态合理性的约束,如实体完整性。 动态约束:对动态对 约束是反映数据库状态变迁的约束,如触发器。 SQL 中用 于属性约束方面的有 NOT NULL、CHECK 等子句;而用于全局约束方面的有 CREATE ASSERTION、CREATE RULE 等语句 3)一般的规则组成 规则一般是由规则标识(可默认)以及规则语句组成。规则语句由约束作用的 数据对象、约束定义(如断言 Assertion)、触发条件以及违反规则时的响应动 作购成。 4)规则的一般分类 类型 属性级 元组级 关系级 静态 类型、格式、值域、空值 元组的各个属性 之间的取值限制 实体、引用统计完整性函数依赖 动态 属性/值改变 元组值修 改时各属性间的约束 关系变化的前后一致性 5)自定义数据类型和规则 (1)如果多个列使用同一类型的约束,或在一些特殊的情况下,通过自定义的 数据类型和规则就为数据库设计提供了更高层 抽象,如工资数据类型肯定比 smallmoney 能建立更多的特征及更容易被理 (2)规则的创建(当约束条件要为多列使用时)。 步骤一: CREATE RULE rule AS condition_expression
-1-
软件 C122 彭静 126226
步骤二: Sp_bindrule[@rulename =]’rule’,[@objname=]’object_name’ 规则一般绑定到某一列,或者是用户自己定义的数据类型。 6) Check 约束 (1)CHECK 约束是对列或列的组合的取值限制,它采用 SQL 语句中 WHERE 子句相 同的表达方式来表达,分为表一级和列一级的约束。 (2)空值的问题。空值意味着检查约束的值是未知的,所以空值的出现不会违反 检查约束的条件。 (3) 潜在的语义问题。 [1] 大多数的 DBMS 不会检查约束和默认值定义的语句,所以要注意语义冲突; [2] check 和 check 之间的冲突。 [3] 定义了置空删除,但表中检查约束要求此列不能为空;定义该列不能为空, 检查约束要求此列为空。 7)Rule 约束的建立 规则可以是 WHERE 子句中任何有效的表达式,并且可以包括 诸如算术运算符、关系运算符和谓词(如 IN、LIKE、BETWEEN)之类的元素。规 则不能引用列或其他数据库对象。可以包含不引用数据库对 内置函数。 Condition_expression 包括一个变量。每个局部变量的前面都有一个@符号。该 表达式引用通过 UPDATE 或 INSERT 语句输入的值。在创建规则时,可以使用任 何名称或符号表示值,但第一个字符必须是@符号。 8)Rule 的绑定以及松绑 创建规则后,规则仅仅只是一个存在于数据库中的对 象,并未发生作用。需要将规则与数据库表或用户自定义对象联系起来,才能 达到创建规则的目的。联系的方法称为“绑定”,所谓“绑定”就是指定规则作 用于哪个表的哪个列,或哪个用户自定义数据类型。表的一列或一个用户自定 义数据类型只能与一个规则相绑定,而一个规则可以绑定多对象。这 规则的魅 力所在。解除规则与对象的绑定称为“松绑”。 (1)存储过程 Sp_bindrule 绑定规则。 存储过程 Sp_bindrule 可以绑定一个规 则到表的一个列或一个用户自定义数据类型上。其语法如下: Sp_bindrule[@rulename=] ’ rule ’ , [@objname=] ’ object_name ’ [, ’ futureonly’] 各参数说明如下: [@rulename=]’ rule’指定规则名称。 [@objname=]’object_name’指定规则绑定的对象。 ‘futureonly’选项仅在 绑定规则到用户定义数据类型上时才可以使用。当指定此选项时,仅以后使用 此用户自定义数据类型的列会应用新规则,而当前已经使用此数据类型的列则 不受影响。 (2) 存储过程 Sp_unbindrule 规则的绑定。 存储过程 Sp_unbindrule 可解除规 则与列或用户自定义数据类型的绑定其语法如下: Sp_unbindrule[@objname=] ’ object_name ’ [, ’ futureonly ’ ] 其 中 ‘futureonly’选项同绑定时一样,仅用于用户自定义数据类型。它指定现有 的此用户自定义数据类型定义的列仍然保持与此规则的绑定,如果不指定此项 则所有由此用户自定义数据类型定义的列也随之解除与此规则的绑定。 3.实验内容: (1)创建 worker 表,并自定义 2 个约束 U1 以及 U2,其中 U1 规定 Name 字段唯一, U2 规定 sage(级别)字段的上限是 28。 实验代码
实验截图
(2) 加入规则 R2,确保插入的记录的 sage 值在 1 到 100 之间,并绑定到 sage 属性上。 实验代码
实验截图
-5-
(5)重新插入(3)中想要插入的数据,由于去除了 U2 约束,所以插入成功。 实验代码
实验截图
(6)创建规则 rule_sex,规定插入或更新的值只能是 M 或 F,并绑定到 worker 的 sex 字段。 实验代码
实验截图
(7)演示违反规则 rule_sex 的插入操作。 6226
实验截图
消息 513,级别 16,状态 0,第 2 行 列的插入或更新与先前的 CREATE RULE 语句所指定的规则发生冲突。该语句已终止。冲突发生于数据库'school',表 'dbo.WORKER',列'Sex'。 语句已终止。
4.实验步骤: 实现参见数据库实验习题 2.3.sql 文 心得体会: 1、学习了参 照完整性的相关内容,加深了对于这部分知识点的认识; 5.习题 (1) 加入约束 U3,令 sage 的值大于等于 0。 实验代码
软件 C122 彭静 126226
实验 2.3 用户自定义完整性 软件 C122 彭静 126226
1.实验目的: 学习用户自定义约束,并实践用户自定义完整性,利用 SQL 查询分析器用短
语 NOT NULL、UNIQUE、CHECK 保证用户定义完整性。 2.实验原理: 1)用户自定义完整性(User-defined Integrity)
相关主题