zoukankan      html  css  js  c++  java
  • 数据库的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 反范式化(空间换时间)

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

    优点:

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

    缺点:

    • 存在大量冗余数据
    • 数据维护成本更高(一个地方修改了,所有冗余字段也要对应修改)
  • 相关阅读:
    cookie加载不正确的问题
    android多图选择器 图片/视频 单选or多选,以及视频录制。
    Android开发之高仿微信图片选择器
    Glide升级到4.x版本遇到的问题
    v关于使用Glide加载图片失败时显示自己特定的图片
    Java的方法类型
    Java二维数组的应用
    Java中字符串操作的基本方法总结:
    Java冒泡排序
    报错:flutter: Another exception was thrown: Could not find a generator for route RouteSettings
  • 原文地址:https://www.cnblogs.com/xiaowangbangzhu/p/13723992.html
Copyright © 2011-2022 走看看