5.3 用户定义的完整性

5.3 用户定义的完整性
♥  用户定义的完整性是:针对某一具体应用的数据必须满足的语义要求
♥  关系数据库管理系统提供了定义和检验用户定义完整性的机制,不必由应用程序承担

5.3.1 属性上的约束条件
5.3.2 元组上的约束条件

♥  1.属性上约束条件的定义
♥  create table时定义属性上的约束条件
    ◾ 列值非空(NOT NULL)
    ◾ 列值唯一(UNIQUE)
    ◾ 检查列值是否满足一个条件表达式(CHECK)

♥  (1)不允许取空值
[例 5.1] 在定义SC表时,说明Sno,Cno,Grade属性不允许取空值

create table SC
( Sno char(9) not null,
  Cno char(4) not null,
  Grade smallint not null,
  primary key(Sno, Cno),
  ...
);

♥  (2)列值唯一
[例 5.2] 建立专业表DEPT,要求专业名城Dname列值取唯一且不能取空值,专业编号Deptno列为主码

create table DEPT
(	Deptno NUMERIC(2),
	Dname char(9) unique not null,	-- 要求Dname列值唯一,并且不能取空值
	primary key(Deptno)
);

♥  (3)用check短语指定列值应该满足的条件
[例 5.3] Student表的Ssex只允许取“男”或“女”

create table Student
(	Sno char(9) primary key,
	Sname char(8) not null,
	Ssex char(2) check(Ssex IN ('男', '女')),	--	性别属性Ssex只允许取“男”或“女”
	Sage smallint,
	Sdept char(20)
);

[例 5.4] SC表的Grade的值应该在0和100之间

create table SC
(	Sno char(9),
	Cno char(4),
	Grade smallint check(Grade >= 0 and Grade <= 100),	-- Grade取值范围为0到100
	primary key(Sno, Cno),
	foreign key(Sno) references Student(Sno),
	foreign key(Cno) references Course(Cno)
);

♥  属性上的约束条件检查和违约处理
    ◾ 插入元组和修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满足
    ◾ 如果不满足则操作被拒绝执行

5.3.1 属性上的约束条件
5.3.2 元组上的约束条件

♥  属性上的约束条件:只涉及单个属性
♥  元组级的限制:可以设置不同属性之间的取值的相互约束条件
数据库课程的学分不能低于2学分
♥  在create table时可以用check子句定义元组上的约束条件

[例 5.5] 当学生的性别是男时,其名字不能以Ms.打头

create table Student
(	Sno char(9),
	Sname char(8) not null,
	Ssex char(2),
	Sage smallint,
	Sdept char(20),
	primary key(Sno),
	check(Ssex='女' or Sname not like 'MS.%')		-- 定义了元组中Sname和Ssex两个属性之间的约束条件
);

性别是女性的元组都能通过该项检查,因为Ssex='女’成立;
当性别是男性时,要通过检查则名字一定不能以Ms.打头
♥  元组上的约束条件检查和违约处理
    ◾ 插入元组或修改属性的值时,关系数据库管理系统检查元组上的约束条件是否被满足
    ◾ 如果不满足则操作被拒绝执行
小结:
♥  属性上的用户定义完整性
    ◾ 定义方法
    ◾ 检查时机
    ◾ 违约处理
♥  元组
上的用户定义完整性
    ◾ 定义方法
    ◾ 检查时机
    ◾ 违约处理

上一篇:5.2 参照完整性
目    录:《数据库系统概论》
下一篇:5.4 完整性约束命名子句 5.6 断言

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值