【数据库】数据库设计三范式
数据库设计的三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
在实际开发中最为常见的设计范式有三个:
1.第一范式
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
理解:列不可重复、列不可分
例如下表格没有遵循第一范式:
编号 | 用户ID | 性别1 | 性别2 | 年龄 | 联系电话 | 详细地址 |
---|---|---|---|---|---|---|
1 | 1 | 男 | 1 | 1991 | 0394-76571989,13268009800 | 山东 青岛海湾路101号 |
2 | 2 | 女 | 0 | 1990 | 0394-82157081,13535456679 | 北京 海淀区安宁庄东路123号 |
解决方案:
编号 | 用户ID | 性别 | 年龄 | 联系电话 | 省份 | 城市 | 详细地址 |
---|---|---|---|---|---|---|---|
1 | 1 | 男 | 28 | 0378-23459876 | 河南 | 开封 | 朝阳区新华路23号 |
2 | 2 | 女 | 29 | 0394-82157081 | 北京 | 海淀区 | 安宁庄东路123号 |
上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。
2.第二范式
第二范式在第一范式的基础之上更进一层。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一的区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。要求实体的属性完全依赖于主关键字。
理解:行必须被唯一
例如下表格没有遵循第二范式:
职工姓名 | 年龄 | 性别 | 联系方式 | 邮箱 |
---|---|---|---|---|
张三 | 18 | 男 | 13309340534 | 29770713@qq.com |
李四 | 28 | 男 | 18210393967 | ygz@sina.com |
张三 | 29 | 女 | 18801397899 | san@163.com |
解决方案
职工编号 | 职工姓名 | 年龄 | 性别 | 联系方式 | 邮箱 |
---|---|---|---|---|---|
001 | 张三 | 18 | 男 | 13309340534 | 29770713@qq.com |
002 | 李四 | 28 | 男 | 18210393967 | ygz@sina.com |
003 | 张三 | 29 | 女 | 18801397899 | san@163.com |
3.第三范式
第三范式在第二范式的基础上更进一层。第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
理解:消除存在传递依赖(即:除主键外,其他字段必须依赖主键)。
例如,下图一个部门信息表(1-1),其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在1-2的职工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入这个职工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
部门信息表(1-1)
部门编号 | 部门名称 | 部门简介 |
---|---|---|
1001 | 技术部 | 解决公司电脑宽带等各方面奇数问题 |
1002 | 人事部 | 负责招聘,统计职工信息计算考勤薪资等 |
职工信息表(1-2)
职工编号 | 职工姓名 | 所属部门 | 部门名称 | 年龄 | 性别 | 联系方式 | 邮箱 |
---|---|---|---|---|---|---|---|
001 | 张三 | 1001 | 技术部 | 18 | 男 | 13309340534 | 29770713@qq.com |
002 | 李四 | 1002 | 人事部 | 28 | 男 | 18210393967 | ygz@sina.com |
003 | 张三 | 1001 | 技术部 | 29 | 女 | 18801397899 | san@163.com |
【数据库】数据库设计三范式相关推荐
- 数据库 oracle 设计三范式
一:表中的数据不能重复,每个字段不可再分. 2: 建立在第一范式上,表中的非主键字段必须全部依赖主键,不能部分依赖主键 3 建立在第二范式基础上的,非主键字段不能传递依赖于主键字段. 转载于:http ...
- [数据库03]-约束(唯一性-主键-外键/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式
[数据库03]-约束(唯一性-主键-外键)/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式 一.约束 1.1 唯一性约束(unique) 1.2 主键约束 1.3 外键约束 二.存储引擎 2 ...
- MySQL之数据库设计三范式
目录 一.简介 第一范式 第二范式 第三范式 结语 学习计划: 一.简介 我们数据库表设计的时候需要尽可能的遵循三范式,具体是 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列, ...
- MySQL面试题 数据库设计三范式
第一范式 属性(字段)的原子性约束,要求属性具有原子性,不可再分割: 比如个人信息,个人信息不能作为一个字段,它可以再分为姓名.name.age等: 第二范式 记录的惟一性约束,要求记录有惟一标识,每 ...
- 深入浅出数据库设计三范式
设计良好结构的数据库,可以有效减小数据冗余,减少增删改中出现的问题.深入理解数据库设计的三范式,对于设计"健壮的数据库"十分有必要.数据库三范式是设计数据库 时参考的准则,接下来我 ...
- 浅析数据库设计三范式
在学习数据设计的时候,N种专业术语,看的头疼.但又不能不学,所以只好把它们整理整理出来,好让自己对它们有一个更深的理解.特别是对三范式(Normal Formal)的理解. 三范式指的是 ...
- 数据库设计三范式(3NF)
问:当时你数据库是如何设计的? 答:当时是按照三范式规范设计的: 第一范式: 1:数据库的原子性,即保证数据库表的每一列都不可分割的 第二范式: 1:原子性,即保证数据库表的每一列都不可分割 2:表中 ...
- 数据库设计三范式的举例及四大特性说明
更多免费教学文章请关注这里 前言 数据库课本上都把范式写到五范式了,但是实际应用中,满足三范式已经足够了,五范式太多余了. 三种范式是条件递增的联系(即后一个范式是在前一个条件满足的情况下引入新的条件 ...
- 数据库设计三范式详细介绍--数据库设计规范之数据库设计三范式
为什么需要数据库设计 1. 我们在设计数据表的时候要考虑很多问题问题,比如: 用户都需要什么数据?需要在数据表中保存哪些数据? 如果保证数据表中数据的正确性,当插入.删除.更新的时候该进行怎么样的约束 ...
最新文章
- 2021研究生报告新鲜出炉!博士每年招生超10万人
- 在云中进行灾难恢复的五种有效方式
- 【DIY】简单粗暴低成本Arduino四轴机械臂方案,创客教育学习使用舵机首选方案!...
- Django-HttpResponse、render,、redirect(转载)
- python基础学习(十二)变量进阶
- 计算几何/sgu 124 Broken line
- cytoscape操作经验
- 并不对劲的bzoj3994:loj2185:p3327[SDOI2015]约数个数和
- C语言试题五十一之已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。
- hadoop的Map阶段的四大步骤
- python plt.plot bar 设置绘图尺寸大小
- 在适当的场合使用FlagsAttribute修饰枚举
- mac json工具_工具类封装的思路 | 钉钉群机器人为例
- PyTorch系列入门到精通——autograd与逻辑回归
- lib-flexible vue项目(移动端适配)
- jsp入门教程:7个步骤实现JSP的分页显示
- ant design vue离线文档
- window10 msys2 mingw32 编译openconnect客户端
- Pytorch 小白记事本 1
- java惊魂_我的世界孤儿院惊魂