zoukankan      html  css  js  c++  java
  • 数据库的范式模型

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

    函数依赖

    定义一: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
    例如:

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

    其中存在一个依赖关系:

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

  • 相关阅读:
    C# MJPEG 客户端简单实现
    CefSharp 实现多标签页 调用ChromiumWebBrowser的SetAsPopup()后浏览页卡死,的另一种解决方案
    opencv findContours 报错解决记录
    什么叫网关
    分别实现网页播放mp3、flv、wmv、Flash,代码兼容FireFox
    ToString()和Convert.ToString()的用法区别
    asp,asp.net中关于双引号和单引号的用法
    .NET中继承和多态深入剖析(上)
    ASP.NET中不常用的另类绑定方法<%$ %>
    C#日期函数所有样式大全
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2399899.html
Copyright © 2011-2022 走看看