SQL关系模型之外键

简介: 引入我们在之前的文章中了解了sql关系数据库中非常重要的概念——关系模型,并具体了解了控制表中关系的概念之一“主键”。而关系数据库的“关系”可不仅仅局限在表内。表与表的关系才是关系数据库的精髓。而负责控制表与表关系的工具是什么呢?我们引入了“外键”的概念。

引入


我们在之前的文章中了解了sql关系数据库中非常重要的概念——关系模型,并具体了解了控制表中关系的概念之一“主键”。

而关系数据库的“关系”可不仅仅局限在表内。表与表的关系才是关系数据库的精髓。而负责控制表与表关系的工具是什么呢?我们引入了“外键”的概念。


1.外键由来


为了方便举例,我们先假设出两个表:

表1:S

SNo SN
S1 张三
S2 李四
……

表2:C

CNo CN
C1 高三一班
C2 高三二班
……

不难理解,表1代表学生的个人信息,这里是简单的学号与姓名对应。表2代表班级信息,这里是班级号与班级名的一一对应关系。

那么我们此时希望知道各个同学分别对应哪个班级,也就是建立学生与班级的关系,此时应该怎么办呢?

分析得出,多个学生可以对应一个班级,我们在S表中加入一列CNo可以表达这种关系:

| SNo | CNo | SN | | --- | --- | | S1 | C1 | 张三 | | S2 | C1 | 李四 | | S3 | C2 | 王五 | |……|

这样哪位学生在哪个班级就一目了然了。我们于是把S.CNo这样把数据与另外一张表关联起来的字段称为外键


2.外键的设置


那么问题来了,这个外键只是取个和其他表有关的名字吗?如果仅仅只是在意义上建立表与表的关系,那其实外键也不过只能理解成一种数据库管理技巧。

事实上,外键作为一个重要的概念,是要通过定义外键约束实现的:

(终于可以不把外键说成是重要的“概念”而是重要的“约束”了……之前是为了不剧透有意为之,循序渐进地写文可真难T^T)

ALTER TABLE S
ADD CONSTRAINT CNo
FOREIGN KEY (C_No)
REFERENCES C (CNo);

上面的代码就是我们设置一个外键所需要的全部代码了。

第一行的alter table就是指定我们需要条件约束的表,这里我们需要添加的约束是S表。

第二行add constraint就是我们添加的约束名称了,这里的约束名称可以任意取,但是注意不要与意义相差太远,维护起来会很麻烦。

第三行的foreign key自然就是给表内出现的外键命名了。配合references指定外键关联的字段是哪个表中的哪个字段。

注意,外键本质是约束,不是添加的一个单独的字段。我们在设置外键之前需要先给指定的表添加一个代表外键功能的字段。比如上面的C_No就需要提前创建好,然后再用约束的办法赋给它“法定意义”上的“外键”身份

有了这个外键,关系数据库便不会有无效数据插入,比如这里我们如果设置了C_No为班级外键,那我们就无法在学生表中插入带有班级表中不存在的班级号的数据了


3.外键的删除


其实外键约束虽然在逻辑上很重要,但是实际上它是一个不那么常用的约束。因为它会大大降低数据库的性能。而且我们在插入数据的时候如果能保证逻辑的正确性,就不需要特别设置这个外键了。

那么我们之前已经设置的那个CNo外键,如果不需要它了,怎么把它删掉呢?当然也是用约束的方法——

ALTER TABLE S
DROP FOREIGN KEY CNo;

这样就把法定身份的“外键”给删除了。但是注意哈,这个字段是不会删除的哦~也就是C_No这列还是有的。逻辑上的外键还是存在的


相关文章
|
5月前
|
SQL 测试技术 项目管理
轻松学习SQL外键约束的核心原理和实用技巧
轻松学习SQL外键约束的核心原理和实用技巧
67 0
|
11月前
|
SQL Oracle 关系型数据库
SQL Developer生成Oracle数据库的关系模型(ER图)
SQL Developer生成Oracle数据库的关系模型(ER图)
390 0
|
10月前
|
关系型数据库 MySQL 数据库
Mysql数据库 8.SQL语言 外键约束
Mysql数据库 8.SQL语言 外键约束
80 0
|
SQL 数据挖掘 测试技术
软件测试|SQL分类大概有几种?SQL中什么是主键和外键,它们之间的区别是什么?
软件测试|SQL分类大概有几种?SQL中什么是主键和外键,它们之间的区别是什么?
239 0
|
SQL 数据库
编写SQL为数据库某一字段添加外键约束
编写SQL为数据库某一字段添加外键约束
102 0
编写SQL为数据库某一字段添加外键约束
|
SQL 数据库
数据库原理与应用(SQL Server)教程 主键、外键以及联合主键、复合主键和设置种子数目和增量
数据库原理与应用(SQL Server)教程 主键、外键以及联合主键、复合主键和设置种子数目和增量
数据库原理与应用(SQL Server)教程 主键、外键以及联合主键、复合主键和设置种子数目和增量
|
SQL 算法 数据库
SQL关系模型之主键
引入 上期我们介绍了关系模型和关系数据库,那么这个“关系”到底是由谁来决定的呢?难道我处理数据的时候还要看某个值原本的意义吗? 笔者认为一般来说,数据库的使用者应当对数据有一定的认知,但是如果所谓的数据关系是靠使用者的理解来自行定义,恐怕有失严谨。 毕竟换个人操作,理解就有可能不一样嘛,那关系数据库各个表的关系就随之变化了?显然不现实。 事实上,我们的关系数据库中,关系是由“主键”和“外键”来维护的。今天我们就主要来看看主键——
|
SQL 数据库
SQL关系模型与关系数据库
前言 回忆一下我们之前了解过的,SQL语言控制的数据库是建立在哪个数据模型上的? ——答案很显然,是“关系模型”。SQL是访问关系数据库的计算机标准语言,而关系数据库正是建立在各系模型上的。
|
SQL Go 数据库
MS SQL巡检系列——检查外键字段是否缺少索引
原文:MS SQL巡检系列——检查外键字段是否缺少索引 前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的。一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方面,网上关于MS SQL巡检方面的资料好像也不是特别多。
854 0