页面加载中
博客快捷键
按住 Shift 键查看可用快捷键
ShiftK
开启/关闭快捷键功能
ShiftA
打开/关闭中控台
ShiftD
深色/浅色显示模式
ShiftS
站内搜索
ShiftR
随机访问
ShiftH
返回首页
ShiftL
友链页面
ShiftP
关于本站
ShiftI
原版/本站右键菜单
松开 Shift 键或点击外部区域关闭
互动
最近评论
暂无评论
标签
寻找感兴趣的领域
暂无标签
    0
    文章
    0
    标签
    8
    分类
    10
    评论
    128
    功能
    深色模式
    标签
    JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
    互动
    最近评论
    暂无评论
    标签
    寻找感兴趣的领域
    暂无标签
      0
      文章
      0
      标签
      8
      分类
      10
      评论
      128
      功能
      深色模式
      标签
      JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
      随便逛逛
      博客分类
      文章标签
      复制地址
      深色模式
      AnHeYuAnHeYu
      Search⌘K
      博客
        暂无其他文档

        2、规范化理论(下)

        April 28, 20245 分钟 阅读16 次阅读

        范式 和模式分解

        一、范式等级回顾(从低到高)

        范式

        核心要求

        解决的问题

        1NF

        属性不可再分(无多值属性)

        消除重复组,使表成为平坦结构

        2NF

        在1NF基础上,消除非主属性对候选键的部分函数依赖

        解决部分依赖导致的冗余和更新异常

        3NF

        在2NF基础上,消除非主属性对候选键的传递函数依赖

        解决传递依赖导致的冗余和更新异常

        BCNF

        在3NF基础上,消除所有属性(包括主属性)对候选键的部分和传递依赖

        解决主属性之间的依赖问题(更严格)

        📌 关键区分

        • 2NF:只针对非主属性,且要求完全依赖(不能只依赖复合主键的一部分)。

        • 3NF:针对非主属性,要求不能传递依赖(如学号→学院→院长)。

        • BCNF:针对所有属性(包括主属性),要求每个决定因子都必须是候选键。

        例子速记

        • 1NF 违反:电话字段存多个号码(如“138...,139...”)。

        • 2NF 违反:选课表(学号,课程号,课程名)中“课程名”只依赖于课程号(部分依赖)。

        • 3NF 违反:学生表(学号,学院,院长)中“院长”依赖于“学院”,而“学院”依赖于“学号”(传递依赖)。

        • BCNF 违反:教师表(教师号,课程号,系名)中,教师→系名,但系名→课程号?(不典型)更常见的是:存在候选键A→B,但B不是候选键。


        二、模式分解(Decomposition)

        1. 为什么要分解?

        • 消除数据冗余、插入/更新/删除异常。

        • 将不满足范式的关系拆分成多个满足更高范式的关系。

        2. 分解的两个重要性质

        性质

        含义

        重要性

        无损连接性(Lossless Join)

        分解后再自然连接能还原回原关系(不丢失信息,不产生额外元组)

        必须保证

        保持函数依赖(Preserve Dependency)

        分解后所有函数依赖仍能被各子关系的依赖集逻辑蕴含

        最好保证,但有时为了BCNF可牺牲

        3. 判断无损连接的方法(二维表法或公共属性闭包法)

        • 简单法:分解为 R1 和 R2,若 R1 ∩ R2 → R1 - R2 或 R1 ∩ R2 → R2 - R1 成立,则无损。

        • 通用法:使用表格法(Chase算法),考试中通常用上述简单法。

        4. 判断保持函数依赖

        • 将每个函数依赖的左右属性集分别检查是否全部出现在同一个分解的子关系中。若不都在同一个子关系,则可能不保持。

        • 更严格:对每个 FD X→Y,计算 X 在分解上的投影闭包,若 Y 在其中则保持;否则不保持。

        最后更新于 April 28, 2026
        On this page
        暂无目录