zoukankan      html  css  js  c++  java
  • 数据库设计之 ER图、三大范式

    ER图

    Entity Relationship,实体关系图。

     (图源自csdn,最初的博主未知)

    1、先画出所有实体,矩形圈出来

    2、再画出每个实体的属性,椭圆圈出来,实体、属性之前用实线连接。为了方便找出主键,作为主键的属性可以画一条下划线。

    3、标注实体之间的关联关系:一对一(1,1)、一对多(1,n),多对多(m,n)。关系用菱形表示,并在菱形2边的线上标上1、m、n这些表示2个实体之间关联关系的字符。

    关联关系:

    一对一,一个人只对应一张身份证,一张身份证也只对应一个人。(2个一对一)

    一对多,一个用户可以拥有多个订单,一个订单只能属于一个用户。(1个一对一、1个一对多)

    多对多,一个老师可以教多个学生,一个学生可以有多个老师。(2个一对多)

    比如实体A、B,先把A作为1,看B是1还是多;再把B作为1,看A是1还是多。

    如果2个都是一对一,那A、B就是一对一;

    如果1个一对一、1个一对多,那A、B是一对多;

    如果2个都是一对多,那A、B就是多对多。


    数据库三大范式

    数据库有8种范式(Normal Form),通常只用到前3种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。

    1NF  属性的原子性(不可再分)

    数据库中的每一个字段都要是不可再分隔的基本

    2NF   属性完全依赖于主键

    一张表中的每一条记录都要是可区分的,只通过主键来区分,所以一张表必须要有一个unique字段。

    第二范式建立在第一范式的基础上,满足第二范式必须要先满足第一范式。

    3NF  属性不能有依赖传递(不依赖于主键之外的其它属性)

    比如tb_student存储学生信息,学生成绩这个列依赖于课程,课程依赖于课程id,tb_student的主键时学生id,表中的记录只能依赖于学生id,

    学生成绩不能放在tb_student中,因为放在tb_student中,这一列依赖课程id,依赖的是这张表主键(学生id)之外的列(课程id),所以要划出去单独用一张表来存储学生成绩。

    第三范式建立在第二范式的基础上,满足第三范式需要先满足第二范式。

    我们设计的关系型数据库要满足以上3种范式。

  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12574716.html
Copyright © 2011-2022 走看看