打开我们的数据库
关系图,把所有的表都拖进来了。这里具体的表机构,先不说,到后面做到这块的时候,再去讲解。
官网上的图。表与表之间的关联通过连接线可以看出来。
我们在设计数据库的时候,并没有这样的屋里关系。
外键
外键的好处,数据的完整性,数据的强力执行。
在我们的分布式项目里面。在发并发的情况下,数据库的性能会有相应的影响的,所以数据库的外键移除掉。
分布式的项目,绝大多数都需要热更新的,热更新就是不停机去进行维护。不管是互联网产品,还是一些游戏 手游。大多都会采用热更新的方式。如果数据库有外键,可能会造成新更新的代码 无法运行。 因为要匹配现有的外键,可能要重启服务器。那么这样就达不到热更新的目的了。因为外键是强力执行的。注意点和分布式绝对是冲突的。
降低耦合度:删除了外键,并不是我们不要外键,而是物理的外键,物理的这一层关系我们不需要了。但是逻辑上的话,这样的外键还是存在的。这样子适当的降低了表和表之间的耦合度。
什么叫做物理和逻辑呢?
大型的系统里面都是多个数据库的。分布式的数据库集群,如果说我们有外键关联的话,会导致难以做分库分表。因为耦合度实在是太高了。
假设现在有两张表,用户表和商品表。用户表和商品表假设有外键关联的话。当我们现在要做一个分库,要吧两张表放在两个不同的数据里面,但是他们却有外键关联关系。这个时候就很难去实现了,这仅仅只是一个外键而已。如果说我们的数据库有上百张表。有几十个外键关联的话。这个时候分库分表该怎么做呢?? 难以进行,难以去实现。如果一个互联网项目在前期没有做到很好的控制,就是控制我们的外键关系。当业务上来以后。物理的外键一定会让运维人员欲仙欲死。。所以很多的架构师 数据库DBA 都会弃用数据库的外键。
如果你设计的是传统的小型项目的话,物理的外键存不存在都可以 。
如果你设计的是一个互联网项目,或者是一个大型项目的时候,我们是绝对不能用数据库外键的,一定要为以后的架构多多考虑。
结束