zoukankan      html  css  js  c++  java
  • 解析:数据库设计的三范式


    为什么要在数据库设计时使用三范式?

    答:在设计数据库中为了更好的解决数据冗余、数据有效性、提高存储效率考虑。

    什么是数据冗余?

    答:数据冗余指一个数据在一个或者多个数据文件中重复存储。这里就要设计到“键”的概念。

    一、键的概念

    超键:能够决定一条记录的单个属性或属性集合。

    候选键不含多余属性的超键。

    主键:选择其中一个候选键。

    假设:在师范学院,学号、课程号没有重复的情况下下,考虑以下属性

          学号

       姓名   

      课程号  

      成绩  

      课程名称  

       10070541001  

       张三

      001

       98

       张飞

       10070541002

       李四  

      001

       98

       张飞

       10070541002

       李四

      002  

       96

       赵刚

     

    判断是超键吗?

    (学号)不能够决定一条记录,不是超键

    (学号、成绩)不能够决定一条记录,不是超键

    (学号、课程号)能够决定一条记录,是超键

    (学号、课程号、成绩)能够决定一条记录,是超键

    ——从这里看出,超键的组合是唯一决定一条记录的,但是可能不是最小唯一的。

     

    判断是候选键吗?

    (课程号、课程名称)唯一,但“课程名称”为多余的属性(即由课程号可以推出课程名称,或者说如果不使用课程名称也能唯一的表示一条数据实体),因此不是候选键。

    (学号、课程号)唯一,没有多余的属性所以为候选键

    ——从这里看出,候选键是最小的超键,也就是说没有多余属性的超键。

     

    二、函数依赖

    (一)为什么会出现出现数据冗余?

    答:因为数据依赖。数据依赖的典型例子就是:函数依赖。

    (二)什么是函数依赖?

    答:(专业术语)若对于R(U)的任意两个可能的关系r1、r2,若r1[x]=r2[x],则r1[y]=r2[y],或者若r1[x]不等于r2[x],则r1[y]不等于r2[y],称X决定Y,或者Y依赖X。(通俗的讲)在一个关系模式中,一个属性或者属性集合x决定另一个属性y。则:y依赖x。否则不决定,就不依赖。

    (三)函数依赖分类:

    1、 平凡依赖与非平凡依赖:

    2、 部分依赖与完全依赖:

    3、 传递依赖与函数依赖:

    三、数据库三范式:

    第一范式1NF:原子性

    定义:是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

    第二范式2NF:消除部分依赖

    定义:第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

    第三范式3NF:消除传递依赖

    定义:满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。



  • 相关阅读:
    Windows10字体模糊解决方法
    Synaptics触摸板在Windows10下双击弹出右键菜单无效的解决方法
    JDBC连接字符串及参数
    IntelliJ IDEA数据库工具连接MySQL提示Download missing driver files
    IntelliJ IDEA利用数据表生成JavaBean
    Windows下MySQL8.0的配置文件及数据库的默认目录
    MySQL配置说明
    (medium)LeetCode 221.Maximal Square
    (medium)LeetCode 222.Count Complete Tree Nodes
    (medium)LeetCode 224.Basic Calculator
  • 原文地址:https://www.cnblogs.com/riskyer/p/3226249.html
Copyright © 2011-2022 走看看