【数据库记录】数据库三大范式和BCNF范式
1.第一范式1NF:指列不可以再分割。
举个例子:一张student表,有三个列id,name,age,如下。
id,name,age不可以再分,这就是符合第一范式,下面这样,就是不符合第一范式。
列不能再拆分这就是满足第一范式,正常的关系型数据库,都是满足第一范式的。
2.第二范式2NF:在第一范式的基础上,还要满足其他字段必须依赖于主键。
在上边的表中,就不满足第二范式。
这里学号是唯一的,张三的信息是完全依赖于学号,但是分数不是完全依赖于学号。
如果有十几个科目,就会有十几行数据,前边的字段都是冗余数据。
这时候我们就要把表拆分一下,如下。
这样就是满足第二范式。
3.第三范式3NF:在第二范式的基础上,消除传递依赖,就是说其他字段依赖主键还不行,还必须的直接依赖。
上图第二张表,老师和老师的年龄是完全依赖于主键(学号+科目),但是老师年龄的直接依赖是老师,老师年龄这个字段是间接依赖于主键(老师年龄->老师->主键)。
这就不满足第三范式,于是再把老师的列单独拆出来。
teacher表
ps:上边应该也有一个老师的编号,student表通过老师编号用来关联老师。
4.BCNF范式:在第三范式的基础上,不允许主键的一部分被另一部分或其它字段决定。
在这张表中,联合主键1(姓名+科目)----》老师 联合主键2(姓名+老师)----》科目。
既满足全部依赖,又满足直接依赖。所以属于第三范式。
(科目是联合主键1的一部分)(老师是联合主键2的一部分)
但是这里的(老师----》科目),老师可以决定科目。
就是说科目被老师所决定=====主键的一部分被其他字段决定。
注意:所谓的范式,是设计数据库的基本理念,用来参考,实际开发中并不会有太多要求,按照实际情况来,不一定要遵守。
【数据库记录】数据库三大范式和BCNF范式相关推荐
- 第4章 数据库设计---数据库原理及应用
目录 一.数据库设计方案 1. 数据库应用架构设计:单用户.集中.CS.分布 2. 数据库结构设计:概念.逻辑.物理 3. 数据库应用访问方式设计:访问方式 数据库结构设计模型 概念数据模型:概念,不 ...
- 数据库设计的三大范式、BCNF、4NF
一.理解数据库的范式需要理解几个基本概念: 码:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码.相当于键值的意 ...
- 数据库设计规范之三大范式
文章主要划分为两部分,第一部分官方难懂篇,第二部分白话易懂篇. 数据库范式有6种,第一范式(1NF),第二范式(2NF),第三范式(3NF),巴斯-科德范式(BCNF),第四范式(4NF),第五范式( ...
- 数据库设计常用三大范式
前言 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式:第一范式(1NF). ...
- Mysql数据库与数据库三大范式
作者:左新宇 链接:https://zhuanlan.zhihu.com/p/59394493 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. MySQL 常用命令 ...
- 数据库三大范式、BC范式、第四范式
目录 第一范式(1NF):原子性(存储的数据应该具有"不可再分性") 第二范式(2NF):唯一性 (消除非主键部分依赖联合主键中的部分字段)(一定要在第一范式已经满足的情况下) 第 ...
- 数据库第一范式、第二范式、第三范式、BCNF范式
文章目录 什么是"范式(NF)" 1. 第一范式(1NF) 2. 第二范式(2NF) 2.1 函数依赖 2.1.1完全函数依赖 2.1.2 部分函数依赖 2.2 码 2.3 非主属 ...
- mysql三大范式和反范式_数据库范式:三大范式、BC范式和反范式化
一.什么是数据库范式 无规矩不成方圆,同理范式是数据表设计的一些约束和规范.为了让各个属性间的关系更加合理,减少数据冗余. 一般来说,主要满足 3NF 就可以了,因为范式过高,虽然对数据关系有更好的约 ...
- 数据库基础 数据库设计三大范式
转载自: http://www.cnblogs.com/knowledgesea/p/3667395.html 数据库设计范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的 ...
- mysql增删改查不区分大小写吗_MySQL的增删改查语句以及数据库设计的三大范式...
数据库设计的三大范式: 1.列的原子性,即列是不可再分的 2.表里的每一列都应该与主键有关系, 3.表里的每一列都应该与主键有直接关系, 当使用自增长列不满足2.3范式,是特殊例子,只用在解决较为复杂 ...
最新文章
- java neo4j rest api_Neo4j REST API使用教程
- JPA(一):十分钟入门 JPA
- 文件排版,较难的线性dp
- 打造自己的装机U盘(二)
- 【开发者成长】Vue.js 中有哪些性能陷阱
- [Ubuntu] 使用 ibus 输入汉字
- 自然语言处理——BERT情感分类实战(一)之预处理
- Gentoo学习笔记
- Node.js:中间件——express简单的设置用户表单提交数据的接收中间件
- C# 获取Datagridview 中ComboBox列的DisplayMember值和ValueMember值
- linux查看cpu核数命令,Linux系統下如何查看CPU型號、核心數量、頻率和溫度?
- 用python实现单词本功能
- 欢度国庆⭐️共享爬虫之美⭐️基于 Python 实现微信公众号爬虫(Python无所不能爬)
- 微服务系统架构的演变
- 【手机】手机选购指南
- 基于身高与体重数据集与Auto数据集分别进行线性回归和Lasso回归(代码逐行讲解,超细节)
- python笔记 基础语法·第14课 【三局两胜角斗场小游戏,类与对象】
- m文件关联matlab,matlab关联m文件
- UNP 学习笔记 5:高级 IO 与 IO 复用
- JMeter学习-006-JMeter 断言