为什么不推荐使用Join
在阿里的Java开发规范手册中,写明“超过三个表禁止使用Join”
难以进行维护,影响代码阅读。复杂的Join查询难以阅读和维护,尤其是在多表连接中需要处理多个连接条件和筛选条件。容易出现逻辑错误,难以排查问题。
索引的设计将变得复杂。为了提高多表Join查询的性能,需要为每个表创建合适的索引,这样也就增加了索引的设计与维护的复杂性。
最主要要的原因在于其Join本身的效率就比较低。MySQL采用循环嵌套的方式来实现关联查询(用第一张表做外循环,第二张表做内循环,外循环的每一套记录跟内循环中的记录作比较,符合条件的则输出)。如果有两张表的join,复杂度最高为O(n^2)。三张表则是O(n^3)。所以当join的表越多,join的效率会呈指数级下降。
对于数据库范式(1NF,2NF,3NF,BCNF)的理解
对于数据库范式(1NF,2NF,3NF,BCNF)的理解
第一范式定义:属于第一范式关系的所有属性不能够再被拆分,即为一张简单的基本表
一个列名智能对应到一列,并且每一列都不可分
复杂表还能继续拆分,不符合第一范式:
符合基本范式的基本表:
第二范式定义:前提是满足第一范式且每个非主属性完全函数依赖于任何一个候选码则关系R为第二范式
什么候选码?
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系中有多个候选码,则选定其中一个为主码。
什么是主属性?
所有候选码的属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。
什么是完全函数依赖?
设R(U)是属性集U上的关系模式,X、Y是U的子集。如果Y函数依赖于X,且对于X的任何一个真子集X’,都有Y不函数依赖于X’,则称Y对X完全函数依赖。记作:如果Y函数依赖于X,但Y不完全函数依赖于X,则称Y对X部分函数依赖。
简单说就是:指不能存在仅依赖于候选键(主属性)的一部分的属性,所以只有一个主属性的表如果符合第一范式就一定符合第二范式。
如何判断是否符合第二范式?
找出数据表中所有的 ...





