简单理解数据库设计范式
设计数据表的时候使用数据库设计范式可以保证数据库设计简洁高效。
同时避免以下错误:
操作异常:
- 插入异常:想要插入数据,结果因为表的设计,不能成功插入
- 更新异常:想要更新数据,结果更新的工作量大,还容易出错
- 删除异常:在删除数据的同时,将不该删除的数据也删除了
数据冗余:相同的数据在多个地方出现,或者表中的某个列可以通过多个列计算得到;
常见的数据库范式
第一范式:
强调列的原子性。列属性不能再分。
第二范式:
在第一范式的基础上,要求:没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
例:
订单条目表:[orderItem](orderID,productID,quantity,productName...)
表中orderID和productID是主键,其余还有quantity(数量)和productName(产品名称)
quantity(该订单商品数量)完全依赖于主键,但是productName(产品名称)只依赖于productID;所以不符合第二范式;
可以将原表拆分:[orderItem](orderID,productID,quantity) 和 [product](productID,productName...)
这样可以消除原表中productName多次重复的情况
第三范式:
在第二范式的基础上,要求:任何非主属性不依赖于其他非主属性;就是说非主属性之间不能存在传递依赖;
例:
订单表:[orders](orderID,receiverAddress,receiverName,ordertime,user_id)
表中的属性都完全依赖于主键,符合第二范式,但其中的(receiverAddress,receiverName)也直接依赖于user_id;非主属性之间存在传递依赖,这就不满足第三范式;
如果要让其满足第三范式,可以再创建一个customer表即可, 两张表 :
orders(orderID,ordertime,user_id)
customer(user_id,receiverAddress,receiverName)
还可以参考:
https://www.cnblogs.com/CareySon/archive/2010/02/16/1668803.html
https://blog.csdn.net/Dream_angel_Z/article/details/45175621
posted on 2020-07-15 16:27 passionConstant 阅读(84) 评论(0) 编辑 收藏 举报