数据库建表三大范式

目录

起因

原因

什么是三大范式?

1.第一范式(1NF): 列不可再分

2.第二范式(2NF):属性完全依赖于主键

3.第三范式(3NF):属性不依赖于其它非主属性    属性直接依赖于主键

总结:


起因

        最近在项目中需要设计表及表关系,没啥灵感,就找下经典的建表三大范式设计。

原因

        站在前辈或巨人的最佳实践上来汲取营养,设计更好、更高效的数据库表结构和表关系。

什么是三大范式?

        数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、

        结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。

1.第一范式(1NF): 列不可再分


        每一列属性都是不可再分的属性值,确保每一列的原子性。

        两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。

        举例子:姓名

        正确示例: 在中国习惯是姓在前,名在后,名字不拆分也是可以的。

        错误示例:国外习惯是名在前,姓在后,而且名字几个英文,通常分割来标示,

        这时用一个字段存储满足需求而不满足性能要求。

2.第二范式(2NF):属性完全依赖于主键


        第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

        第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。

        为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。

        这个唯一属性列被称为主键。

        PS: 第二范式本质 指确保表的每记录有唯一标识,而这个唯一标识通常称为主键,

        如果存在多个唯一标识并且有非主键字段存在关联,这个情况建议拆为多张表或中间表。

3.第三范式(3NF):属性不依赖于其它非主属性    属性直接依赖于主键

        数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。

        像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的。

        

        比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

        这样一个表结构,就存在上述关系。

        学号--> 所在院校 --> (院校地址,院校电话)

        

        这样的表结构,我们应该拆开来,如下。

        (学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

          PS 第三范式:指该表非主键字段都要与主键相关来考虑问题,

        这样为了更好映射真实世界、避免使用一张表标识世界上所有的事物数据。

总结:

        三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。

        如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。

        所以不能一味的去追求范式建立数据库。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值