数据库设计三范式

在数据库设计时,有一些专门的规则,称为数据库的设计范式,遵守这些规则,就可以创建设计良好的数据库。

 

第一范式(1NF,Normal Formate)

第一范式的目标是确保每列的原子性,如果每列(或者每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

例如,

客人信息表(姓名、客人编号、地址、……)

其中,“地址”列还可以细分为国家、省、市、区等,更多的程序甚至把“姓名”列拆分为“姓”和“名”等。

 

第二范式(2NF)

第二范式在第一范式的基础上更进一层,其目标是确保表中的每列都和主键相关。如果一个关系满足第一范式(1NF),并且除了主键以外的其他列都依赖于该主键,则满足第二范式。

例如:

客户信息表(如房间号、客房描述、客房类型、客房状态、床位数、入住人数、价格等)。

这里将“房间号”设为主键,“客房描述”、“床位数”、“价格”三列都和“房间号”主键列相关,但“客房类型”列和“客房状态”列没有直接关系,几“客房类型”列不依赖于“房间号”,该列应从该表中删除。

将客房信息表结构分解成以下三个表:

客房表(房间号、客房描述、客房类型编号、客房状态编号、床位数、入住人数、价格、……)

客房类型表(客房类型编号、客房类型名称)

客房状态表(客房状态、客房状态名称)

 

第三范式(3NF)

第三范式在第二范式的基础上更进一层,第三范式的目标是确保每列都和主键列直接相关,而不是间接相关。如果一个关系满足第二范式,并且除了主键以外的其他列都只能依赖于主键列,列和列之间不存在相互依赖关系,则满足第三范式(3NF)

初看该表没有问题,满足2NF,每列都和主键列“房间号”相关,再细看会发现“床位数”列和“价格”列也和“客房类型编号”列相关,最后经过传递依赖,“床位数”列、“价格”列和“客房类型名称”列相关。为了满足3NF,应该去掉“床位数”列和“价格”列,将此列放入客房类型表中。

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

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

客房状态表(客房状态、客房状态名称)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值