zoukankan      html  css  js  c++  java
  • 关系型数据库的1NF、2NF、3NF

    一直是似懂非懂,今天似乎搞明白了,当然也希望有人帮我指正。

    这有一文,说得不错:https://zhidao.baidu.com/question/624751186930899444.html

    首先我们明确符合3NF的,必然符合2NF;符合2NF,也符合1NF;三者是一个包含关系。所以我认为重点是如何界定符合2NF,但不符合3NF的情形。

    先来看看这个关系

    R(学号,姓名,性别,年龄,所在系的编号,所在系的名称)

    在这个关系中,主码是(学号),各个非主属性对主码的依赖关系有:学号→姓名,学号→性别,学号→年龄,学号→所在系编号,

    另外还存在依赖关系:所在系的编号→所在系的名称,即所在系名称对主码(学号)存在传递依赖,所以属于2NF。

    2NF是关系中存在传递依赖,但不存在部分依赖的关系,3NF是关系中既不存在部分依赖,也不存在传递依赖的关系。

    可以分割为两个关系,以消除传递依赖,使其符合3NF:
    R1(学号,姓名,性别,年龄,所在系的编号),R2(所在系的编号,所在系的名称)

    那么什么叫部分依赖关系呢?

    看这个关系

    R(课程号,学生编号,姓名,性别,考试成绩,课程名)

    在这个关系中,主码是(课程号,学生编号),各大非主属性对主码的依赖关系有:(课程号,学生编号)→考试成绩,同时存在部分依赖关系学生编号→姓名,学生编号→性别,课程号→课程名

    所以以上关系不属于2NF,只能算是1NF。部分依赖关系是指非主属性只依赖于部分主码。

  • 相关阅读:
    Spring MVC入门——day01
    Spring5学习笔记——day05
    [BJDCTF2020]The mystery of ip
    [网鼎杯 2020 青龙组]AreUSerialz
    [网鼎杯 2018]Fakebook
    文件上传绕过学习
    [极客大挑战 2019]PHP
    无参数RCE总结及文件读取学习
    java中多线程执行时,为何调用的是start()方法而不是run()方法
    minconda安装配置
  • 原文地址:https://www.cnblogs.com/kevin-Y/p/14813763.html
Copyright © 2011-2022 走看看