博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 不用外键的话,如何让表起来关联呢?
阅读量:6833 次
发布时间:2019-06-26

本文共 827 字,大约阅读时间需要 2 分钟。

hot3.png

最近在设计一个户外APP的数据库,在外键设计上有点纠结,用还是不用,考虑了再三,还是不用,

那么如何表之间的关联了。只能在字段名上做文章了。

比如在用户表里面的ID,最好写成userId

与之关联的相册表里面对应一个userId即可实现关联

104502_tNqr_855386.png

参考1:

表的关联,只是一种逻辑概念,本并不需要进行物理上的“硬绑定”,而且你所期望的关联,其实只是其数据上存在一定的联系而已,而这种联系实际上是在设计之初就定义好的固有逻辑。

所以在业务代码中实现的时候,只要按照设计之初的这种固有关联逻辑来“存/取”数据即可,并不需要在数据库层面进行“硬绑定”,因为在数据库层面通过使用外键的方式进行“硬绑定”,会带来很多额外的资源消耗来进行一致性和完整性校验,即使很多时候我们并不需要这个校验。
所以一般不建议在数据库中使用外键约束来保证数据的一致性和完整性。

参考2:

首先关于外键的作用与使用场景:

1.作用:通过数据库提供的外键功能,进行数据完整性和一致性的维护,避免借助外部力量维护;
2.使用场景:若是高并发大流量事务场景,使用外键可能容易造成死锁,以及数据库资源更快出现瓶颈,所以一般互联网行业不建议使用,多使用再企业内部,比如ERP软件,早期的MIS系统等
关于如何体现表与表之间的关联性和如何维护数据完整性和一致性:
1.关联性:那就是设计数据库的时候,要让所有人知道表与表之间的通过那个字段关联起来,所以字段名称命名上会做一些文章
2. 如何维护数据完整性和一致性:通过外部程序的力量,启用事务的方式,比如:
START TRANSACTION;
UPDATE A SET co1=** ...;
UPDATE B SET A_co1=**...;
COMMIT;
注释:假设场景 A表的col1变成某值之后,B表中的A_col1字段也必须修改为对应的值...

转载于:https://my.oschina.net/u/855386/blog/352103

你可能感兴趣的文章
关于php的mysqlnd驱动
查看>>
Response
查看>>
人人都看得懂的正则表达式教程
查看>>
python matplotlib 绘图
查看>>
Uncaught RangeError: Maximum call stack size exceeded解决思路
查看>>
运用.net core配合VS 2015制作nuget包
查看>>
JSP三大指令 /9大内置对象 /Javabean / EL
查看>>
WebPack系列:Webpack编译的代码如何在tomcat中使用时静态资源路径不对的问题如何解决...
查看>>
《HelloGitHub》之GitHub Bot
查看>>
node.js常见的一些错误信息
查看>>
[LintCode] Longest Increasing Continuous Subsequence 最长连续递增子序列
查看>>
华为的端口范围配置命令
查看>>
CVE-2014-4114 和 CVE-2014-3566
查看>>
数学图形(1.29) cochleoid曲线
查看>>
Claims-Based Authentication and Authorization
查看>>
Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题...
查看>>
计算机的鼻祖---差分机的由来
查看>>
责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
查看>>
Maven聚合项目在eclipse中显示没有层次
查看>>
牛人博客
查看>>