zoukankan      html  css  js  c++  java
  • 数据库三范式

    1范式:表中的每个字段都是原子的,表中的字段不能再拆分。

    如:讲师代课表:讲师姓名(P)、性别、班级(P)、教室、代课时间(天)、代课时间段(开始--结束)  不满足1NF,代课时间段需要拆分解决方案:将代课时间段拆分成开始和结束

    讲师代课表:讲师姓名(P)、性别、班级(P)、教室、代课时间(天)、开始时间、结束时间

    2范式:表中的非主键字段,都要全部依赖主键字段。

    在数据表设计的过程中,如果有复合主键(多字段主键),且表中有字段并不是由整个主键来确定,
    而是依赖主键中的某个字段(主键的部分);存在字段依赖主键的部分的问题,称之为部分依赖;
    第二范式就是要解决部分依赖。
    
    讲师代课表:讲师姓名(P)、性别、班级(P)、教室、代课时间(天)、开始时间、结束时间
    以上表中:因为讲师没有办法作为独立主键,需要结合班级才能作为主键(复合主键)
    
    代课时间,开始和结束字段都与当前的代课主键(讲班和班级)决定,但性别并不依赖班级,
    同时教室不依赖讲师,性别只依赖讲师,教室只依赖班级,出现了性别和教室依赖主键中的一
    部分,部分依赖,不符合2NF。
    
    解决方案1:可以将性别与讲师单独成表,班级与教室也单独成表
    解决方案2:取消复合主键,使用逻辑主键

    3范式:直接依赖。表中的字段全部依赖主字段,不能通过依赖其他字段来间接依赖主字段。即消除依赖传递。
    讲师代课表:ID(P)、讲师姓名、性别、班级、教室、代课时间(天)、开始时间、结束时间
    以上设计方式中:性别依赖讲师存在,讲师依赖主键;教室依赖班级,班级依赖主键
    
    解决方案:将存在传递依赖的字段,以及依赖的字段本身单独取出,形成一个单独的表,然后
    在需要对应的信息的时候,使用对应的实体表的主键加进来。
    
    讲师代课表:ID(P)、讲师ID、班级ID、代课时间(天)、开始时间、结束时间
    讲师表: ID(P)、讲师姓名、性别 (ID等价于讲师)
    班级表: ID(P)、班级、教室     (ID等价于班级)
    本文部分转自http://www.myexception.cn/mysql/2072142.html 感谢作者

  • 相关阅读:
    dremio 学习一 简单了解
    dremio 集群简单部署
    idea 无法添加maven项目问题
    maven几个加速地址配置
    dremio mongodb objectid 转换问题
    cube.js 集成dremio
    dremio 集群部署模式
    timescaledb 2.0 ga了
    dremio 数据湖平台
    dremio 中文查询问题解决
  • 原文地址:https://www.cnblogs.com/panxuejun/p/5975772.html
Copyright © 2011-2022 走看看