数据库建表规则(三大范式)通俗易懂
数据库设计三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
1.第一范式(确保每列保持原子性)也就是列都是不可再分
第一范式的目标是确保每列的原子性:
如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
理解:
一范式就是属性不可分割。属性是什么?就是表中的字段
不可分割的意思就按字面理解就是最小单位,不能再分成更小单位了。
这个字段只能是一个值,不能被拆分成多个字段,否则的话,它就是可分割的,就不符合一范式。
2.第二范式(2nd NF -每个表只描述一件事情)
首先满足第一范式,并且表中非主键列不存在对主键的部分依赖。
第二范式要求每个表只描述一件事情。
理解:
二范式就是要有主键,要求其他字段都依赖于主键。
为什么要有主键?没有主键就没有唯一性,没有唯一性在集合中就定位不到这行记录,所以要主键。
其他字段为什么要依赖于主键?因为不依赖于主键,就找不到他们。更重要的是,其他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依赖于主键,也就成了唯一的。
3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式定义是,满足第二范式,并且表中的列不存在对非主键列的传递依赖
除了主键订单编号外,顾客姓名依赖于非主键顾客编号。
理解:
三范式就是要消除传递依赖,方便理解,可以看做是“消除冗余”
消除冗余应该比较好理解一些,就是各种信息只在一个地方存储,不出现在多张表中。
综上:回答一下什么是第三范式?
首先,表中列都不可再分;
其次,表中非主键列不存在对主键的部分依赖;
第三,表中的列不存在对非主键列的传递依赖;
满足以上三点的范式是第三范式。
所谓的范式,是用来学习参考的,设计的时候根据情况,未必一定要遵守。
数据库建表规则(三大范式)通俗易懂相关推荐
- MySQL数据库建表的三大范式
第一范式 表的每一列都是最小的不可分割的原子值. 错误表实例: 正确表实例: 第一范式的好处: 1. 减少了数据冗余 2. 更利于数据的维护和更新 第二范式 在第一范式的基础上,要求一个表中的所有字段 ...
- 关系型数据库建表规则
为避免io冗余或者数据冗余 1.某张表不常用的字段单独建一张表存放(避免io冗余) 2表间记录为一对多关系的,在从表中加一个外键字段(避免数据冗余) 3.表间记录为多对多关系的,必须建立第三张链接表( ...
- 关于使用java程序从excel或者数据库中取出建表规则数据,自动生成数据库建表语句(适用于批量建数据库表)
公司开发新系统,需要创建几百个数据库表,建表的规则已经写好放到Excel中,如果手动创建的话需要占用较长的时间去做,而且字段类型的规则又被放到了另一张表,如果手动去一个一个去匹配就很麻烦,所以我先把两 ...
- 数据库建表原则,SQL数据库建表前期优化,SQL数据库操作优化,数据库命名规范...
2019独角兽企业重金招聘Python工程师标准>>> 关键字: 数据库建表原则 ·1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...
- 数据库建立遵循的三大范式
数据库建立遵循的三大范式 数据库设计深刻影响着存储性能和数据的操作效率,为了避免操作异常,在设计数据库的时候需要满足一定的规范要求,这里就引入了范式. 范式有多种级别:第一范式,第二范式,第三范式,b ...
- 数据库建表的 15 个最佳实践方式
前言 对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节. 系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等. 后端开发的日常工作,需要不断的 ...
- 数据库逻辑设计之三大范式,一看就懂
数据库逻辑设计之三大范式 第一范式 第二范式 第三范式 反范式化 范式化设计和反范式化设计的优缺点 范式化 反范式化 第一范式 1NF是对属性的原子性,要求属性具有原子性,不可再分解: 表:字段1. ...
- 聊聊数据库建表的15个小技巧
前言 对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节. 系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等. 后端开发的日常工作,需要不断的 ...
- PowerDesigner生成数据库建表sql脚本
PowerDesigner生成数据库建表sql脚本 一.生成sql server 2000或oracle建表sql脚本 1.新建一个物理模型,通过database菜单下的change current ...
最新文章
- IDA动态调试技术及Dump内存
- C++中的对象_纪要(二)
- Spring框架中的设计模式(一)
- 05-WIFI通讯客户端搭建
- C语言中的静态函数的作用
- 用jQuery监听浏览器窗口的变化
- 政策解读:《智能硬件产业创新发展专项行动(2016-2018年)》(下)
- 给做技术的换一道菜尝尝:一月冲皇冠?凶残级淘宝店主,无法阻挡的爆款名城!...
- [数据模型] 数据表三种关联的概述
- 怎么实现角色权限的分配_在 Go 语言中使用 casbin 实现基于角色的 HTTP 权限控制...
- bzoj 2962: 序列操作
- oracle数据库中的通配符,ORACLE学习笔记系列(9)通配符和特殊字符
- Crucible使用说明
- php sapi 那些坑,安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
- Python dic 方法汇总
- 可以免费打电话的网站
- 文件操作,函数练习及答案
- 出版社--图书管理系统
- awesome-android-tips
- 学计算机等级考试电脑版软件,猎证全国计算机等级考试学习系统