文档章节

数据库 三大范式

LYQ1990
 LYQ1990
发布于 2016/04/29 10:54
字数 824
阅读 60
收藏 4

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

数据库设计三大范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

                 

在实际开发中最为常见的设计范式有三个:

1.第一范式(确保每列保持原子性)

第一范式是最基本的范式。如果数据库表, 每一列属性都是不可再分的属性值,确保每一列的原子性,就说明该数据库表满足了第一范式。

第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到地址这个属性,本来直接将地址属性设计成一个数据库表的字段就行。但是如果系统经常会访问地址属性中的城市部分,那么就非要地址这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。

 

编号

姓名

性别

年龄

省份

城市

详细地址

1

张三

23

北京

北京

朝阳区新华路23

 

上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。

                

2.第二范式(不能部分依赖)

第二范式是在满足第一范式的基础上,要求每列的属性必须完全依赖于主关键字

学生Id

姓名

身份证号

课程Id

课程名称

1

张三

12345666

1

数学

1

张三

12345666

2

语文

 

比如,一个学生学多门课程,如果设计为上面一张表,一个学生就有多条数据,这样子学生信息是重复的,就会造成数据冗余。我们应该拆分成学生信息表,课程信息表以及学生课程关系表,三张表。

学生信息表

学生Id

姓名

身份证号

1

张三

12345666

1

张三

12345666

 

 

课程信息表

课程Id

课程名称

1

数学

2

语文

学生课程关系表

课程Id

学生Id

1

1

2

1

 

 

                 

3.第三范式(不能存在传递依赖)

第三范式是在满足第二范式的基础上,要求数据表中的每一列数据都和主键直接相关,而不能间接相关

比如设计的学生信息表如下,学校信息和学生Id不是直接相关的。

学生Id

姓名

年龄

性别

所在学校ID

学校名称

学校地址

1

张三

25

1001

北京大学

北京市***

 

拆分如下:

学生信息表

学生Id

姓名

年龄

性别

所在学校ID

1

张三

25

1001

 

学校信息表

所在学校ID

学校名称

学校地址

1001

北京大学

北京市***

 

© 著作权归作者所有

LYQ1990
粉丝 9
博文 238
码字总数 206220
作品 0
东城
私信 提问
hibernate与数据库建模--原作robbin

其实围绕Hibernate的话题,我都已经说过不下30遍,以致于最近两年以来,我对所有Hibernate的问题都不愿意再回应。另外最近一年多来,使用Rails的ActiveRecord,让我对ORM的认识又加深了很多,...

ChowJames
2012/09/02
389
0
Mysql 数据库的三大范式

一、数据库设计范式 1. 什么是范式 简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据存储...

edison_kwok
2019/04/30
47
0
数据库三大范式以及五大约束

数 据 库 第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性; 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能...

放飞E梦想O
2018/02/01
59
0
数据库三大范式

概述 一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分;第二范式要求确保表中每列与主键相关,而不能只与主...

stutterr
2017/10/08
0
0
项目开发周期与数据库设计对比

项目开发周期与数据库设计对比 部分函数依赖:非主键列只依赖组合键中的一部分; 传递函数依赖:列A依赖列B,而列B依赖主键列,即:列A间接依赖主键列; 三大范式(1NF键;2NF全部键;3NF仅仅...

老朱教授
2017/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

dynamic-connectivity 动态连通性问题之 quick-union 算法

quick-union 的思想是:若对象 p 的 root_id 和对象 q 的 root_id 相等,则认为 p 和 q 连通。 若要将对象 p 和对象 q 连通(已知两对象未连通),则将 p 的 root_id 的值设为 q 的 root_id ...

Phpythoner_Alei
今天
33
0
OSChina 周六乱弹 —— 实在选不出来就唱国歌

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享阿冗的单曲《你的答案》。--祝大家在2020年都找到自己答案。 《你的答案》- 阿冗 手机党少年们想听歌,请使劲...

小小编辑
今天
10
0
Maven打包可执行Jar包的方法

在使用Java开发中,会使用到将工程打包成可执行的jar包的情况,那么在maven中怎么将项目中的依赖包都添加到jar中呢。在pom.xml中添加一下插件: <build><plugins><plugin><ar...

CapJes
今天
10
0
使用vue 开发地图类系统(openlayers.js)的注意。

使用vue 开发地图类系统的注意。 1、使用地图应该创建的对象 少使用 vue 的data 和计算属性(comments)存数据或是vuex。 为什么要要注意这个问题呢? 答:这个就要了解到vue的实现原理 。原理...

DY-Tao
昨天
7
0
web移动端学习:高德地图demo(一)

在高德地图开发中申请开发者资格,然后在控制台中新建应用,获得KEY; 新建模板HTML文件; <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>地图demo</title><scri......

dxiya
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部