数据库之主码和外码

目录

1.域

2.笛卡儿积

3.关系

主码

外码


想要明白主码和外码的概念前,需要先对域和笛卡儿积概念有一个彻底的理解。请阅读的童靴务必耐心~O(∩_∩)O

1.域

定义:域是一组 具有相同数据类型值集合。(域就是集合,不过集合里的元素是相同的数据类型)

例如,自然数、整数、实数、大于一小于一百的数、{男,女}都可以是域。

2.笛卡儿积

笛卡儿积是 域上 的一种集合运算。

定义:给定一组域D1,D2,D3···,Dn,允许其中某些域是相同的,D1,D2,D3,···,Dn的笛卡儿积定义为

           D1×D2×D3×···×Dn={(d1,d2,d3,···,dn) | di∈Di ,i=1,2,···,n}

大白话就是从每个域中抽出一个元素放在一起,每一个(d1,d2,d3,···,dn) 称之为一个元组

这样说还是比较抽象,举一个例子: 

                                  

3.关系

定义: D1×D2×D3×···×Dn 的子集叫做在域D1,D2,D3,···,Dn上的 关系,表示为 R(D1,D2,D3,···,Dn)。

            (笛卡儿积中若干个元组的集合就是关系)

主码

若关系中的某一个属性组的值能唯一地标识一个元组,而其子集则不能,则称该属性组为候选码(candidate key)

若一个关系中有多个候选码,则选定其中一个为主码。例如学生的学号就可以作为一个主码,因为它是唯一的。

一个关系可以没有主码,但是设置一个主码的话对数据库查询效率会高一些。

主码不一定是只有一个属性,主码可以由一个或者多个属性组成。主码是候选码之一。

考虑主码的时候考虑的是属性的唯一性,即该属性的值不会重复,如果重复了就无法唯一标识整个元组。

主码和设置非空的关系是什么?

主码的要求是:非空、唯一性。

而设置某个属性:非空仅仅是不允许输入空值,但却可以重复。

 

外码(外键)

那么什么是外码呢?

如果一个关系中的一个属性(该属性不能是候选码)是另外一个关系中的主码则这个属性为外码。

外码的值要么为空,要么要为其对应的主码中的一个值。

 

那么外键的作用是什么呢?

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。

使两张表形成关联,外键只能引用外表中的列的值或使用空值。

 

阻止执行(情况一):

1、从表插入新行,其外键值不是主表的主键值便阻止插入;

2、从表修改外键值,新值不是主表的主键值便阻止修改;

3、主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);

4、主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。

级联执行(情况二):

1、主表删除行,连带从表的相关行一起删除;

2、主表修改主键值,连带从表相关行的外键值一起修改。

       两种方法提供给用户选择。无论选取哪种方法,从表里都不会有多余行。

       从另一个角度理解,用拒绝同一事物在从表中的标志与主表不一致。

 

你可能感兴趣的:(数据库)