数据库中的三大范式

目录

一.概述

二.第一范式(1NF)

三.第二范式 (2NF)

 四.第三范式 (3NF)


一.概述

        为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系型数据库中的关系必须满足一定的要求,即满足不同的范式。

        目前关系型数据库有六种范式,分别为:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。要求最低的范式是第一范式。第二范式在第一范式的基础上又进一步的添加了要求,其余范式依次类推。

        一般说来,数据库只需满足第三范式就行了,而通常我们用的最多的就是第一范式、第二范式、第三范式,也就是接下来要讲的“三大范式”。

二.第一范式(1NF)

        概念:第一范式用来确保每列(每个属性)的原子性,要求每列(每个元素)都是最小不可再分的最小数据单元->>{具有原子性}

        举个🌰:

客人住宿信息表 (姓名,客人编号,地址,客房号,客房描述,客房类型,客房状态,床位数,入住人数,价格)

        其中地址又可以进一步的划分为国家省、市、区等。将“地址”列拆分,使得每列都是具备原子性,则下列写法符合第一范式:

客人住宿信息表(姓名,客人编号,国家,省,市,区,门牌号,客房号,客房描述,客房类型,客房状态,床位数,入住人数,价格)

三.第二范式 (2NF)

         概念:第二范式是在第一范式的基础上要求每列(每个属性)都与主键相关,也就是要求实体的唯一性。如果一个表满足第一范式并且除去主键额的其余属性(列)都完全依赖于该主键,那么该表就满足了第二范式。

        还是以客人住宿信息表为🌰,客人住宿信息表中的数据主要用来描述客人住宿信息,所以该表主键为(客人编号客房号),其中“姓名”、“地址”依赖于“客人编号”。“客房描述”、 “客房类型”、“客房状态”、“床位数”、“入住人数”、“价格”都依赖于“客房号”。所以使用第二范式后客人住宿信息表就会拆分为两张表:

 客人信息表(客人编号,姓名,地址,客房号,入住时间,结账日期,押金,总金额),主键为“客人编号”列,其他列都全部依赖于主键列

客房信息表(客房号,客房描述,客房类型,客房状态,床位数,入住人数,价格),主键为“客房号”列,其他列都全部依赖于主键列

 四.第三范式 (3NF)

        概念:第三范式指的是在第二范式的基础上更近一层,确保每列都与主键直接相关,并不是间接相关,即限制列的冗余性。如果一个关系满足第二范式,并且除了主键以外的其他列都依赖于主键列,列和列之间不存在相互依赖关系,则满足第三范式。

        以第二范式中的客房信息表为🌰,每列都和主键列“客房号”相关,再细看会发现:"床位数” 、“价格”依赖于“客房类型”,“客房类型”依赖于“客房号”,“床位数”、“价格”依赖于“客房号”。所以为了能满足第三范式客房信息表又可以分为两张表:

客房表(客房号,客房描述,客房类型编号,客房状态,入住人数)

客房类型表(客房类型编号,客房类型名称,床位数,价格)


如果读者学到了就留个三连吧,小编在这里感谢大家,并且会一直为大家更新知识哦! 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ButNullPointer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值