• 数据库的范式模型


    • 特别说明
      本文中的出现的‘对象’,可以理解为数据库中的一条记录。
      本文中的出现的‘属性’,可以理解为数据库中的一条记录中的字段。
      主属性可以理解为数据库中的一条记录的主键。
      非主属性可以理解为数据库中的一条记录的主键以外的字段。

    函数依赖

    定义一:Method(x)=y,x、y是一个对象,x在经过一个函数后会得到y。
    我们就说:x函数确定y,y函数依赖x。x值决定y值,记成:x->y
    例如:

    (学号,课程号)->(成绩)
    (学号,课程号)->(姓名)
    (学号,课程号)->(学号)
    (学号)->(姓名)

    上面的都是x->y模型。

    定义二:x->y,x、y是一个对象,x在经过一个函数后会得到y,y不是x的子集
    我们就说:x->y是非平凡函数,否则为平凡函数
    例如:

    (学号,课程号)->(成绩)是非平凡函数
    (学号,课程号)->(姓名)是非平凡函数
    (学号,课程号)->(学号)是平凡函数
    (学号)->(姓名)是非平凡函数

    任何对象都存在平凡函数,一般我们就只讨论非平凡函数的情况。

    定义三:x->y,x、y是一个对象,x的任何真子集x'都不能x'->y。
    我们就说:x完全属性函数确定y,y完全函数依赖x。完全x对象值决定y值,记成:(full)x->y
    x存在一个真子集x'能得到x'->y。
    我们就说:x非完全属性函数确定y,y非完全函数依赖x。非完全x对象值决定y值,记成:(part)x->y
    例如:

    (学号,课程号)->(成绩)是(full)x->y
    (学号,课程号)->(姓名)是(part)x->y,因为存在(学号)->(姓名)
    (学号)->(姓名)是(full)x->y

    定义四:x->y,y->z,且y->x不成立。
    我们就说:x传递函数确定z。
    例如:
    (学号)->(系别),(系别)->(系主任)

    范式和规范化

    第一范式
    定义:一个对象的所有属性不可再分,符合第一范式,记:1NF
    例如:

    (员工编号,姓名,(基本工资、职务工资)),其中的一个属性可以再分,就不符合第一范式。改成:
    (员工编号,姓名,基本工资,职务工资),符合第一范式

    第二范式
    定义:符合第一范式后,一个对象的非主属性完全函数依赖主属性,符合第二范式,记:2NF
    例如:

    (学号,课程号,姓名,成绩)

    其中的主属性是学号和课程号,应该(full)(学号,课程号)->(姓名,成绩)必须成立才行,

    可惜存在(学号)->(姓名),即存在就不符合第二范式。

    改成:
    (学号,课程号,成绩)和(学号,姓名),符合第二范式

    第三范式
    定义:符合第二范式后,一个对象的非主属性不传递依赖主属性,符合第三范式,记:3NF
    例如:

    (员工编号,宿舍编号,宿舍费用),

    其中存在一个依赖关系:

    (员工编号)->(宿舍编号),(宿舍编号)->(宿舍费用),就不符合第三范式。改成:
    (员工编号,宿舍编号)和(宿舍编号,宿舍费用),符合第三范式

  • 相关阅读:
    Java Synchronized的用法
    静态方法中不能new内部类的实体对象
    android ViewGroup事件分发机制
    安卓设备通过USB接口读取UVC摄像头权限问题
    android View事件分发机制结论
    函数指针与指针函数以及typedef
    GeoHash
    快速排序,C语言实现
    字符串的几个算法
    ANSI C与GNU C
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2409010.html
Copyright © 2020-2023  润新知