关于数据库中FK的简单理解以及应用


问题来源:思考如果有两张表,应该以什么样的方式将两者关联起来?直接用两个表中的字段进行关联,还是使用第三张关系表进行关联?

说明:FK(foreign key)、PK(primary key)

(注:下面提到的:“一对一”、“一对多”、“多对一”,是指一个表的记录只能与另一个表的一条记录连接;或者是一个表的记录与另一个表的多条记录连接)
查询之前,先要了解 表之间的关系


理解:

如果两个表之间的关系涉及一对多,或者多对一,肯定会有FK
即便没有显示声明FK,也会有一个字段起到FK的作用;

如果当时设计是一对多,或者多对一,就可以利用FK关联
但是大部分情况,我们是不会显示声明FK的;

如果两个表之间的关系是多对多,中间必然会有 “关系表”(例如“教师-学生关系表”,教师表和学生表的关系)
这个时候,查询时,中间的“关系表”起到关联中介的作用。

总结:
如果两张表是:“一对多”,或者“多对一”的关系,那么可以考虑使用 FK 进行关联两张表;
如果两张表是:“多对多”的关系,那么就会需要使用到第三张“关系表”来进行关联;

举个例子:
现有一个新系统,一个用户只允许有一个角色,一个角色可以对应多个用户,(分别对应用户表,角色表)
这个时候,FK应该在哪个表上?
FK应该在 角色表上; FK设定的重要原则:FK必然是另一个表的PK的映射。(做FK的不一定是PK字段)

FK 的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作。


---- 还有好多的不懂之处,后续知道了再补充。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值