您的位置:首页 > 其它

关系的约束条件

2015-10-07 19:02 253 查看
关系的约束条件:

实体完整性

参照完整性

用户自定义完整性

实体完整性规则(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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: