数据库第五章

本文详细介绍了数据库的完整性,包括实体完整性、参照完整性和用户定义完整性,并对比了完整性与安全性之间的区别和联系。讨论了完整性约束条件的分类,以及DBMS在完整性控制机制上的功能,如定义、检查和违约反应。通过示例展示了如何在SQL中定义关系模式的完整性约束,并提出了针对特定场景的完整性管理策略,如限制来宾人数不超过一定数量。此外,还探讨了违反各种完整性约束时的处理方法。
摘要由CSDN通过智能技术生成

1.什么是数据库的完整性?
数据库的完整性是指数据的正确性和相容性。
2.数据库的完整性概念与数据库的安全性概念有什么区别和联系?
数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(GarbageInGarbageOut)所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。
3.什么是数据库的完整性约束条件?
完整性约束条件是指数据库中的数据应该满足的语义约束条件。一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。
4.关系数据库管理系统的完整性控制机制应具有哪三方面的功能?
DBMS的完整性控制机制应具有三个方面的功能:
(1)定义功能,即提供定义完整性约束条件的机制;.
(2)检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;.
(3)违约反应,如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。
5.关系数据库管理系统在实现参照完整性时需要考虑哪些方面?
RDBMS在实现参照完整性时需要考虑以下几个方面:
(1)外码是否可以接受空值。
(2)删除被参照关系的元组时的考虑,这时系统可能采取的作法有三种:
1)级联删除(CASCADES)
2)受限删除(RESTRICTED)
3)置空值删除(NULLIFIES)
(3)在参照关系中插入元组时的问题,这时系统可能采取的作法有:
1)受限插入
2)递归插入。
(4)修改关系中主码的问题。–般是不能用UPDATE语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。如果允许修改主码,首先要保证主码的惟一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。
6.假设有下面两个关系模式:
职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码:
部门(部门号,名称,经理名,电话),其中部门号为主码。
用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:
(1)定义每个模式的主码: (2)定义参照完整性: (3)定义职工年龄不得超过60岁。
职工表定义:
CREATE TABIE Workers
( Wno NUMBER (4),
Wname VARCHAR (10),
WAge NUMBER (2),
CONSTRAINT Cl CHECK (WAge<=60),
Job VARCHAR(9),
Sal NUMBER(7, 2),
Deptno NUMBER (2),
CONSTRAINT WKey FOREIGN KEY (Deptno)
REFERENCES DEPT (Deptno)) ;
部门表定义:
CREATE TABLE DEPT
(Deptno NUMBER(2),
Dname VARCHAR (10),
Manager VARCHAR (10),
phoneNum VARCHAR(11)
CONSTRAINT DKey PRIMARY KEY (Deptno)
);
7.在关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的?
对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。
8.某单位想举行一个小型的联谊会,关系Male记录注册的男宾信息,关系Female记录注册的女宾信息。建立一个断言,将来宾的人数限制在50人以内。(提示,先创建关系Female和关系Male。)
CREATE TABLE Female
( Fno CHAR(10) PRIMARY KEY
Fname CHAR(10) NOT NULL,
Fage SMALLINT);
CREATE TABLE Male
( Mno CHAR(10) PRIMARY KEY
Mname CHAR(10) NOT NULL,
Mage SMALLINT );
断言代码:
CREATE ASSERTION Pcount
CHECK(50>=(SELECT COUNT(*)
FROM (SELECT * FROM Male
UNION
SELECT * FROM Female)
AS num);
这里改为不超过4人方便验证,触发器代码(方法一):

总人数不超过4,但男女宾要分开记录,所以在Female表和Male表上分别建立一个触发器,条件是两个表相加的人数不能超过4
插入四条记录可成功插入:

若继续插入信息,总人数会超过4人,触发器内会执行删除语句,其他信息不能成功插入,总人数还是保持4人。

方法二触发器代码:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pig2687

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值