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三大范式—数据库设计规范的更多相关文章

  1. JavaSE基础篇—MySQL基础知识点

    MySQL MySQL是一种关系数据库管理系统,是一种开源软件.可搭配PHP和Apache可以有更好的性能,也可以工作在众多的平台上.Orcale是一个数据库创建多个用户,MySQL是一个用户创建多个 ...

  2. Mysql 数据库设置三大范式 数据库五大约束 数据库基础配置

    数据库设置三大范式 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库满足第一范式. 第一范式的合理遵循需要根据系统给的实际需求 ...

  3. MySql三大范式与数据库设计和表创建常用语句

    [数据库设计的三大范式] 1.第一范式(1NF First Normal Fromate):数据表中的每一列(字段),必须是不可拆分的最小单元.也就是确保每一列的原子性. 例如: userInfo: ...

  4. mysql基础篇-----mysql简介

    2017-04-19 一.mysql简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 ...

  5. 重新整理 mysql 基础篇————— mysql 事务[三]

    前言 简单整理一下事务. 正文 事务有四大特性: 1.原子性(atomicity) 一个事务必须被视为一个不可分割的最小单元. 2.一致性(consistency) 数据库总是从一个一致性的状态转换到 ...

  6. MYSQL三大范式

    第一范式:确保每列的原子性. 第一范式是最基本的范式. 数据库表中的字段都是单一属性的,不可再分. 只要是关系数据库都满足第一范式 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子 ...

  7. MySQL三大范式和反范式

    1. 第一范式确保数据表中每列(字段)的原子性.如果数据表中每个字段都是不可再分的最小数据单元,则满足第一范式.例如:user用户表,包含字段id,username,password 2. 第二范式在 ...

  8. python框架之Flask基础篇(二)-------- 数据库的操作

    1.flask连接数据库的四步: 倒入第三方数据库扩展包:from flask_sqlalchemy import SQLAlchemy 配置config属性,连接数据库: app.config[&q ...

  9. [MySQL实战-Mysql基础篇]-mysql架构

    1.基本组成 下面是mysql的基本架构示意图  图一 图二 我们可以从图上看出,mysql大体分为两个部分,一个是server层,另一个是引擎层. server层中包含了连接器.查询缓存.分析器.优 ...

随机推荐

  1. 高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备

    在上一篇 分布式文件系统FastDFS如何做到高可用 中已经介绍了FastDFS的原理和怎么搭建一个简单的高可用的分布式文件系统及怎么访问. 高可用是实现了,但由于我们只设置了一个group,如果现在 ...

  2. 运算符、单双分支&多分支、while循环

    一 .运算符: 1. 算术运算符: " + "." - " ." * " ." / " 分别为加.减.乘.除. % 是& ...

  3. Java入门篇(二)——Java语言基础(下)

    上篇说到Java中的变量与常量,接下来就是简单的计算了,首先需要了解一下Java中的运算符. 六.运算符 1. 赋值运算符 赋值运算符即"=",是一个二元运算符(即对两个操作数进行 ...

  4. CTF---Web入门第九题 FALSE

    FALSE分值:10 来源: iFurySt 难度:易 参与人数:4567人 Get Flag:2144人 答题人数:2157人 解题通过率:99% PHP代码审计 hint:sha1函数你有认真了解 ...

  5. Codeforces 777A Shell Game

    A. Shell Game time limit per test:0.5 seconds memory limit per test:256 megabytes input:standard inp ...

  6. HDU 1003 Max Sum【动态规划求最大子序列和详解 】

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  7. centos6+cdh5.4.0 离线搭建cdh搭建

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  8. 浅谈MySQL集群高可用架构

    前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...

  9. JS中使用正则表达式替换对象里的大小写

      function parse(obj){ var str = JSON.stringify(obj); var dataObj = str.replace(/Name/g, "name& ...

  10. 使用gitbook 发布一个教程文档网站

    gitbook是一个好用的发布电子书的项目:使用gitbook 可以在本地写好文档再远程推送到库:也可以在gitbook提供的在线平台上制作电子书:要想在自己的服务器上使用gitbook 发布一个网站 ...