200 likes | 354 Views
数据完整性的分类. 域完整性又称为列完整性,指列数据输入的有效性。. 1. 域完整性. 定义表 XS 的同时定义借书数字段的约束条件 :. USE XSBOOK CREATE TABLE XS ( 借书证号 char(8) NOT NULL, 姓名 char(8) NOT NULL, 专业名 char(12) NOT NULL, 性别 bit NOT NULL, 出生时间 smalldatetime NOT NULL, /* 如下语句定义字段的同时定义约束条件* /
E N D
数据完整性的分类 域完整性又称为列完整性,指列数据输入的有效性。 1. 域完整性 定义表XS的同时定义借书数字段的约束条件: USE XSBOOK CREATE TABLE XS ( 借书证号 char(8) NOT NULL, 姓名 char(8) NOT NULL, 专业名 char(12) NOT NULL, 性别 bit NOT NULL, 出生时间 smalldatetime NOT NULL, /*如下语句定义字段的同时定义约束条件*/ 借书数 tinyint CHECK (借书数 >=0 AND 借书数<=20) NULL, 照片 image NULL ) GO
数据完整性的分类 2. 实体完整性 实体完整性又称为行的完整性,要求表中有一个主键,其值不能为空且能唯一地标识对应的记录。 3. 参照完整性 参照完整性又称为引用完整性。参照完整性保证主表中的数据与从表中数据的一致性。
域完整性的实现 1. CHECK约束的定义与删除 CHECK约束实际上是字段输入内容的验证规则,表示一个字段的输入内容必须满足CHECK约束的条件,若不满足,则数据无法正常输入。 1) 通过企业管理器创建与删除CHECK约束
域完整性的实现 2) 利用SQL语句在创建表时创建CHECK约束 语法格式: CREATE TABLE table_name /*指定表名*/ ( column_name datatype NOT NULL | NULL [DEFAULT constraint_expression] /*缺省值约束表达式*/ [[check_name ] CHECK ( logical_expression )] /*CHECK约束表达式*/ [,…n] ) /* 定义列名、数据类型、标识列、是否空值及定义缺省值约束、CHECK 约束*/
域完整性的实现 3) 利用SQL语句在修改表时创建CHECK约束 语法格式: ALTER TABLE table_name ADD CONSTRAINT check_name CHECK (logical_expression) 4) 利用SQL语句删除CHECK约束 CHECK约束的删除可在企业管理器中通过界面删除,有兴趣的读者可以自己试一试,在此介绍如何利用SQL命令删除。 语法格式: ALTER TABLE table_name DROP CONSTRAINT check_name
域完整性的实现 2. 规则对象的定义、使用与删除 规则对象的使用方法与缺省值对象的使用步骤类似: (1) 定义规则对象; (2) 将规则对象绑定到列或用户自定义类型; 1) 利用企业管理器定义规则对象并绑定到自定义类型或列 对于XSBOOK数据库XS表的借书证号字段,如果规定前2位代表读者类别,输入时每位只能选1-6;后3位为部门编号,输入时每位只能选1-9;最后3位为读者顺序号,输入时顺序号从1开始。
1.通过此下拉框选择表 2.选择被绑定字段 域完整性的实现 规则属性窗口 将规则绑定到字段的窗口
域完整性的实现 2) 利用SQL命令定义规则对象并绑定到自定义类型或列 (1) 规则对象的定义 语法格式: CREATE RULE rule AS condition_expression (2) 将规则对象绑定到自定义类型或列 语法格式: sp_bindrule [ @rulename = ] 'rule' , [ @objname = ] 'object_name' [ , [ @futureonly = ] 'futureonly_flag' ]
域完整性的实现 (3) 应用举例 如下程序创建一个规则,并绑定到XSBOOK数据库XS表的借书证号字段。 USE XSBOOK GO CREATE RULE num_rule AS @num like '[1-6][1-6][1-9] [1-9] [1-9] [1-9] [0-9] [0-9] [0-9]' GO EXEC sp_bindrule 'num_rule', 'XS.借书证号' GO
域完整性的实现 (4) 规则对象的删除 删除规则对象前,首先应使用系统存储过程sp_unbindrule解除被 绑定对象与规则对象之间的绑定关系。 语法格式: sp_unbindrule [@objname =] 'object_name' [, [@futureonly =] 'futureonly_flag']
2.点击主键图标 1.选中此行 实体完整性的实现 1. 利用企业管理器创建和删除PRIMARY KEY约束 1) 利用企业管理器创建PRIMARY KEY约束 如果要对XS表按借书证号字段建立PRIMARY KEY约束,按如下步骤进行: (1) 选择XS表图标,右击,出现快捷菜单,选择菜单项“设计表” 。 (2) 在表设计器界面选中“借书证号”字段对应的这一行,选择主键图标,这样在“借书证号”对应的这一行前面,将出现一主键图标。 2) 利用企业管理器删除PRIMARY KEY约束 如下步骤进行: (1) 进入XS表的表设计器界面; (2) 选中XS表设计器中主键对应的行,点击工具栏的主键图标,则取消了原来定义的主键。
实体完整性的实现 2. 利用企业管理器创建和删除UNIQUE约束 1) 利用企业管理器创建UNIQUE约束 2) 利用企业管理器删除UNIQUE约束
实体完整性的实现 3.利用SQL命令创建及删除PRIMARY KEY约束或UNIQUE约束 1) 创建表的同时创建PRIMARY KEY约束或UNIQUE约束 语法格式: CREATE TABLE table_name /*指定表名*/ ( column_name datatype /*定义字段*/ [ CONSTRAINT constraint_name ] /*约束名*/ NOT NULL PRIMARY KEY | UNIQUE /*定义约束类型*/ [CLUSTERED | NONCLUSTERED] /*定义约束的索引类型*/ [, …n] ) /*n表示可定义多个字段*/
实体完整性的实现 2) 通过修改表创建PRIMARY KEY约束或UNIQUE约束 (1) 创建PRIMARY KEY约束 语法格式: ALTER TABLE table_name ADD[ CONSTRAINT constraint_name ]PRIMARY KEY CLUSTERED | NONCLUSTERED ( column [ ,...n ] ) (2) 创建UNIQUE约束 语法格式: ALTER TABLE table_name ADD [ CONSTRAINT constraint_name ] UNIQUE CLUSTERED | NONCLUSTERED ( column [ ,...n ] ) 3) 删除PRIMARY KEY约束或UNIQUE约束 语法格式: ALTER TABLE table_name DROP CONSTRAINT constraint_name [,…n]
参照完整性的实现 1. 利用企业管理器定义表间的参照关系
参照完整性的实现 关系设置界面 设置参照关系后的关系图界面
参照完整性的实现 2. 利用企业管理器删除表间的参照关系 XS表的参照关系属性界面 如果要删除前面建立的XS表与JY表之间的参照关系,可按以下步骤进行: (1) 进入主表或从表的表设计器界面,在此进入的是主表XS的表设计器,右击鼠标,出现一快捷菜单,选择菜单项“关系”. (2) 在图的属性界面的关系下拉表中选择要删除的关系,然后点击“删除”按钮,选择“关闭”按钮。
参照完整性的实现 3. 利用SQL命令定义表间的参照关系 (1) 创建表的同时定义外码约束 语法格式: CREATE TABLE table_name /*指定表名*/ (column_name datatype [FOREIGN KEY ] REFERENCES ref_table ( ref_column ) [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] [, …n] ) /*n表示可定义多个字段*/ (2) 通过修改表定义外码约束 语法格式: ALTER TABLE table_name ADD [ CONSTRAINT constraint_name] [FOREIGN KEY] ( column [ ,...n ] ) REFERENCES ref_table ( ref_column [ ,...n ] ) [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ]
6.4 综合应用训练 • 训练要求 (1) 对于historytable按索引号+借书证号+借书时间创建主键约束; (2) 创建historytable与XS表之间的参照关系; (3) 统计2003年每位读者的读书量,并按降序排列; • 思考:先自己想,再往下看。 • 实现上述功能的程序代码如下: (1) 创建historytable的主键约束 • USE XSBOOK • ALTER TABLE historytable • ADD CONSTRAINT HT_PK • PRIMARY KEY CLUSTERED (索书号,借书证号,借书时间) • GO
6.4 综合应用训练 (2) 创建historytable与XS表之间的参照关系: USE XSBOOK IF EXISTS (SELECT name FROM sysobjects WHERE name = 'HT_foreign' AND type = 'F') ALTER TABLE historytable DROP CONSTRAINT HT_foreign GO ALTER TABLE historytable ADD CONSTRAINT HT_foreign FOREIGN KEY (借书证号) REFERENCES XS(借书证号) ON DELETE CASCADE ON UPDATE CASCADE GO