关系的约束条件

关系的约束条件:

实体完整性

参照完整性

用户自定义完整性

实体完整性规则(entity integrity rule)

要求关系中元组在组成主键的属性上不能有空值。

如果出现空值,那么主键值就起不了唯一标识元组的作用,即存在不可标识的实体。

参照完整性(reference integrity rule)

如果属性集K是关系模式R1的主键,K也是关系模式R2的外键,那么在R2的关系中,K的取值只允许两种可能,或者为空值,或者等于R1关系中某个主键值。

这条规则的实质是“不允许引用不存在的实体”。

例 下面各种情况说明了参照完整性规则在关系中如何实现的。

① 在关系数据库中有下列两个关系模式:

S(S#,SNAME,AGE,SEX)

SC(S#,C#,SCORE)

这里带下划线者为主键,带波浪线者为外键。据规则要求关系SC中的S# 值应该在关系S中出现。如果关系SC中有一个元组(S7,C4,80),而学号S7却在关系S中找不到,那么我们就认为在关系SC中引用了一个不存在的学生实体,这就违反了参照完整性规则。

另外,在关系SC中S# 不仅是外键,也是主键的一部分,因此这里S# 值不允许空。

② 设工厂数据库中有两个关系模式:

DEPT(D#,DNAME)

EMP(E#,ENAME,SALARY,D# )

  车间模式DEPT的属性为车间编号、车间名,职工模式EMP的属性为工号、姓名、工资、所在车间的编号。每个模式的主键与外键已标出。在EMP中,由于D# 不在主键中,因此D# 值允许空。

③ 设课程之间有先修、后继联系。模式如下:

R(C# ,CNAME,PC# )

其属性表示课程号、课程名、先修课的课程号。如果规定,每门课程的直接先修课只有一门,那么模式R的主键是C#,外键是PC#。这里参照完整性在一个模式中实现。即每门课程的直接先修课必须在关系中出现。

用户定义的完整性规则 

在建立关系模式时,对属性定义了数据类型,即使这样可能还满足不了用户的需求。此时,用户可以针对具体的数据约束,设置完整性规则,由系统来检验实施,以使用统一的方法处理它们,不再由应用程序承担这项工作。例如学生的年龄定义为两位整数,范围还太大,我们可以写如下规则把年龄限制在15~30岁之间:

CHECK(AGE  BETWEEN  15  AND  30) 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值