数据库的范式(第一范式,第二范式,第三范式,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)
上一篇 2022年4月16日 上午8:20
下一篇 2022年4月16日 上午8:40


相关推荐

  • 【数据分析报告】携程客户分析与流失预测

    【数据分析报告】携程客户分析与流失预测目录一、项目背景与目的二、探索性分析2.1数据指标预览2.2数据概况2.3数据分布2.3.1数据分布总览2.3.2预定日期和入住日期2.3.3访问时间段2.3.4客户价值2.3.5消费能力指数2.3.6价格敏感指数分布2.3.6入住酒店平均价格2.3.7酒店星级偏好2.3.8订单取消率2.3.9用户年订单数分布2.3.10新老客户流失率三、数据预处理3.1去除不需要的字段与重复字段3.2数据类型转换3.3异常值处理3.3.1负数处理3.3.2极值处理3.4缺失值处理3.

    2022年10月18日
    7
  • C++ int转string的多种方式

    C++ int转string的多种方式1 inta 10 char intStr itoa a stringstr string intStr 2 inta 10 stringstream ss lt lt a stringstr ss str 3 C 11 nbsp 推荐 如果支持的话 include lt string gt std stri

    2026年3月26日
    2
  • sql server jdbc

    sql server jdbc

    2021年5月5日
    116
  • matlab中axis的使用

    matlab中axis的使用%提示disp('该功能练习axis功能');%初始化快捷式数组x=-2*pi:pi/20:2*pi;y=sin(x);plot(x,y);title('sin(x)图形

    2022年7月3日
    25
  • DDOS 攻击防御-SYN 洪水攻击

    DDOS 攻击防御-SYN 洪水攻击本文章仅供学习交流一 环境配置攻击机 kali2021 1ip 192 168 0 255 255 0 靶机 contos7 6ip 192 168 0 255 255 0 条件 两机器要在同一局域网中 能相互访问 contos 开启 apche 服务二 信息收集 1 Traceroute 命令也可以对路由进行跟踪 2 使用 nmap 扫描 win7 进行信息收集 nmap 目标 ipexclude 排除目标 ip 扫描时排除指定 ipnmap iL 目标文

    2026年3月19日
    1
  • 《善数者成:大数据改变中国》读书笔记3

    《善数者成:大数据改变中国》读书笔记3第八章撬动商业:新“规模经济”,数最懂你每一个消费者在消费的过程中留下数据,就会形成商业大数据。“”智慧门店”与天猫围绕新零售在新品首发、渠道管理、大数据赋能和线上线下全渠道融合等领域展开一揽子合作。向新零售转变,卖货层面是最直接的,其次是数据要打通。海澜之家采用RFID技术给2亿件衣服分配了各自的身份编码,进而实现了线上下单、线下发货,并在门店之间实现了数据共享互通,让一条条销售数据从“碎片”走向“整合”,然后又通过大数据分析,更好地分析和洞察消费者需求,及时调整经营策略,降低整体经营性投入,最终

    2022年8月30日
    12

发表回复

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

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