跳到主要内容

任务二 参照完整性

知识点​

1.什么是参照完整性?​

答:参照完整性(Referential Integrity)是指表与表之间的一种对应关系,一般是通过MySQL外键(foreign key)实现的。参照完整性要求关系中不允许引用不存在的实体,目的是保证数据的一致性。对于有参照完整性关系的两张表,在进行数据插入、更新、删除的过程中,系统都会将被修改表格与另一张对应表格进行对照,从而阻止不正确的数据操作。参照完整性又称引用完整性,属于表间规则。

2.参照完整性规则是什么?​

答:若某一属性或属性组F是基本表R(关系)的外键,它与另一个基本表S(或本表)的主键相对应,则对于基本表R中的每个元组在属性组F上的值必须为: (1)空值,即属性组F的每个属性值均为空值; (2)S基本表中某个元组的主键值。

即参照关系中的属性值必须能够在被参照关系中找到或者取空值,否则不符合数据库的语义。在实际操作时,通过参照引用相互关联的另一个表中的数据来检查对表的数据操作是否正确,不正确则拒绝操作。

3.什么是外键?外键的作用是什么?​

答:如果公共关键字在一个关系表中是主关键字,那么这个公共关键字被称为另一个关系表的外键。如果表A中的主键是表B中的字段,则该字段称为表B的外键;表A称为主表,表B称为从表。

外键的作用是保持数据一致性、完整性,主要目的是控制存储在外键表中的数据,使两张表形成关联。外键只能引用外表中列的值或使用空值。一个数据表中可以有多个外键。

4.参照完整性的引用关系有哪几种情况?​

答:(1)同一关系:R和S可以是同一个关系。例如学生表(学号,姓名,性别,专业,地址,班长)中,"学号"是主键,"班长"属性引用本关系的"学号"属性。班长可以取空值(尚未选出班长)或本表中某个学生的学号值。

(2)两个关系间:如学生成绩表(学号,专业号,教师号,成绩)和课程表(专业号,专业名,课时)之间存在引用关系,学生成绩关系引用了课程关系的主键"专业号","专业号"是学生成绩关系的外键。

(3)两个以上的关系:如学生表、课程表、学生成绩表三个关系之间存在引用关系,学生成绩表中的"学号"引用学生表的主键,"专业号"引用课程表的主键。

5.复合主键与参照完整性如何结合?​

答:在学生成绩表(学号,专业号,教师号,成绩)中,"学号"和"专业号"都是外键,只有"学号"和"专业号"联合起来才能确定学生成绩的关系,所以(学号,专业号)是成绩关系的复合主键。虽然按照参照完整性外键可以取空值,但由于实体完整性要求复合主键中的每个属性均不能取空值,所以成绩关系中的"学号"和"专业号"属性实际上只能取被参照关系中已经存在的主键值。

6.如何在创建表时添加外键约束?​

答:在CREATE TABLE语句中使用FOREIGN KEY子句,语法格式为:

CREATE TABLE 表名(
列名 数据类型,
...
[CONSTRAINT][外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
)

例如:

CREATE TABLE STUDENT_3(stuid INT PRIMARY KEY, sname VARCHAR(20), ssex VARCHAR(5), saddre VARCHAR(20));
CREATE TABLE STUDENT_4(id int, sc varchar(10), scls varchar(10), FOREIGN KEY(id) REFERENCES STUDENT_3(stuid));

7.如何为已创建的表添加和删除外键约束?​

答:添加外键约束:

ALTER TABLE 表名 ADD [CONSTRAINT 外键名称] FOREIGN KEY(外键字段名称) REFERENCES 主表名称(主表列名称)

例如:ALTER TABLE score ADD CONSTRAINT fk_sc_stu FOREIGN KEY(Studid) REFERENCES student(Studid);

删除外键约束:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称

例如:ALTER TABLE score DROP FOREIGN KEY fk_sc_stu;

8.设置外键约束时需要注意什么?​

答:(1)外键约束设置时既可以添加外键名称,也可以不添加。添加名称后便于管理和删除。 (2)外键引用的主表字段必须是主键。 (3)外键不仅能建立两个表的连接,还可以建立两个以上表的连接。 (4)删除外键约束时需要使用外键名称(如果创建时没有命名,系统会自动生成一个名称)。