函数依赖根据依赖属性的不同,可分为 3 种
完全函数依赖
部分函数依赖
传递函数依赖
完全函数依赖(以满足 2NF 的订单表为例)
使用订单编号和用户编号可以决定付款状态,而若只有订单编号,无法决定是哪一个用户创建了订单,只有用户编号,无法决定是哪一个订单。因此,付款状态这个属性函数依赖于(订单编号,用户编号)属性集。
部分函数依赖(以不满足 2NF 的用户表为例)
用户名依赖用户编号,但不依赖订单编号,因此用户名这个属性部分函数依赖于(订单编号,用户编号)属性集。
传递函数依赖(以不满足 3NF 的用户表为例)
享受折扣依赖用户等级,用户等级依赖用户编号,所以享受折扣传递函数依赖于用户编号。
第一范式限定了一个关系模式的所有属性都是不可分的基本数据项以后
第二范式消除了部分函数依赖。
第三范式消除了传递函数依赖。
反范式:是一种逆规范化设计。
目的:主要是为了提高查询效率。
特点:减少数据冗余,降低查询性能。
情景:商品销量可以通过查询订单表中的购买记录计算出来,当需要查询大量商品的销量时,就需要花费许多时间去计算销量。
目的:为了提高查询效率,不必每次查询计算销量。
措施:违反范式的要求,增加一个销量字段,当商品被购买时就增加销量字段。
缺点:容易出现数据不一致的问题。
实际开发中,若选择采取反范式的设计,应该提前评估其可能出现的问题,并准备一套解决方案。
例如,通过存储过程进行操作,定期检查数据的一致性等。
在数据库设计过程中,对于业务复杂、修改频繁的场合,手工绘制 E-R 图显得非常低效,这时可以利用数据建模工具提高效率。
ERwin Data Modeler
Power Designer
MySQL Workbench
官方出品
开源和商业两个版本
支持 Windows 和 Linux 系统
MySQL Workbench 数据建模工具的使用
打开 MySQL Workbench 6.3 CE,执行菜单栏【File】-【New Model】命令创建新模型。
MySQL Workbench 数据建模工具的使用
EER 图是指增强版的 E-R 图。
更加适合专业人员进行数据建模。
绘制完成后可以直接转换成 SQL。
MySQL Workbench 数据建模工具的使用
Step2:双击 Add Diagram 按钮或执行菜单栏【Model】-【Add Diagram】命令添加 EER 图。
MySQL Workbench 数据建模工具的使用
Step3:双击绘制出来的 table1 或 table2,会出现一个面板。
MySQL Workbench 数据建模工具的使用
Step4:完成 EER 图的编辑后,执行菜单栏【File】-【Export】-【Forward Engineer SQL CREATE Script…】命令导出 SQL。
MySQL Workbench 数据建模工具的使用
软件自动生成的 SQL 与用户手动编写的 SQL 比较:
语法复杂且严谨。
填加 SET 环境配置,防止不同环境差异导致 SQL 无法按照预期执行。
版权声明: 本文为 InfoQ 作者【在即】的原创文章。
原文链接:【http://xie.infoq.cn/article/bf113ea8481ff905a80f6e014】。文章转载请联系作者。
评论