zoukankan      html  css  js  c++  java
  • 数据库规范化

    个人理解,水平低下,谨慎阅读

    一.函数依赖

    如果知道A就可以知道B,则B函数依赖于A
    如果知道A就可以知道B,则B部分函数依赖于(A,C)
    如果知道A就可以知道B,知道B就可以知道C,则C传递函数依赖于A

    二.第一范式

    关系中的每一个属性都是不可拆分的

    三.第二范式

    在满足第一范式的基础上,每一个非主属性完全函数依赖于主属性
    也就是说不存在一个非主属性部分函数依赖于主属性

    注:码可能由多个属性构成,构成码的属性就是主属性

    四.第三范式

    在满足第二范式的基础上,不存在非主属性传递依赖于
    或许可以理解为,没有在非主属性函数依赖于另一个非主属性,因为非主属性一定函数依赖于码

    五.BCNF

    NF就是范式
    BCNF是指在第三范式基础之上,每一个决定因素都包含码
    我不是很能理解这个,因为:
    第二范式规定了不能存在部分依赖
    第二范式规定了不能存在传递依赖
    也就是说,一个非主属性一定直接依赖于
    这不就是每一个决定因素都包含码吗?
    即使有多个候选码,不也应该如此吗
    当然,这一切都建立与第一范式到BC范式是层层递进的情况下
    毕竟还有一种说法,是第二范式到BC范式分别建立在第一范式的基础之上

    六:多值依赖

    定义直接抄书好了

    (R(U))是属性集(U)上的一个关系模式,(X,Y,Z)(U)的子集,并且 (Z=U-X-Y)。关系模式(R(U))中多值依赖(X→→Y)成立,当且仅当对(R(U))的任一关系(r),给定的((x,z))值,有一组(Y)的值,这组值仅仅决定于(X)值而与(Z)值无关

    当一张表的所有属性((X,Y,Z))都是主属性,((X1,Y1))对应了一组(Z)
    比如
    X1 Y1 Z1
    X1 Y1 Z2
    X1 Y1 Z3
    然而,((X1,Y2))也对应了一组(Z)值,并且与((X1,Y1))对应的Z值完全相同
    X1 Y2 Z1
    X1 Y2 Z2
    X1 Y2 Z3
    这两部分表合在一起,你就会发现,Z的取值与Y无关,这便是多值依赖

    如果(Z)是空集,则(X→→Y)是平凡的

    七.第四范式

    关系模式中,不允许有非平凡且非函数的多值依赖

  • 相关阅读:
    Django(03):Django 创建第一个项目
    Django(02):Django安装
    Django(01):Django简介
    对程序员来说,看透生死远远没有操作0和1那么简单
    一个中年程序员遇到突发情况的一些胡言乱语
    gradle查看项目属性列表
    有道云笔记到简书的迁移工具
    pygame.mixer.Channel--音频通道
    pygame.mixer.Sound音频
    pygame--图像变换
  • 原文地址:https://www.cnblogs.com/ZGQblogs/p/12464860.html
Copyright © 2011-2022 走看看