• 数据库的3大范式&5大约束&反范式化


    一、第一范式(1NF)

    数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;

    例如:userInfo:山东省烟台市  131777368781           userAds:山东0省烟台市  userTel:131777368781 

    第二范式(2NF):

    满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;

    例如:订单表只描述订单相关的信息,所以所有字段都必须与订单id相关       

    产品表只描述产品相关的信息,所以所有字段都必须与产品id相 关;

    因此不能在一张表中同时出现订单信息与产品信息;如下图所示(1张表拆成2张表):

    第三范式(3NF)

    必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);

    例如:订单表中需要有客户相关信息,在分离出客户表之后,订单表中只需要有一个客户id即可(外键),而不能有其他的客户信息。因为其他的客户信息直接关联于客户id,而不是直接与订单id直接相关。

    【如何更好的区分三大范式】

     第 一范式和第二范式在于有没有分出两张表,第二范式是说一张表中包含了多种不同的实体属性,那么要必须分成多张表, 第三范式是要求已经分成了多张表,那么一张表中只能有另一张表中的id(主键),而不能有其他的任何信息(其他的信息一律用主键在另一表查询)。

    总结:

    第1范式:每个表中都有1列,并且该列是不可拆分的最小单元

    第2范式:1张表只描述一件事情

    第3范式:用外键做表的关联

    【数据库五大约束】

    1.primary KEY:设置主键约束;
    2.UNIQUE:设置唯一性约束,不能有重复值;
    3.DEFAULT 默认值约束,height DOUBLE(3,2)DEFAULT 1.2 height不输入是默认为1,2
    4.NOT NULL:设置非空约束,该字段不能为空;
    5.FOREIGN key :设置外键约束。

    反范式化

    一般说来,数据库只需满足第三范式(3NF)就行了。

        没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余,达到以空间换时间的目的

    范式化设计和反范式化设计的优缺点

    5.1 范式化 (时间换空间)

    优点:

    • 范式化的表减少了数据冗余,数据表更新操作快、占用存储空间少。

    缺点:

    • 查询时需要对多个表进行关联,查询性能降低。 
    • 更难进行索引优化

    5.2 反范式化(空间换时间)

    反范式的过程就是通过冗余数据来提高查询性能,但冗余数据会牺牲数据一致性

    优点:

    • 可以减少表关联
    • 可以更好进行索引优化

    缺点:

    • 存在大量冗余数据
    • 数据维护成本更高(一个地方修改了,所有冗余字段也要对应修改)
  • 相关阅读:
    Android开发 ViewConfiguration View的配置信息类
    Android 开发 倒计时功能 转载
    Android 开发 关于7.0 FileUriExposedException异常 详解
    Android 开发 实现文本搜索功能
    Android 开发 Activity里获取View的宽度和高度 转载
    Android 开发 存储目录的详解
    Android 开发 Fresco框架点击小图显示全屏大图实现 ZoomableDraweeView
    Android 开发 将window变暗
    Android 开发 DisplayMetrics获取Android设备的屏幕高宽与其他信息
    Android 开发 DP、PX、SP转换详解
  • 原文地址:https://www.cnblogs.com/xiaowangbangzhu/p/13723992.html
Copyright © 2020-2023  润新知