zoukankan      html  css  js  c++  java
  • MYSQL:基础——3N范式的表结构设计

    于3N范式的数据表设计

    范式

    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小

    关系数据库现有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

    第三范式

    说明:

    定义:

      设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非主属性Z(Z不包含Y)使得X->Y,Y->Z成立,Y推不出X,则R<U,F>∈3NF。

      定义实属枯燥难懂,简单理解即为,若R<U,F>∈3NF,则每一个非主属性既不传递依赖于码,也不部分依赖于码。3NF是基于2NF的,2NF要求每一个非主属性完全依赖于任何一个候选码。

    码:主码或候选码都简称为码。

    完全依赖:在R(U)中,如果X->Y,并且对于X的任意一个真子集都不能保证推出Y,则Y对于X完全函数依赖。

    传递依赖:在R(U)中,如果X->Y(X不包含Y),Y->Z(Y不包含Z),则称Z对X完全传递函数依赖。

    举个例子:

    假定学生关系表为:

    Student:[学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话]

    分析:

    这个表结构是符号2NF的,因为从学号可以推出所有的非主属性。但是存在如下关系: 

     

    即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

    它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。

    把学生关系表分为如下两个表:

      学生:[学号, 姓名, 年龄, 所在学院];

      学院:[学院, 地点, 电话]。

    这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。

  • 相关阅读:
    词汇表处理脚本
    jLowNote又,我为什么要说又,有bug
    于是按照贴吧某同学的指教,把imageViewer里那个愚蠢的语句改了
    捉到Bug一只,jLowNote里的
    高产赛母猪
    我超喜欢Nimbus风格的!
    专注写记事本三十年
    秒秒钟食言
    别再打了,Java和Python,你们其实都是C
    电话本写完了,发个1.0吧
  • 原文地址:https://www.cnblogs.com/MrSaver/p/8083392.html
Copyright © 2011-2022 走看看