青岛品牌网站制作,wordpress设置首页关键词,做国外的网站,辽宁金帝建设集团网站MySQL高级–范式与反范式
1. 背景
首先让我们来简单了解什么是范式与反范式 如下有部门表#xff08;包含#xff1a;雇员、部门、部门领导#xff09;
EMPLOYEEDEPARTMENTHEADJonesAccountingJonesSmithEngineeringSmithBrownAccountingJonesGreenEngineeringSmith
我们…MySQL高级–范式与反范式
1. 背景
首先让我们来简单了解什么是范式与反范式 如下有部门表包含雇员、部门、部门领导
EMPLOYEEDEPARTMENTHEADJonesAccountingJonesSmithEngineeringSmithBrownAccountingJonesGreenEngineeringSmith
我们知道如果Brown接任Accounting的部门领导那么可能会导致后面数据变化时比如“Jones”这一行显示的部门领导与“Brown”的就不一样了那时就不能知道是哪个是对的了此外如果我们删除了Accounting部门的雇员我们就会因此失去关于Accounting部门的本身的记录了。因此我们需要对这个表进行范式化这里我们将把这个表拆成两个表
雇员表
EMPLOYEEDEPARTMENTJonesAccountingSmithEngineeringBrownAccountingGreenEngineering
部门表
DEPARTMENTHEADAccountingJonesEngineeringSmithAccountingJonesEngineeringSmith
范式–有三种 1数据表示二维表每一项都不可分割 2仅在组合主键时存在消除函数依赖 3消除传递依赖 不难发现这两张表符合第二范式在这里我们使用名字来作为主键
2. 范式的优点
1范式的更新操作比反范式的要快 2如果表能很好的被范式化的话说明表的数据比较少或没有重复的数据 3范式的表通常比较小可以很好的放在内存中执行会更快。 4很少有多余的数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句。还是前面的例子在非范式化的结构中必须使用DISTINCT或者GROUP BY才能获得一份唯一的部门列表但是如果部门(DEPARTMENT)是一张单独的表则只需要简单的查询这张表就行了。
3. 反范式的优点
1反范式化的schema因为所有数据都在一张表中可以很好地避免关联。 2如果不需要关联表则对大部分查询最差的情况——即使表没有使用索引——是全表扫描。当数据比较大时这可能比多表关联还要要快得多因为这样避免了随机I/O全表扫描基本上是顺序I/O