数据库三范式
来源:互联网 发布:java httpconnection 编辑:程序博客网 时间:2024/06/05 14:59
数据库三范式
1.原子性 字段不可再分,否则就不是关系型数据库;
比如:有这样一个表:联系人表(姓名,性别,电话),如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构的设计就没有达到原子性的要求.要符合第一范式,必须把电话这一列拆分成公司电话和家庭电话这两列.此时联系人表(姓名,性别,公司电话,家庭电话).
2.唯一性 一个表只说明一个事物,要有主键要求其他字段都依赖于主键;
比如:这样一个表:OrderDetail(OrderID,ProductID,UnitPrice,Discount,Quantitly,ProductName).因为我们知道在一个订单中可以订购多重产品,所以单单一个OrderID是不足以成为主键的,主键应该是OrderID和ProductID.显然,Discount(折扣),Quantitly(数量)完全依赖于主键OrderID,而UnPrice,ProductName只依赖于ProductID.所以OrderDetail表不符合数据库的第二范式.不符合第二范式容易产生冗余数据.此时可以把OrderDetail表拆分为:OrderDetail(OrderID,ProductID,Discount,Quantitly)和Product(ProductID,UnitPrice,ProductName)来消除原订单中UnitPrice,ProductName多次重复的情况
3.每列都与主键有直接的关系,不存在传递依赖
Order表(OrderID,OrderDate,CustomerID,CustomerID,CustomerName,CustomerAddr,CustomerCity)等非主键都依赖于OrderID,所以符合第二范式,不过问题是CustomerName,CustomerAddr,CustomerCity直接依赖的是CustomerID(非主键列),而不是直接依赖于主键,他是通过传递才依赖主键的,所以不符合第三范式.通过拆分Order为Order(OrderID,OrderDate,CustomerID)和Customer(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到第三范式.
- 数据库范式 三范式
- 回味数据库三范式
- 数据库设计三范式
- 数据库三范式
- 数据库三大范式
- 数据库三范式
- 数据库的三范式
- 数据库设计三范式
- 数据库三范式
- 【学习】数据库三范式
- 数据库设计三范式
- 数据库三大范式
- SQL 数据库三范式
- 数据库三范式
- 数据库三范式
- 数据库设计三范式
- 数据库三大范式
- 数据库三大范式
- 生产环境下的大数据组件版本升级
- 安卓的滑动事件
- 纪念校招第一次面试夭折
- butterKnife注解框架
- WHU暑假集训总结&&新学期展望
- 数据库三范式
- SSM(十二) dubbo日志插件
- 如何看技术类型的书籍,并从中学到自己想要的知识?
- jQuery控制单选与复选按钮
- sensor的skipping and binning 模式
- SSM(十四) 基于annotation的http防重插件
- 湖南省第十三届省赛总结
- 通俗易懂的解释什么是CDN
- appium自动化获取信息命令集合