zoukankan      html  css  js  c++  java
  • 谈谈我对数据库三范式的字面理解

    今天看了看《数据结构系统原理》(黄靖 主编)这本书(备考自考,不然以我的品味,直接豆瓣9.0以上,哈哈哈)
    首先看下书上给出的定义:

    • 第一范式(1NF):设 R 为任一给定关系,若 R 中的每个列与行的交点处的取值都是不可再分的基本元素,则 R 为第一范式
    • 第二范式(2NF):设 R 为任一给定关系,若 R 为 1NF,且其所有非主属性都完全函数依赖于候选关键字,则 R 为第二范式
    • 第三范式(3NF):设 R 为任一给定关系,若 R 为 2NF,且每一个非主属性都不传递函数依赖关系于候选关键字,则 R 为第三范式

    个人理解:

    • 第一范式(1NF):确保一张表的所有column(或字段)都是不可再分的,这一点我认同书上的说法,比较好理解(针对字段)
    • 第二范式(2NF):确保非主键的字段能够根据主键查询的到,也就是说一张表至少定义一个主键或联合主键(针对主键)
    • 第三范式(3NF):确保每一个非主键,不能具有主键的特性(主键的特性:能够根据它查询到唯一一条数据)(针对表)
    • 举个反例:学生表有学号(主键),姓名,年龄, 系号,系名,系主任
    • 首先存在传递依赖关系:学号->学生->系号->系名->系主任
    • 根据我的定义,该表存在非主键<系号>拥有主键特性,因为可以根据系号查询唯一的<系名>和<系主任>
    • 所以应当将<系名>和<系主任>移至系表,学生表可保留<系号>来索引系表
    • 第三范式(3NF):第一次应该理解错了。应该是非主键关键字,都必须直接依赖主键,不能通过传递依赖的方式依赖主键。

    函数依赖:学生的姓名可以由学号决定,即姓名依赖学号。就像 y = f(x), 可以看出 y 的取值大小依赖于 x 的大小
    关于什么叫候选关键字,可以参考我的另一篇博客:传送门

    • 综上,个人浅薄理解,若有错误请指出,核证后立即改正
  • 相关阅读:
    Pthread使用总结
    OpenCV同态滤波
    重复文件重新创建
    Consider using the `--user` option or check the permissions.
    错误:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
    python tkinter模版
    tkinter页面卡死
    视频下载
    tkinter学习系列(三)之Label控件
    Entry小部件:
  • 原文地址:https://www.cnblogs.com/eahau/p/10980361.html
Copyright © 2011-2022 走看看