前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库的范式(第一范式,第二范式,第三范式,BCNF范式)「建议收藏」

数据库的范式(第一范式,第二范式,第三范式,BCNF范式)「建议收藏」

作者头像
全栈程序员站长
发布2022-07-31 14:16:37
1K0
发布2022-07-31 14:16:37
举报

大家好,又见面了,我是你们的朋友全栈君。

在了解范式之前我们先了解下数据库中关于码的概念

1.码

1.1 超码

能够唯一标识元组的某一属性或属性组,任何包含超码的超集也是超码,这里唯一标识元组可以简单的理解为根据某一个字段或几个字段的值,查询出某一行特定的数据

1.2 候选码

从超码中选出的最小的码,即其任何真子集都不能满足条件。即属性不可再删减。

1.3 主码

从候选码中选出一个作为主码。

2.范式(NF)

范式:符合某一种级别的关系模式的集合,简而言之就数据库表设计的标准级别,范式有1NF,2NF,3NF,BCNF,4NF等,通常高级别的范式包含低级别的范式。数据库的设计一般到BCNF即可,有时候为了性能要就也会

2.1 1范式(1NF)

1范式:关系中的表的属性不可再分割。 举个简单的例子,有个学生表,有以下字段,sid,sname,address,sid为主键,sname为学生姓名,address为地址,地址的数据可能包括省份,城市,街道之类的。日后可能我们需要单独统计有个城市有多少学生之类的,而将这么多信息合成一个属性,即不符合第1范式,属性应该分割成省份,城市等多个字段,来满足业务要求。

2.2 2范式(2NF)

2范式:消除非主属性对码的部分函数依赖。 函数依赖:简单的说,如果对于每个x属性或属性组都有对应的确切的y值与之对应,则称Y函数依赖于x。记做 x->y 完全函数依赖:有x->y,但对于x的任意真子集都不存在x’->y,称之为完全函数依赖。比如有一张成绩表,有若干字段,学号,课程,成绩。 (学号,课程)->成绩,任意(学号) !-> 成绩,(课程)!-》成绩,我们称成绩完全依赖于(学号,课程) 部分函数依赖:Y函数不完全依赖于x叫部分函数依赖,例如(学号,课程)->课程名),学号和课程名无关,即(课程)->课程名。

2.3 3范式(3NF)

3范式:消除非主属性对码的传递函数依赖 传递函数依赖: 一个关系R(U),X,Y,Z为属性集U上的子集,其中存在X→Y和Y→Z,但Y不决定X,即 Y!->X 同时Y不包含Z,则存在X→Z,即X传递函数决定Z,Z传递函数依赖于X。 例如:商品表:商品名->仓库,仓库!->商品,仓库->仓库管理员,仓库管理员 !->仓库(假定一个仓库可以有多个管理员) 。

2.4 BCNF范式(BCNF)

BCNF范式:消除主属性之间的间接函数依赖和传递函数依赖。

3.总结

一般我们数据库设计到3范式或BCNF范式即可,但是在实际项目中总是在性能和扩展性中做取舍。数据库设计标准越高,可扩展性越好,耦合性越低,但性能也会受损。所以有时候会到2范式,为了减少表与表之间的关联,加快查询速度,各种利弊还需自己权衡。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128339.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.码
    • 1.1 超码
      • 1.2 候选码
        • 1.3 主码
        • 2.范式(NF)
        • 2.1 1范式(1NF)
        • 2.2 2范式(2NF)
        • 2.3 3范式(3NF)
        • 2.4 BCNF范式(BCNF)
        • 3.总结
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档