sqlserver2000-ch7

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

sqlserver2000-ch7
第7章数据库完整性
1
第7章数据库完整性
7.1 数据库完整性的概念
7.1数据库完整性的概念
7.2 SQL-DDL中关于完整性的命令
7.3 完整性约束实例
3完整性约束实例
7.4 触发器trigger
触发器gg
2
7.1
7.1 数据库完整性的概念
第章介绍的关系模型中有完整性要求
第3章介绍的关系模型中有完整性要求实体完整性
参照完整性
⽤户⾃定义完性
⽤户⾃定义完整性
3
7.1 数据库完整性的概念
7.1
实体完整性
主码(主键)不能为NULL
主键不能重复
主键可以是⼀个属性或多个属性的组合
主码
×
×
4
7.1
7.1 数据库完整性的概念
参照完整性
关系R1的外码Fk与关系R2的主码Pk相对应
R1中的每⼀个元组的Fk值或者等于R2中某个元组的Pk值 R1中的每⼀个元组的Fk值或者等于R2 中某个元组的Pk 值,或者为空值NULL R1----Student
外码Fk----D#
R2----Dept
主码Pk----D#
×

5
7.17.1
数据库完整性的概念?参照完整性
6
X
7.1
7.1 数据库完整性的概念
⽤户⾃定义完整性
⽤户针对具体的应⽤环境定义的完整性约束条件年龄在[12, 80]
之间
要求名字在5个
性别只能是
汉字字符之内
“男”或“⼥”
颠覆完整性
的⽰例
7
7.1
7.1 数据库完整性的概念
数据库完整性
DB Integrity是指DBMS应保证DB在任何情况下的正确性、有效性和致性
有效性和⼀致性
9⼴义完整性:语义完整性、并发控制、安全控制、DB故障恢
复等
9狭义完整性:专指语义完整性,DBMS通常有专门的完整性
管理机制与程序来处理语义完整性问题。

(本讲义指语义完整性)
8
7.1 数据库完整性的概念
7.1
为什么会引发数据库完整性的问题呢?
不正当的数据库操作,如输⼊错误、操作失误、程序处理失误等
数据库完整性管理的作⽤
防⽌和避免数据库中不合理数据的出现
DBMS应尽可能地⾃动防⽌DB中语义不合理现象
如DBMS不能⾃动防⽌,则需要应⽤程序员和⽤户在进⾏
Q
数据库操作时处处加以⼩⼼,每写⼀条SQL语句都要考虑是否符合语义完整性,这种⼯作负担是⾮常沉重的,因此应尽可能多地让DBMS来承担。

9
7.1
7.1 数据库完整性的概念
DBMS怎样⾃动保证完整性呢?
DBMS允许⽤户定义⼀些完整性约束规则(⽤SQL-DDL来定义)
当有DB更新操作时,DBMS⾃动按照完整性约束条件进⾏检查,以确保更新操作符合语义完整性
⾏检查以确保更新操作符合语义完整性
10
7.1
7.1 数据库完整性的概念
完整性约束条件(或称完整性约束规则)的⼀般形式 Integrity Constraint ::= ( O,P,A,R)
9O--数据集合:约束的对象?
列、多列(元组)、元组集合
9P--谓词条件:什么样的约束?
9A--触发条件:什么时候检查?
9R--违约响应:不满⾜时怎么办?
11
7.1
7.1 数据库完整性的概念
常⽤的数据库完整性约束类型
必需数据(not null约束)
9每⾏中的字段必须包括合法数据,它们不允许包括会丢失的数
须法会值或NULL值
唯性(primary key约束和unique约束)
唯⼀性(primary key约束和unique约束)
9表的属性值不能重复.
参照统(foreign key约束)
参照统⼀(foreign key约束)
9关系数据库外键的⼦表的每⾏和包含匹配主键值的⽗表的每
⾏连接起来
合法性检查(check约束,domain约束和assertion约束) 9数据库中每个字段都有⼀个域.
数据库中每个字段都有个域
12
7.1
7.1 数据库完整性的概念
完整性约束条件的类别
域完整性约束条件
施加于某⼀列上对给定列上所要更新的某⼀候选值是否可
9施加于某列上,对给定列上所要更新的某候选值是否可
以接受进⾏约束条件判断,这是孤⽴进⾏的。

