数据库逻辑模型建立的三范式

在设计数据库时,确保数据模型符合三范式(1NF、2NF、3NF)是至关重要的。三范式的目的是减少数据冗余和避免更新异常。下面通过例子说明三范式及其应用。

第一范式(1NF)

定义

  • 第一范式要求数据表的每一列都必须是原子的,即每一列都只能包含单一的值,而不能是集合、数组或多个值。

例子: 考虑一个学生选课表 StudentCourse

StudentIDStudentNameCourses
1AliceMath, Physics, Chemistry
2BobMath, Biology

在这个表中,Courses 列包含多个课程,这不符合第一范式。要满足1NF,我们应该将其分解为:

StudentIDStudentNameCourse
1AliceMath
1AlicePhysics
1AliceChemistry
2BobMath
2BobBiology
第二范式(2NF)

定义

  • 第二范式要求数据表必须满足第一范式,并且所有非主键属性必须完全依赖于主键。对于有复合主键的表,非主键属性必须依赖于整个复合主键,而不能仅仅依赖于主键的一部分。

复合主键:复合主键是由多个字段组成的主键,用来唯一标识表中的每一条记录。

例子: 考虑一个订单表 OrderDetail

OrderIDProductIDProductNameQuantityPrice
1101Widget A1020
1102Widget B515
2101Widget A820

在这个表中,复合主键是 (OrderID, ProductID)ProductName 仅依赖于 ProductID,而不是整个复合主键 (OrderID, ProductID)。因此,ProductName 是部分依赖,导致该表不符合第二范式。

符合第二范式的表

  1. 订单表 Order

    OrderIDOrderDate
    12024-08-01
    22024-08-02
  2. 产品表 Product

    ProductIDProductNamePrice
    101Widget A20
    102Widget B15
  3. 订单明细表 OrderDetail

    OrderIDProductIDQuantity
    110110
    11025
    21018
第三范式(3NF)

定义

  • 第三范式要求数据表必须满足第二范式,并且所有非主键属性必须直接依赖于主键,而不是传递依赖。传递依赖指的是非主键属性依赖于主键的一部分,而主键的其他部分又依赖于这个非主键属性。

主键:主键是用于唯一标识表中每一条记录的字段(或字段组合)。

例子: 考虑一个员工表 Employee

EmployeeIDNameDepartmentIDDepartmentName
1Alice10HR
2Bob20IT

在这个表中,EmployeeID 是主键。DepartmentName 依赖于 DepartmentID,而 DepartmentID 依赖于 EmployeeID。所以 DepartmentName 是通过 DepartmentID 间接依赖于 EmployeeID,这就构成了传递依赖,导致该表不符合第三范式。

符合第三范式的表

  1. 员工表 Employee

    EmployeeIDNameDepartmentID
    1Alice10
    2Bob20
  2. 部门表 Department

    DepartmentIDDepartmentName
    10HR
    20IT

通过分解表格,消除了传递依赖,从而确保了表格符合第三范式。

总结

  • 第一范式(1NF):确保每列都包含单一值。
  • 第二范式(2NF):确保每列完全依赖于主键,特别是对于复合主键。
  • 第三范式(3NF):确保每列直接依赖于主键,消除传递依赖。

通过实现三范式,可以有效地组织数据,减少冗余,避免更新异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值