欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » 关系数据库基础教程 » 正文

数据库完整性子系统和完整性规则

创建时间:2012年06月12日 16:55  阅读次数:(5869)
分享到:
1,数据库的完整性
指数据的正确性、有效性和相容性,防止错误的数据进入数据库。

2,完整性子系统的主要功能 
监督事务的执行,并测试是否违反完整性规则 
若有违反现象,则采取恰当的操作,譬如拒绝操作、报告违反情况、改正错误等方法来处理

3,完整性规则 
什么时候使用规则进行检查(称为规则的“触发条件”) 
要检查什么样的错误(称为“约束条件”或“谓词”) 
如果查出错误,应该怎么办(称为“ELSE子句”,即违反时要做的动作) 

SQL中的完整性约束1---域约束和断言
域约束 
用“CREATE  DOMAIN”语句定义新的域,并且还可出现CHECK子句

断言
如果完整性约束牵涉面较广,与多个关系有关,或者与聚合操作有关,那么SQL2提供“断言”(Assertions)机制让用户书写完整性约束
CREATE ASSERTION  <断言名>  CHECK(<条件>)
DROP  ASSERTION  <断言名>

定义一个新的域COLOR,可用下列语句实现:
CREATE  DOMAIN  COLOR  CHAR(6) DEFAULT ˊ???ˊ
CONSTRAINT V_COLORS 
CHECK(VALUE IN (ˊRedˊ,ˊYellowˊ,
ˊBlueˊ,ˊGreenˊ,ˊ???ˊ));
每位教师开设的课程不能超过10门。
CREATE  ASSERTION  ASSE1  CHECK(10 >= ALL(SELECT  COUNT(C#)FROM  C GROUP  BY  TNAME));

SQL中的完整性约束2---基本表的约束
1,候选键的定义
UNIQUE(〈列名序列〉)或 PRIMARY  KEY(〈列名序列〉)

2,外键的定义
FOREIGN  KEY(〈列名序列〉)REFERENCES  <参照表>  [(<列名序列>)][ ON  DELETE <参照动作> ][ ON  UPDATE <参照动作> ]

3,“检查约束”的定义
CHECK(〈条件表达式〉)

关于外键约束完整性的补充
删除参照表中元组时的考虑
NO  ACTION
CASCADE方式 
RESTRICT方式 
SET  NULL方式 
SET  DEFAULT方式

修改参照表中主键值时的考虑、
NO  ACTION
CASCADE方式 
RESTRICT方式 
SET  NULL方式 
SET  DEFAULT方式 

关于数据库完整性的例子
学生关系S(S#,SNAME,AGE,SEX,SDEPT)
选课关系SC(S#,C#,GRADE)
课程关系C(C#,CNAME,CDEPT,TNAME) 

在教学数据库中,要求S中的元组满足条件:男生年龄在15~35岁之间,女生年龄在15~30岁之间 。对应的语句为:
CHECK(AGE >= 15 AND((SEX =ˊ男ˊ AND  AGE <= 35) OR (SEX =ˊ女ˊ AND  AGE <= 30)))

CREATE  TABLE  SC(S#  CHAR(4),C#  CHAR4),GRADE  SMALLINT,PRIMARY  KEY(S#,C#),
CHECK(S#  IN(SELECT  S#  FROM  S)),CHECK(C#  IN(SELECT  C#  FROM  C)))
① 在SC中插入一个元组,若C#值在C中不存在,则系统将拒绝这个插入操作。
② 在SC中插入一个元组,若S#值在S中不存在,则系统将拒绝这个插入操作。
③ 在S中删除一个元组,这个操作将与关系SC中的检查子句无关。若此时SC中存在被删学生的选课元组时,SC将违反检查子句中条件。

SQL3的触发器


什么是触发器
触发器的组成
事件:插入、删除、修改等操作,引发触发器的操作
条件:引发触发器的条件
动作:引发触发器后的工作

触发器的命名规则:
动作时间 触发事件 目标表名

下面是应用于选课关系SC的一个触发器。这个触发器规定,在修改关系SC的成绩值时,要求修改后的成绩一定不能比原来的低,否则就拒绝修改 
CREATE  TRIGGER  TRIG1 AFTER  UPDATE  OF  GRADE  ON  SC
REFERENCING  
      OLD  AS  OLDTUPLE 
      NEW  AS  NEWTUPLE
FOR  EACH  ROW
WHEN (OLDTUPLE.GRADE > NEWTUPLE.GRADE)

UPDATE  SC  SET  GRADE = OLDTUPLE.GRADE
WHERE  C# = NEWTUPLE.C#


数据库安全性级别
什么是数据库的安全性:保护数据库,防止不合法的使用,以免数据的泄密、更改或破坏。
安全性级别(下面的安全级别分别从低到高排列)
1,环境级:计算机系统的机房和设备应加以保护,防止有人进行物理破坏。
2,职员级:工作人员应清正廉洁,正确授予用户访问数据库的权限。
3,OS级:应防止未经授权的用户从OS处着手访问数据库。
4,网络级:由于大多数DBS都允许用户通过网络进行远程访问,因此网络软件内部的安全性是很重要的。
5,DBS级:DBS的职责是检查用户的身份是否合法及使用数据库的权限是否正确。

访问数据的权限
修改数据库模式的权限 
索引(Index)权限:允许用户创建和删除索引。
资源(Resourse)权限:允许用户创建新的关系。
修改(Alteration)权限:允许用户在关系结构中加入或删除属性。
撤消(Drop)权限:允许用户撤消关系。 

(1)读权限:允许用户读数据,但不能改数据。
⑵ 插入权限:允许用户插入新数据,但不能改数据。
⑶ 修改权限:允许用户改数据,但不能删除数据。
⑷ 删除权限 :允许用户删除数据

SQL中的安全性机制

SQL2中的用户权限及其操作(授权子系统)
用户权限:SELECT  INSERT  DELETE  UPDATE  REFERENCES  USAG
授权语句
GRANT  <权限表>  ON  <数据库元素>  TO  <用户名表>  [WITH  GRANT  OPTION]
回收语句
REVOKE  <权限表>  ON  <数据库元素>  FROM  <用户名表>  [RESTRICT | CASCADE]

SQL中的权限操作实例
GRANT  SELECT,UPDATE  ON  S  TO  WANG  WITH  GRANT  OPTION 
GRANT  INSERT (S#,C#) ON  SC  TO  LOU  WITH  GRANT  OPTION
GRANT  REFERENCES (CNO) ON  C  TO  BAO  WITH  GRANT  OPTION 
GRANT  USAGE  ON  DOMAIN  AGE  TO  CHEN 
REVOKE  SELECT,UPDATE  ON  S  FROM  WANG  CASCADE 
REVOKE  INSERT(S#,C#) ON  SC  FROM  ZHANG  RESTRICT 
REVOKE  GRANT  OPTION  FOR  REFERENCES (C#) ON  C  FROM  BAO

常用的安全性措施
1,强制存取控制 
用户i只能查看比它级别低或同级的数据;
用户i只能修改和它同级的数据

2,统计数据库的安全性 
一个查询查到的记录个数至少是n;
两个查询查到的记录的“交”数目至多是m

3,数据加密法 
普通加密法 
明键加密法

4,自然环境的安全性
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 48+64=? 的结果(结果是:112)
结  果: