JavaSE基础篇—MySQL三大范式—数据库设计规范
1.概 念
范式是一种符合设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式。各个范式是以此嵌套包含的,范式越高,设计等级越高,在现实设计中也越难实现,一般数据库只要打到三种范式即可,避免异常的出现。
范式是指导数据设计的规范化理论,可以保障数据库设计质量
必须保证数据库设计的合理性
数据库设计关系整个系统的架构,关系到后续的开发效率和运行效率
数据库的设计主要包含了设计表结构和表之间的联系
如何是合理数据库
结构合理
冗余较小
尽量避免插入删除修改异常
如何才能保证数据库设计水平
遵循一定的规则
在关系型数据库中这种规则就称为范式

2.第一范式
是最基本的范式,要确保每一列的原子性,也就是不可拆分。
数据库表每一列都是不可分割的基本数据项,同一列中不能有多个值。
第一范式的合理遵循要根据系统的实际需求来定。
2.1实例:
1 问题:需求描述:数据库系统中需要一个实体表,该表用来存储用户信息,其中“地址”这个属性,要求查询到省份、城市和详细地址。 |
| 2 |
| 3 具体例子 |
4 姓名:张红欣; 性别:男; 年龄:26岁; 联系电话:0378-23459876;省份:河南省;城市:开封; 详细地址:朝阳区新华路23号; |
5 姓名:王艳; 性别:女; 年龄:25岁; 联系电话:021-2348768; 省份:贵州省;城市:贵阳市;详细地址:南明区南明区狮峰路6号; |
6 姓名:汪梅; 性别:女; 年龄:21岁; 联系电话:0571-3876450; 省份:浙江省;城市:杭州市;详细地址:滨江区滨康路352号; |
第一种表的设计

第二种表的设计

第一种设计方式不满足第一范式,因为region可以拆分成省,市和具体地址
3.第二范式
第二范式要求确保数据库表中的每一列都与主键相关,而不能是主键的某一部分相关(主要针对联合主键而言),主键列与非主键列遵循完全函数依赖关系,也就是完全依赖
即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表种。
3.1实例:
学号和课程编号作为联合主键
课程名称只依赖课程编号,和学号没有关系。

采用第二范式的方式解决:
①提取出学生表

②提取出课程表

③提取选课表,存放选课记录

4.第三范式
确保数据库表种的每一数据都与主键有直接相关,而不是间接相关,也就是消除传递依赖,属性不依赖其他属性。
4.1实例1:班级学生信息表

采用第三范式解决:
①提取与学生直接相关的信息

②提取与班级直接相关的信息

4.2实例2:订单明细表

第三范式解决:


5.范式使用的优缺点:
优点:结构合理
冗余较小
尽量避免插入删除修改信息的异常
缺点:性能降低(从一表查询变为多表查询)
多表查询要比单表查询速度慢
数据库的设计和范式的应用应该根据当前情况和需求做出灵活的处理,在实际设计中,要整体遵循范式理论。如果在某些特定的情况下还死死遵循范式也是不可取的,因为可能降低数据库的效率,此时可以适当增加冗余而提高性能,总之就是范式使用是根据实际情况而定。
JavaSE基础篇—MySQL三大范式—数据库设计规范的更多相关文章
- JavaSE基础篇—MySQL基础知识点
MySQL MySQL是一种关系数据库管理系统,是一种开源软件.可搭配PHP和Apache可以有更好的性能,也可以工作在众多的平台上.Orcale是一个数据库创建多个用户,MySQL是一个用户创建多个 ...
- Mysql 数据库设置三大范式 数据库五大约束 数据库基础配置
数据库设置三大范式 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库满足第一范式. 第一范式的合理遵循需要根据系统给的实际需求 ...
- MySql三大范式与数据库设计和表创建常用语句
[数据库设计的三大范式] 1.第一范式(1NF First Normal Fromate):数据表中的每一列(字段),必须是不可拆分的最小单元.也就是确保每一列的原子性. 例如: userInfo: ...
- mysql基础篇-----mysql简介
2017-04-19 一.mysql简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 ...
- 重新整理 mysql 基础篇————— mysql 事务[三]
前言 简单整理一下事务. 正文 事务有四大特性: 1.原子性(atomicity) 一个事务必须被视为一个不可分割的最小单元. 2.一致性(consistency) 数据库总是从一个一致性的状态转换到 ...
- MYSQL三大范式
第一范式:确保每列的原子性. 第一范式是最基本的范式. 数据库表中的字段都是单一属性的,不可再分. 只要是关系数据库都满足第一范式 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子 ...
- MySQL三大范式和反范式
1. 第一范式确保数据表中每列(字段)的原子性.如果数据表中每个字段都是不可再分的最小数据单元,则满足第一范式.例如:user用户表,包含字段id,username,password 2. 第二范式在 ...
- python框架之Flask基础篇(二)-------- 数据库的操作
1.flask连接数据库的四步: 倒入第三方数据库扩展包:from flask_sqlalchemy import SQLAlchemy 配置config属性,连接数据库: app.config[&q ...
- [MySQL实战-Mysql基础篇]-mysql架构
1.基本组成 下面是mysql的基本架构示意图 图一 图二 我们可以从图上看出,mysql大体分为两个部分,一个是server层,另一个是引擎层. server层中包含了连接器.查询缓存.分析器.优 ...
随机推荐
- main函数是主线程吗
1.线程的概念: 线程是程序最基本的运行单位,而进程不能运行,所以能运行的,是进程中的线程. 2.线程是如何创建起来的: 进程仅仅是一个容器,包含了线程运行中所需要的数据结构等信息.一个进程创建时,操 ...
- mybatis foreach批量插入数据:Oracle与MySQL区别
mybatis foreach批量插入数据:Oracle与MySQL不同点: 主要不同点在于foreach标签内separator属性的设置问题: separator设置为","分 ...
- 通俗的解释JAVA wait/notify机制
生活中,我们常遇到需要等待的场景,例如去银行办事,在没轮到自己之前需要一直等待,但是如果需要自己每隔几秒钟就去柜台前看看状况,那肯定是种非常低效和令人恼火的体验.而实际的情况是,接待员会让您拿个号,说 ...
- 洛谷 P1177 【模板】快速排序【13种排序模版】
P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的N个数从小到大排序后输出. 快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成.( ...
- [bzoj2288][POJ Challenge]生日礼物
用堆维护双向链表来贪心... 数据范围显然不容许O(nm)的傻逼dp>_<..而且dp光是状态就n*m个了..显然没法优化 大概就会想到贪心乱搞了吧...一开始想贪心地通过几段小的负数把正 ...
- [bzoj1783] [Usaco2010 Jan]Taking Turns
题意: 一排数,两个人轮流取数,保证取的位置递增,每个人要使自己取的数的和尽量大,求两个人都在最优策略下取的和各是多少. 注:双方都知道对方也是按照最优策略取的... 傻逼推了半天dp......然后 ...
- 2017 ICPC/ACM 沈阳区域赛HDU6223
Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java ...
- poj_2115C Looooops(模线性方程)
题目链接:http://poj.org/problem?id=2115 C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- $(function(){...});的作用
这是JQuery的语法,$表示JQuery对象,可以有好几种用法.比如传递选择器字符串.页面对象等,如果直接传函数体进去,表示网页加载完毕后要执行的意思.和JAVASCRIPT原来的这个是一样的: w ...
- 【android studio】 gradle配置成本地离线zip包
http://blog.csdn.net/jingleye/article/details/52689260 关键词:distributionUrl修改成本地路径,android stud ...