• 数据库中的范式


    此博客连接:https://www.cnblogs.com/ping2yingshi/p/13888544.html

    说明

    数据库字段命名规则要求小写字母。

    第一范式

    定义

    如果一个关系模型R的所有属性都是不可分的基本数据项,则称该关系模式满足第一范式。记作R∈1NF。

    举例

    建立一张存放学生选课的选课表如下:

     

     分析

    表中的课程可以分为课程1,课程2,不满足第一范式中所有属性都不是不可分的要求。所以不符合第一范式。

     修改

    把表中的课程拆成单独的属性,修改后,所有属性都不可再分,满足第一范式的要求。

    第二范式

    定义

    若关系模式R∈1NF,并且每一个非主属性都完全依赖于R的码,则R∈2NF。

    举例

    建立一张数据表如下

     分析关系模式

    说明

    上表满足第一范式,所有属性都是不可再分的。

    分析

    关系模式中存在的非主属性函数依赖:

    主码=(stu_id,course_id)

    非主属性={stu_name,stu_sex,course_name,teacher,title,score}

    非主属性对码的完全函数依赖:(stu_id,course_id)--完全依赖--> score,(stu_id,course_id)--完全依赖--> teacher,(stu_id,course_id)--完全依赖--> Title.

    非主属性对码的部分函数依赖:(stu_id,course_id)--部分依赖--> stu_name,stu_id—>stu_name;

                                                      (stu_id,course_id)--部分依赖--> stu_sex,stu_id—>stu_sex;

                                                         (stu_id,course_id)--部分依赖--> course_name,course_id—>couse_name

     由于表中存在非主属性对码的部分依赖,所以不符合第二范式。

    修改

    把表中的非主属性对码的部分依赖,把表拆成三个表

    学生表:

    包括:stu_id,stu_name,stu_sex。

    课程表:

    包括:course_id,course_name。

    学生选课表:

    包括:stu_id,course_id,teacher,title,score。

     

     把数据表拆分成三个表后,

                                             stu_id--完全依赖-->stu_name,

                                             stu_id--完全依赖-->stu_sex,

                                             course_id--完全依赖-->couse_name。

    表中所有非主属性对码都是完全依赖,所以满足第二范式。

    第三范式

    定义

    若关系模式R∈2NF,且每一个非主属性都不传递依敕于码,则R∈3NF。

    举例

    上面第二范式修改的学生选课表,包括:stu_id,course_id,teacher,title,score。

     

    分析

    学生选课表中(stu_id,course_id)-->teacher,teacher-->title,存在传递函数依赖关系(stu_id,course_id)--->title,所以不满足第三范式。

    修改

    把学生选课表拆分为一个选课表,一个教师表,一个教师职称表

    选课表

    包括:stu_id,course_id,teacher_id,score

     教师表

    包括:teacher_id,teacher_name,title_id。

     教师职称表

    包括:title_id,title_name

    拆分后,在选课表中,不存在函数依赖,满足第三范式。

    备注

    以上每个属性对应多个值时可是枚举出数据个数,例如可以把性别,课程单独建一张表,性别只有两个值,男生和女生;

    性别表:

     新的学生表:

    出来混总是要还的
  • 相关阅读:
    【python3.8】斐波拉契数列实现
    【Java开发基础】计算两个毫秒之间相差多少天
    FileZilla关闭更新检测
    【Java开发基础】生成两个正数之间的随机数
    Thinkphp6笔记十九:加载自定义配置
    linux系统安装坚果云
    vim NERDTree 目录插件常见用法
    vim 插件管理
    vim 窗口分割 以及 tab常用操作
    vim Ntree 树形目录常见用法
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/13888544.html
Copyright © 2020-2023  润新知