一级范式(1NF)

  • 保证列的原子性
  • 什么是列的原子性呢?就是每一列的数据(字段值)是不可再分的
  • 比如说一个列名为address,value为“中国山东”,那么这就不满足1NF,因为“中国山东”可以再分为 [国家:中国]、[城市:山东]。没有保证列的 原子性

不满足第一范式:

create  table form1(id int(20) primary key,name  varchar(20),address varchar(50)
);insert into form1 values ("001","monkey1","中国山东");
insert into form1 values ("002","monkey2","中国四川");
insert into form1 values ("003","monkey3","中国南京");

满足第一范式:

-- 将上述的表格中的 address 进行拆分成 country 、 provinvecreate table form2 (id int(20) primary key,name  varchar(20),country varchar(20),province varchar(20)
);insert into form1 values ("001","monkey1","中国","山东");
insert into form1 values ("002","monkey2","中国","四川");
insert into form1 values ("003","monkey3","中国","南京");

二级范式(2NF)

  • 在满足1NF的前提下,一个表只描述一种事物。
  • 非主属性完全依赖于主键[消除非主属性对主码的部分函数依赖]。
  • 例如:一个表为 (学号, 姓名, 年龄, 课程名称, 成绩, 学分) 这个就不满足2NF。
    首先他描述的是两种事务,一种是学生信息(学号, 姓名, 年龄)、另一种是课程信息(课程名称, 成绩, 学分);
    其次没有满足非主属性完全依赖于主键,我们可以通过“学号和课程名得到成绩” (学号,课程名称) → (成绩),但是显然这个表的主键是“学号”

不满足第二范式:

create table table1(S_id int() primary key,S_name varchar(20).S_age varchar(20),C_name varchar(20),C_score float(20),C_credit int(20)
);insert into table1 values ("001","hu1","18","math","100","4");
insert into table1 values ("002","hu2","16","Chinese","85","5");
insert into table1 values ("003","hu3","22","English","120","4");

满足第二范式:(将上述表进行拆分)

-- 将上述表格拆分中table1和table2create table table1(S_id int() primary key,S_name varchar(20).S_age varchar(20),C_id int(20)
);
insert into table1 values ("001","hu1","18","123");
insert into table1 values ("002","hu2","16","456");
insert into table1 values ("003","hu3","22","789");create table table2(C_id int(20) primary key,C_name varchar(20),C_score float(20),C_credit int(20)
);insert into table1 values ("0001","math","100","4");
insert into table1 values ("0002","Chinese","85","5");
insert into table1 values ("0003","English","120","4");

三级范式(3NF)

  • 在满足2NF的前提下,每列都与主键有直接关系,不存在传递依赖。任何非主键属性不依赖于其他非主属性。
  • 例如:一个表为(“订单编号”,“订单日期”,“顾客编号”,“顾客手机号”)。
    此表不满足3NF,因为 我们可以通过“ 订单编号 和 顾客编号 找到 顾客姓名“订单编号”——>“顾客编号”——>“顾客手机号”。存在着"传递依赖"

不满足三级范式:

create table orders(order_id int(20) primary key,order_date timestamp,customer_id int(20),customer_phone varchar(20)
);
insert into orders values("00001","2020-10-01","01","124578555");
insert into orders values("00002","2020-11-01","02","545558555");
insert into orders values("00003","2020-11-21","03","124578555");

满足三级范式:

-- 将上述的表格拆分成table和table2create table orders(order_id int(20) primary key,order_date timestamp,customer_id int(20),
);
insert into orders values("00001","2020-10-01","01");
insert into orders values("00002","2020-11-01","02");
insert into orders values("00003","2020-11-21","03");create table orders2(customer_id int(20),customer_name varchar(20),customer_phone varchar(20)
);
insert into orders2 values("01","xuehao1","1585555555");
insert into orders2 values("02","xuehao2","1785552525");
insert into orders2 values("03","xuehao3","1985526458");

BCNF

图析:

