博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库系统丨数据库完整性及其 SQL 实现
阅读量:2830 次
发布时间:2019-05-14

本文共 1794 字,大约阅读时间需要 5 分钟。

文章目录

1. 关系的完整性约束

  • 实体完整性
  • 参照完整性
  • 用户定义的完整性
[1] 实体完整性
  • 若属性(组) A 是基本关系 R 主键上的属性,则属性 A 不能为控制。(主键不能为空

    解释如下:

    • 实体完整性规则是对基本关系的约束和限定。
    • 每个实体具有唯一性标识 —— 主键。
    • 组成主键的各属性都不能取控制(有多个候选键时,主键外的候选键可以取空值)。
[2] 参照完整性
  • 引用关系
    • 关系中某属性的值需要参照另一关系的属性来取值

在这里插入图片描述

  • 外键

在这里插入图片描述

△ S 的主键 K 和 R 的外键 F 必须定义在同一个(或一组)域上

对于 S中每个元组在 F 上的值必为下列之一:

  • 取空值(F 的每个属性值都为空)
    • 未给该学生分配专业
  • 等于R中某个元组的主键值
    • 专业关系 R 中某个元组的专业号值
[3] 用户定义的完整性
  • 反映具体应用所涉及的数据应满足的语义要求、约束条件。
    • 例:学生关系中的年龄在15~45之间,选修关系中的成绩在0~100之间。

2. SQL 实现

  • 通过定义主键实现实体完整性
  • 通过定义外键满足参照完整性
  • 通过定义域约束、检查约束和断言等实现用户定义的完整性

[1] 基本表约束

[1-1] 主键、候选键
CREATE TABLE teacher(tno NUMERIC(6), name VARCHAR(8) NOT NULL, cardno NUMERIC(4), UNIQUE(cardao),  #定义候选键,用于唯一性查询,可空 CONSTRAINT PRIMARY KEY(tno)); #定义主键,唯一,不可空
[1-2] 外键
FOREIGN KEY (
<列名表>
)REFERENCE
<目标表>
[(
<列名表>
)][ON DELETE
<参照动作>
][ON UPDATE
<参照动作>
]
  • 目标表
    • 与外键相应的候选键所在的关系表
  • 参照动作
    • 指明当对目标表进行操作涉及主键时,对与其匹配的外键所在的依赖表产生的影响。有以下 5 种:
      • CASCADE (级联): 删除或修改目标表中的行并自动删除或修改在依赖表中匹配的行。

      • RESTRICT (受限):只有当依赖表外键中没有与目标表要删除或修改的主键相同时,才能删除目标表中的行,否则拒绝执行此操作。

      • SET NULL (置空值):删除或修改目标表中的行并将依赖表表中的外键设置为NULL。只有当外键没有被设置成NOT NULL时才有效。

      • SET DEFAULT (置默认值):删除或修改目标表中的行并将依赖表中的外键设置为指定的默认值。只有外键指定了默认值时才有效。

      • NOT ACTION:对依赖表无影响。

[1-3] 检查约束
age NUMERIC(2) CHECK (age BETWEEN 18 AND 60)CONSTRAINT sex CHECK (sex IN('男','女'))
[1-4] 默认约束
sex char(2) DEFAULT '男'

[2] 域约束

CREATE DOMAIN 
<域名>
<域类型>
CHECK (
<条件>
)
CREATE DOMAIN Grade CHAR(1) DEFAULT '?'CONSTRAINT Valid_gradeCHECK(VALUE IN ('A','B','C','D','E','F','?'));CREATE TABLE s_c(  sno NUMERIC(6),  cno VARCHAR(3),  grade gradess    #这里grade的默认值就为“?”且只能为上面域中指定的值。);

[3] 断言

一个断言可以对基本表的单独一行或整个基本表定义有效值集合,或定义存在于多个基本表中的有效值集合。

#每门课程只允许100个学生选课CREATE ASSERTION asser1     #创建断言	CHECK (100>= ALL(SELECT COUNT(sno)                  FROM s_c                  GROUP BY cno));                  DROP ASSERTION asser1;     #撤销断言

转载地址:http://kqded.baihongyu.com/

你可能感兴趣的文章
Flutter App逆向技术研究
查看>>
Unidbg源码分析系列--源码架构(一)
查看>>
安卓动态调试方法总结
查看>>
大数据BI平台建设需注意什么问题
查看>>
大数据BI平台建设需注意什么问题
查看>>
大数据分析哪些错误需避免
查看>>
大数据技术的表现形式有哪些
查看>>
数据可视化图表的类型和特点
查看>>
商业智能BI的数据价值
查看>>
四川地震,物联网地震预警系统立功了
查看>>
ubuntu16.04+anaconda+openspiel
查看>>
The repository is not updated and the previous index files will be used.
查看>>
TX2(秒算2)安装Tensorflow采坑记录
查看>>
多线程与openCV
查看>>
【Leetcode刷题篇】(十七)分隔链表
查看>>
【Leetcode刷题篇】(十八)奇偶链表
查看>>
【Leetcode刷题篇】(十九)两数相加-链表
查看>>
ubuntu16.04安装Docker
查看>>
git常用指令(一)
查看>>
git常用指令(二)
查看>>