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

在了解范式之前我们先了解下数据库中关于码的概念1.码1.超码能够唯一标识元组的某一属性或属性组,任何包含超码的超集也是超码,这里唯一标识元组可以简单的理解为根据某一个字段或几个字段的值,查询出某一行特定的数据2.候选码从超码中选出的最小的码,即其任何真子集都不能满足条件。即属性不可再删减。3.主码从候选码中选出一个作为主码。2.范式(NF)范式:符合某一种级别的关系模式的集合,简…

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

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

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.net/128339.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sqlite database browser 下载_SQLiteDeveloper

    sqlite database browser 下载_SQLiteDeveloper介绍一个SQLitepc端工具,可以查看SQLite

    2022年9月9日
    0
  • Shiro框架基本知识及应用「建议收藏」

    Shiro框架基本知识及应用「建议收藏」1.Shiro基本知识1.目前市面主流的安全框架:shiro:轻量级的,使用很方便,灵活,是apache提供的,在任何框架的SpringSecurity:是Spring家族的一部分,很多项目中会使用spring全家桶,相对与shiro来说,springSecurity更重量级,必须要求spring环境;相对shiro而言,功能更强大2.什么是Shiro?Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证、权限授权、加密、会话管理等功

    2022年9月8日
    1
  • 海思hi3798mv300和310的区别_海思3516

    海思hi3798mv300和310的区别_海思3516在网上搜寻海思HI3519或者hi3516实时识别除了官方给的SDK中有Rfcn的实时识别例子之外,其它都是读图片例子。官方例子中给了如下网络参考:Rfcn、Segnet、FasterRcnn、Cnn、Ssd、Yolov1、Yolov2、Yolov3、Lstm、Pvanet在SDK中文件夹路径为/rp-hi3516dv300-busybox/smp/a7_linux/mpp/sample/svp/nnie其中有一个sample_nnie_main.c文件,官方例子如下:/************

    2022年9月23日
    0
  • java四舍五入保留小数「建议收藏」

    java四舍五入保留小数「建议收藏」//方式一:doublef=3.1516;BigDecimalb=newBigDecimal(f);doublef1=b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); //方式二:newjava.text.DecimalFormat("#.00").format(3.1415926);//#.00表示两位小数…

    2022年5月30日
    28
  • JS日期格式化转换方法

    JS日期格式化转换方法1.将日期转换为指定的格式:比如转换成年月日时分秒这种格式:yyyy-MM-ddhh:mm:ss或者yyyy-MM-dd。当然是网上的方法,只是总结下。可以为Date原型添加如下的方法:Date.prototype.format=function(fmt){varo={“M+”:this.getMonth()+1,…

    2022年6月12日
    28
  • PyCharm 软件 离线 安装 插件「建议收藏」

    PyCharm 软件 离线 安装 插件「建议收藏」代理配置:https://blog.csdn.net/github_35160620/article/details/53209324 插件离线下载地址:http://plugins.jetbrains.com/ 2.下载插件安装插件1、下载插件:2、安装插件:settings->plugins->installpluginfromd…

    2022年8月28日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号