数据库中的三级范式(1NF、2NF、3NF、BCNF)相关推荐

  1. 数据库范式1NF 2NF 3NF BCNF

    设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式.关系数据库中的关系必须满足一定的要求,即满足不同的范 ...

  2. 数据库范式1NF 2NF 3NF BCNF通俗讲解

    1NF(第一范式) 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库. 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数 ...

  3. 【转】关系型数据库的设计范式 1NF 2NF 3NF BCNF

    本文转载自:https://www.cnblogs.com/langdashu/p/5924082.html 一.缘由: 要做好DBA,就要更好地理解数据库设计范式.数据库范式总结概览: 为了更好地理 ...

  4. 数据库范式解析(1NF 2NF 3NF BCNF)

    数据库设计范式是关系型数据库的设计准则.其目的在于通过规划设计使得数据库结构合理,尽量减少数据冗余,消除存储异常,方便数据的插入.更新和删除操作.目前常用范式包括1NF(第一范式).2NF(第二范式) ...

  5. 【数据库】范式理解:1NF,2NF,3NF,BCNF,4NF详析

    数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析 引言 范式种类 第一范式(1NF) 符合1NF的关系中的每个属性都不可再分 存在问题 第二范式(2NF) 在1NF基础上消除了非 ...

  6. 数据库范式1NF 2NF 3NF详细阐述

    范式:关系数据库中的关系是要满足一定要求的,满足不同程度要求的不同范式.满足最低要求的叫第一范式,简称1NF ,在第一范式中满足进一步要求的为第二范式,其余以此类推.通俗来说是满足数据库关系表中的一套 ...

  7. mysql中bcnf_数据库范式(1NF 2NF 3NF BCNF)详解

    @hxx: http://blog.sina.com.cn/u/3113060227 简介:一范式:每一列不可分割,二范式:每一列唯一(对应唯一对象):三范式:一列中的非主关键列不应该在其他表(或自己 ...

  8. 数据库范式(1NF 2NF 3NF BCNF)详解

    数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不仅给 ...

  9. 数据库范式 1NF, 2NF, 3NF的问题与细解

    转自https://www.jianshu.com/p/94a274ef35a9 一. 关于数据冗余与异常 数据库的规范化 数据库规范化是一种在数据库中组织数据的技术. 规范化是消除冗余(重复)和不良 ...

最新文章

  1. Jquery实现的Tabs页签
  2. Stream Processing:滑动窗口的聚集(aggregation)操作的优化算法讲解
  3. 【 FPGA 】设计一个通用移位寄存器
  4. 今年怪事特别多 时代盘点09十大奇闻
  5. BAT架构师进阶:大型网站架构书籍推荐
  6. Java的synchronized的使用_Java中synchronized的用法
  7. 不会和容器一起启动_一起学习docker05-docker容器
  8. auto_ptr个人用
  9. 0基础学python要多久-零基础学习python,要多久才可以学好并且找到工作?
  10. mysql的体系架构和存储引擎
  11. Linux _ Day8 Shell编程之字符截取命令
  12. Tableau零基础教程
  13. 中国口岸年鉴(2001-2015年)
  14. 泛微移动端数据库 :H2数据库
  15. exls表格搜索快捷键_excel表格快速查找快捷键
  16. java怎么用switch求闰年_使用switch语句编程,根据输入的年份判断是否为闰年,根据输入的月份判断这月有多少天...
  17. BUFF67 DM蓝牙5.2双模热插拔PCB
  18. 库存中货物超期的天数
  19. 网络安全——Goolge Hacking的使用
  20. 批量修改txt(或其他)文件编码为utf-8

热门文章

  1. 产品的初级阶段,如何进行运营推广
  2. “看完网红村视频,我连夜叫了滴滴打人服务”|黑话连篇
  3. 含磷废水有机磷废水处理
  4. Could not initialize class ru.yandex.clickhouse.ClickHouseUtil
  5. 互联网早报 | 滴滴推出百亿补贴活动;阿里巴巴三总部三中心落户上海;美团点评正式更名为“美团”...
  6. 牛客网IT校招编程题-逛公园-Python
  7. App Store和Google Play的商店截图尺寸
  8. 删除数组中重复出现的值
  9. 使用C# 和基于.Net的以太坊库Nethereum以太坊及智能合约交互实战篇(一)
  10. 北京视觉ui设计培训内容介绍