数据库中的外键是什么意思?

数据库中的外键是什么意思?,第1张

外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在 *** 作上的一致性与完整性。

优点:

精简关联数据,减少数据冗余

避免后期对大量冗余处理的额外运维 *** 作。

降低应用代码复杂性,减少了额外的异常处理

相关数据管理全由数据库端处理。

增加文档的可读性

特别是在表设计开始,绘制 ER 图的时候,逻辑简单明了,可读性非常强。

缺点:

性能压力

外键一般会存在级联功能,级联更新,级联删除等等。在海量数据场景,造成很大的性能压力。比如插入一条新记录,如果插入记录的表有 10 个外键,那势必要对关联的 10 张表逐一检查插入的记录是否合理,延误了正常插入的记录时间。并且父表的更新会连带子表加上相关的锁。

其他功能的灵活性不佳

比如,表结构的更新等。

外键就是指另外表中的主键

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

使用原则:

1、 为关联字段创建外键。

2、 所有的键都必须唯一。

3、避免使用复合键。

4、外键总是关联唯一的键字段。

主外键的存在是依托两个实体之间的关系而存在的;

比如班级学生的关系:

一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;

那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢?

因为,你想一想班级表内如果放学生那么记录可能就是这样:

1班ID 1班 xx同学id

1班ID 1班 xx同学id

..

这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的;

下面简单给你讲下大概建成的表结构

--建班级表

create table class(

classid int primary key,--定义班级ID为主键

classname varchar(15)

)

--建学生表

create table students(

studentid int primary key,--定义学生ID为主键

classid int ,--外键值,跟班级表classid 属性类型相同

stuname varchar(20),--学生姓名

---定义外键

foreign key(classid) references class(classid) --本表classid是基于class表classid的外键

)

---------

如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在,也就是说外键必须要主键存在的时候才能创建,例如:

--在班级表为空的情况往学生表插入一条记录是不允许的:

insert into students(studentid,classid,stuname)values(1,1,'小明')

系统会抛出异常提示主键表班级表内班级ID不存在这样是不允许插入的;

必须要先往班级表内插入一条记录:

insert into class(classid,classname)values(1,'一班')

后才能执行插入前面一条往学生表插入信息的语句..

--------------可了解一些了?真累啊.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6772441.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存