1.概   念    

  范式是一种符合设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式。各个范式是以此嵌套包含的,范式越高,设计等级越高,在现实设计中也越难实现,一般数据库只要打到三种范式即可,避免异常的出现。

  范式是指导数据设计的规范化理论,可以保障数据库设计质量

  必须保证数据库设计的合理性

    数据库设计关系整个系统的架构,关系到后续的开发效率和运行效率

    数据库的设计主要包含了设计表结构和表之间的联系

  如何是合理数据库

    结构合理

    冗余较小

    尽量避免插入删除修改异常

  如何才能保证数据库设计水平

    遵循一定的规则

    在关系型数据库中这种规则就称为范式

java 带范型的类 builder_java 带范型的类 builder

 

2.第一范式

  是最基本的范式,要确保每一列的原子性,也就是不可拆分。

    数据库表每一列都是不可分割的基本数据项,同一列中不能有多个值。

    第一范式的合理遵循要根据系统的实际需求来定。

2.1实例:

1 问题:需求描述:数据库系统中需要一个实体表,该表用来存储用户信息,其中“地址”这个属性,要求查询到省份、城市和详细地址。

2

3 具体例子

4 姓名:张红欣;  性别:男; 年龄:26岁; 联系电话:0378-23459876;省份:河南省;城市:开封;  详细地址:朝阳区新华路23号;
5 姓名:王艳;    性别:女; 年龄:25岁; 联系电话:021-2348768;  省份:贵州省;城市:贵阳市;详细地址:南明区南明区狮峰路6号;
6 姓名:汪梅;    性别:女; 年龄:21岁; 联系电话:0571-3876450; 省份:浙江省;城市:杭州市;详细地址:滨江区滨康路352号;

 第一种表的设计

java 带范型的类 builder_java 带范型的类 builder_02

  第二种表的设计

java 带范型的类 builder_数据库_03

  第一种设计方式不满足第一范式,因为region可以拆分成省,市和具体地址

 3.第二范式

依赖关系,也就是完全依赖

   即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表种。

3.1实例:

  学号和课程编号作为联合主键

  课程名称只依赖课程编号,和学号没有关系。

 

java 带范型的类 builder_数据库_04

  采用第二范式的方式解决:

  ①提取出学生表

    

java 带范型的类 builder_数据库表_05

  ②提取出课程表

    

java 带范型的类 builder_主键_06

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

    

java 带范型的类 builder_主键_07

4.第三范式

消除传递依赖,属性不依赖其他属性。

4.1实例1:班级学生信息表

  

java 带范型的类 builder_数据库_08

 采用第三范式解决:

直接相关的信息

   

java 带范型的类 builder_数据库_09

直接相关的信息

   

java 带范型的类 builder_数据库_10

4.2实例2:订单明细表

  

java 带范型的类 builder_java 带范型的类 builder_11

  第三范式解决:

  

java 带范型的类 builder_主键_12

    

java 带范型的类 builder_数据库表_13

5.范式使用的优缺点:

优点:结构合理

       冗余较小

       尽量避免插入删除修改信息的异常

   缺点:性能降低(从一表查询变为多表查询)

      多表查询要比单表查询速度慢

  数据库的设计和范式的应用应该根据当前情况和需求做出灵活的处理,在实际设计中,要整体遵循范式理论。如果在某些特定的情况下还死死遵循范式也是不可取的,因为可能降低数据库的效率,此时可以适当增加冗余而提高性能,总之就是范式使用是根据实际情况而定。