关系完整性约束条件
9施加于关系/table上,对给定table上所要更新的某⼀候选
元组是否可以接受进⾏约束条件判断,或是对⼀个关系中的若
元组是否可以接受进⾏约束条件判断或是对个关系中的若
⼲元组和另⼀个关系中的若⼲元组间的联系是否可以接受进⾏
约束条件判断
约束条件判断。

13
7.1 数据库完整性的概念
7.1
完整性约束条件的进⼀步分类
约束来源分类
9结构约束:来⾃于模型的约束,例如函数依赖约束、主键约
束(实体完整性)、外键约束(参照完整性),只关⼼数值相等与
否、是否允许空值等;
9内容约束:来⾃于⽤户的约束,如⽤户⾃定义完整性,关⼼
元组或属性的取值范围。

例如Student表的Sage属性值在15
岁⾄40岁之间等。

14
7.1
7.1 数据库完整性的概念
完性束件进步分类
完整性约束条件的进⼀步分类
约束状态分类
:要求DB在任⼀时候均应满⾜的约束;例如Sage 9静态约束:要求DB在任时候均应满⾜的约束;例如Sage 在任何时候都应满⾜⼤于0⽽⼩于150(假定⼈活最⼤年龄是
150)。

150)
9动态约束:要求DB从⼀状态变为另⼀状态时应满⾜的约束;
例如⼯资只能升,不能降:⼯资可以是800元,也可以是1000
例如⼯资只能升不能降:⼯资可以是800元也可以是1000
元;可以从800元更改为1000元,但不能从1000元更改为
800元
800元。

15
第7章数据库完整性
7.1 数据库完整性的概念
7.1数据库完整性的概念
7.2 SQL-DDL中关于完整性的命令
7.3 完整性约束实例
3完整性约束实例
7.4 触发器trigger
触发器gg
16
7.2SQL-DDL
7.2 SQL DDL中关于完整性的命令
Q
SQL-DDL提供了诸多完整性约束的定义,⾸先完整性约束定义体现在Create Table语句中
CREATE TABLE tablename
((colname datatype[DEFAULT{default_constant|NULL}]
[col_constr{col_constr...}]
|,table_constr
{,{colname datatype[DEFAULT{default_constant|NULL}]
[col_constr{col_constr...}]
|,table_constr}
...});
17
7.2SQL-DDL
7.2 SQL DDL中关于完整性的命令
_列束种域束类,单列值进束
Col_constr列约束:⼀种域约束类型,对单⼀列的值进⾏约束{NOT NULL|//列值⾮空
[CONSTRAINT constraintname]//为约束命名,便于以后撤消
{UNIQUE//列值是唯⼀
|PRIMARY KEY//列为主键
|CHECK(search_cond)//列值满⾜条件,条件只能使⽤列当前值
|REFERENCES tablename[(colname)]
O C SC
[ON DELETE CASCADE]}}
//引⽤另⼀表tablename的列colname值,如有ON DELETE CASCADE语句,则删除被引⽤表的某列值时,要将本表的该列值为的列值更新为或删除相关
元;缺省为⽆操作。

⽤表的某列值v时,要将本表的该列值为v的列值更新为null或删除相关元组;
Col_constr列约束:只能应⽤在单⼀列上,其后⾯的约束如UNIQUE, PRIMARY及search_cond只能是单⼀列唯⼀、单⼀列为主键、和单⼀列相关18
7.2SQL-DDL
7.2 SQL DDL中关于完整性的命令
Col_constr列约束⽰例
Create Table Student (S#char(8)not null unique, Sname char(10), Ssex char(2) constraint ctssex check (Ssex=‘男’or
Ssex=‘⼥’), Sage integer check (Sage>=1 and Sage<150),
)integer check(Sage>=1and Sage<150) D#char(2) references Dept(D#) on delete cascade,
Sclass char(6)
());
//假定Ssex只能取{男,⼥}, 1=
Create Table Course (C# char(3) , Cname char(12), Chours integer, Credit float(1) constraint ctcredit check (Credit >=0.0 and
Credit<=5.0 ), T# char(3) references Teacher(T#) on delete
cascade);
//假定每门课学分最多5分,最少0分,T#为外键
19。

相关文档
最新文档