1NF 2NF 3NF BCNF

1NF

  • 定义:
    • 确保每列的原子性.
    • 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式.
  • 举例:
    • 顾客表(姓名、编号、地址、……)其中”地址”列还可以细分为国家、省、市、区等。

2NF

  • 定义:
    • 在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关.
    • 如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖(直接和间接)于该主键,则满足第二范式.
  • 举例:
    • (订单编号,商品编号,商品名称,数量,单位,价格,客户,所属单位,联系方式)
    • 这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。
    • 所以应该将这个表拆成3个,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中。如下所示:
      • (订单编号,客户,所属单位,联系方式)
      • (订单编号,商品编号,数量)
      • (商品编号,商品名称,单位,价格)

3NF

  • 定义:
    • 在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关.
    • 如果一个关系满足第二范式,并且除了主键以外的其它列都不依赖于主键外的列,则满足第三范式.
  • 举例:
    • (订单编号,订单项目,负责人,客户名称,所属单位,联系方式)
    • 这个表中是以订单编号作为主键。而所属单位,联系方式这些是客户的属性,依赖于客户,与主键间接相关,所以不满足3NF.
    • 所以应该将这个表拆成2个,把客户信息分离到另一个表中。如下所示:
      • (订单编号,订单项目,负责人,客户编号)
      • (客户编号,客户名称,所属单位,联系方式)

BCNF 鲍依斯-科得范式

  • 定义:
    • 在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。
  • 举例:
    • 假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:
      • (仓库ID, 存储物品ID) →(管理员ID, 数量)
      • (管理员ID, 存储物品ID) → (仓库ID, 数量)
    • 所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
      • (仓库ID) → (管理员ID)
      • (管理员ID) → (仓库ID)
    • 即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值