zoukankan      html  css  js  c++  java
  • MySQL三大范式和反范式

    MySQL三大范式和反范式

     

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

    2. 第二范式
    在第一范式的基础上更进一步,目标是确保表中的每列都和主键相关。
    如果一个关系满足第一范式,并且除了主键之外的其他列,都依赖于该主键,则满足第二范式。
    例如:一个用户只有一种角色,而一个角色对应多个用户。则可以按如下方式建立数据表关系,使其满足第二范式。
    user用户表,字段id,username,password,role_id
    role角色表,字段id,name
    用户表通过角色id(role_id)来关联角色表

    3. 第三范式
    在第二范式的基础上更进一步,目标是确保表中的列都和主键直接相关,而不是间接相关。
    例如:一个用户可以对应多个角色,一个角色也可以对应多个用户。则可以按如下方式建立数据表关系,使其满足第三范式。
    user用户表,字段id,username,password
    role角色表,字段id,name
    user_role用户-角色中间表,id,user_id,role_id
    像这样,通过第三张表(中间表)来建立用户表和角色表之间的关系,同时又符合范式化的原则,就可以称为第三范式。

    4. 反范式化
    反范式化指的是通过增加冗余或重复的数据来提高数据库的读性能。
    例如:在上例中的user_role用户-角色中间表增加字段role_name。
    反范式化可以减少关联查询时,join表的次数。

  • 相关阅读:
    基于WINCE.NET4.2系统的PDA使用PPC2003软件全攻略
    中文语方SQL脚本1(原创)
    debian下NAT的设置
    一个用于 MRTG 自动告警的脚本 (ZT)
    debian 4配置snmpd(有特别注意地方)
    [ZT]半小时精通正则表达式
    怎么把CSDN上的文章及图片导出到本地?
    zookeeper 简介
    Linux之搜索查找类指令
    Java之文档注释基本使用
  • 原文地址:https://www.cnblogs.com/wszme/p/14949577.html
Copyright © 2011-2022 走看看