通俗讲解一下三范式并且以表格举例
时间: 2023-12-17 20:24:28 浏览: 66
三范式是关系型数据库设计中的一种规范化标准,它将关系型数据分解为更小的、更规范化的表,以减少数据冗余和提高数据一致性。三范式的具体要求如下:
1. 第一范式(1NF):表中的每个属性都是原子性的,即不可再分解。
2. 第二范式(2NF):表中的非主键属性必须完全依赖于主键,而不能依赖于主键的一部分。
3. 第三范式(3NF):表中的非主键属性不能相互依赖,即不能存在传递依赖。
下面以一个订单管理系统的数据库为例,演示三范式的应用:
订单表(Order)
订单号(OrderID) 主键
客户号(CustomerID)
客户姓名(CustomerName)
客户地址(CustomerAddress)
订单日期(OrderDate)
订单总金额(TotalAmount)
上述订单表不符合第一范式,因为客户信息包含在订单表中,客户信息可以被分解为一个独立的客户表。
客户表(Customer)
客户号(CustomerID) 主键
客户姓名(CustomerName)
客户地址(CustomerAddress)
订单表(Order)
订单号(OrderID) 主键
客户号(CustomerID) 外键
订单日期(OrderDate)
订单总金额(TotalAmount)
上述表符合第一范式。但它仍然不符合第二范式,因为订单表中的总金额属性依赖于订单号和商品价格两个属性,而不是完全依赖于订单号。为了符合第二范式,我们需要将订单项分解为独立的表。
订单表(Order)
订单号(OrderID) 主键
客户号(CustomerID) 外键
订单日期(OrderDate)
订单项表(OrderItem)
订单号(OrderID) 外键
商品编号(ProductID) 外键
商品价格(ProductPrice)
商品数量(ProductQuantity)
上述表符合第二范式。但它仍然不符合第三范式,因为订单项表中的商品价格依赖于商品编号,而商品编号又依赖于订单号。为了符合第三范式,我们需要将商品信息分解为独立的商品表。
订单表(Order)
订单号(OrderID) 主键
客户号(CustomerID) 外键
订单日期(OrderDate)
订单项表(OrderItem)
订单号(OrderID) 外键
商品编号(ProductID) 外键
商品数量(ProductQuantity)
商品表(Product)
商品编号(ProductID) 主键
商品名称(ProductName)
商品价格(ProductPrice)
上述表符合第三范式,也就是符合三范式的设计标准。
阅读全文