• 常见的三类范式


    常见的三类范式

    原文: 「数据库」常见的三类范式 (baidu.com)

    想要弄明白常见的三类范式,需要先搞清楚几个基本概念。

    1.概念

    (1)范式:关系数据库中满足某一特定级别关系的集合。即:关系数据库中的关系是要需要满足一定要求的,满足不同的要求即为不同的范式。

    (2)属性:对表格中的每一列人为定义一个名字,这个名字称为属性。

    (3)码:表中(关系中)某个属性组能够唯一地确定一个元组(表中具体的某一行也称为记录),则称该属性或属性组为码。

    (4)候选码:表中(关系中)某个属性组的值能够唯一地标识一个元组(表中具体的某一行也称为记录),则称该属性或属性组为候选码。

    举例理解码与候选码的关系:

    实体学生具备属性:学号、身份证号、姓名3个属性。则{学号}能够唯一的确定一名学生。同理可得{学号,身份证号}、{学号,身份证号,姓名}、{身份证号}、{身份证号,姓名}也能够唯一的确定一名学生,以上均是码。通过观察以上不同的码,有一部分码中包含多余的属性。将这些多余的属性去掉,进行整合,则{学号},{身份证号}为候选码。在创建数据库时可选择其中的一个候选码做为主码,比如{学号}。

    (4)主属性:包含在候选码中的属性,称为主属性。

    上面例子中的学号、身份证号均是主属性。

    (5)非主属性:不包含在候选码中的属性,称为非主属性或非码属性。

    上面例子中的姓名是非主属性。

    (6)主码:若表中(关系中)有多个候选码,则选定其中的一个为主码(主键)。

    (7)外码:在表中(关系中)属性或属性组A不是该关系的码,但A在另一个表中(关系中)是码,则称A是该关系的外部码,也称外码。

    (8)函数依赖:设R为任一给定关系,如果对于R中属性X的每一个值,R中的属性Y只有唯一值与之对应,则称X函数决定Y或称Y函数依赖于X,记作X—>Y。

    比如:上面例子中学号—>姓名

    (9)完全函数依赖:如果X—>Y,而X1是X的任一真子集,不存在X1—>Y,则称Y对X完全函数依赖。

    比如:{学号,数学课程号}—>某学生的数学成绩。

    (10)部分函数依赖:如果X—>Y,而X1是X的任一真子集,存在X1—>Y,则称Y对X部分函数依赖。

    比如:{学号,课程号}—>{课程名},而{课程号}—>{课程名},刚说明课程号部分函数依赖于{学号,课程号}。

    (11)传递依赖:如果存在X—>Y,不存在Y—>X,存在Y—>Z,则Z对X传递函数依赖。

    比如:学号—>班级号,班级号—>班级名称,则学号—>班级名称(班级名称对学号存在传递函数依赖)。

    2.1NF

    如果关系模式R中的所有属性均是最基本属性,即每个属性均不可再分,则称R属于第一范式,简称1NF。

     非第一范式

    非第一范式的关系转换为第一范式的关系,将所有属性分解为最基本的属性即可。

    第一范式关系

    3.2NF

    如果关系模式R属于1NF,且每一个非主属性完全函数依赖于主码,则称R属于第二范式,简称2NF。

    解读:如果一个关系R的主码仅有一个属性,那么此关系R属于第二范式。

    非2NF关系范式

    上图关系的主码是(学号,课程号),而关系模式中存在学号—>姓名,因此姓名对(学号,课程号)存在部分函数依赖,与2NF的概念不相符。

    去掉部分函数依赖关系的分解步骤如下:

    (1)将主码属性集合的每一个子集作为新的主码构成一个新的关系模式。

    则上图非2NF关系范式可分解为如下三个关系模式。

    S(学号,………)

    K(课程号,……)

    G(学号,课程号,……….)

    (2)将完全依赖于新关系模式主码的属性填写到相应的关系模式中。

    根据上图非2NF关系范式及(1)中的三个新关系模式可得如下三个关系模式。

    S(学号,姓名,性别,系名,公寓名称)

    K(课程号)

    G(学号,课程号,成绩)

    (3)将新关系模式中仅有主码属性的关系模式去掉。

    根据(2)得到的结果去掉表2(课程号)关系模式,最终分解为的关系模式如下:

    S(学号,姓名,性别,系名,公寓名称)

    G(学号,课程号,成绩)

    4.3NF

    如果关系模式R属于2NF,且每一个非主属性不存在传递函数依赖于主码,则称R属于第三范式,简称3NF。

    示例:关系模式S(学号,姓名,性别,系名,公寓名称)中存在学号—>系名,系名—>公寓名称,因此公寓名称对学员传递函数依赖。

    去掉传递函数依赖关系的分解步骤如下:

    (1)依赖于非主码的所有属性,均做删除处理;

    系名—>公寓名称,而系名是非主码,因此从S中删除公寓名称,新的关系S如下:

    S(学号,姓名,性别,系名)

    (2)新建关系模式L,此关系模式包含非主码依赖的所有属性;

    L(系名,公寓名称)

    经过第二范式、第三范式分解后非2NF关系范式转化为以下三个新关系:

    S(学号,姓名,性别,系名)

    G(学号,课程号,成绩)

    L(系名,公寓名称)

     
  • 相关阅读:
    eclipse中springsource-tool-suite(sts)插件安装教程
    maven的安装配置超详细教程【含nexus】
    取消文件与svn服务器的关联
    An internal error occurred during: "Initializing Java Tooling". Eclipse启动发生的错误
    jQuery validate 设置失去焦点就校验和失去焦点就表单校验是否通过
    CSS禁止滚动条
    六十:Flask.Cookie之flask设置cookie的有效域名
    五十九:Flask.Cookie之flask设置cookie过期时间
    五十八:Flask.Cookie之flask设置和删除cookie
    五十七:flask文件上传之使用flask-wtf验证上传的文件
  • 原文地址:https://www.cnblogs.com/chang09/p/16333261.html
Copyright © 2020-2023  润新知