SQL基础:数据库规范化与三范式
数据库规范化与范式
冗余导致多种更新异常,也就是插入、更新和删除行的操作困难。
规范化(normalization)是通过修改表以减少冗余和矛盾的一系列步骤。
在每一步之后,数据库都达到一个特定的范式(normal form) 。
关系模型定义了三种范式,以著名的序数命名。
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
每一种范式都比前一种更健壮。符合3NF的数据库也符合2NF和1NF。规范化水平越高,表的数量也越多。
无损分解(lossless decomposition)能确保表的分割不会引起信息丢失。
依赖-保持分解(dependency-preserving decomposition)能确保联系不丢失。
当表被分割的时候,存在匹配的主键和外键列不应被认为是多余的数据。
规范化不是系统化,它是一个涉及重复表的分割、重新联结和精炼的迭代过程。
第一范式(1NF)
满足第一范式的表:
列仅包含原子值。
没有重复的组。
原子值(也称为标量值)是不能再细分的单一值。
重复的组是两个或多个逻辑相关联的列的集合。
第二范式(2NF)
当满足下列条件时,第一范式的表自动满足第二范式:
主键是一个列(也就是说,关键字不是组合的)。
表中所有的列是主键的一部分(单一的或组合的)。
满足第二范式的表:
满足第一范式。
非部分函数依赖。
如果表中的一些组合键(但不是全部)值确定了一个非键列的值,则表包含部分函数依赖。
第二范式表是完全函数依赖,意味着如果组合键中任何一列值改变,将导致非键列的值需要被更新。
第三范式(3NF)
满足第三范式的表:
满足第二范式。
没有传递依赖。
如果一个非键列的值确定了另一个另一个非键列的值,则表包含传递依赖。
在第三范式的表中,非键列相互独立并且只依赖于主键列。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了