【数据库设计】深入理解常见范式

第一范式(1NF):数据原子性奠基者

核心要求:字段不可再分,消除重复数据组

  • 设计哲学:建立数据存储的基本单元标准
  • 实现要点:
    1. 每个字段存储单一类型数据
    2. 消除横向重复(多值字段)
    3. 消除纵向重复(重复记录组)
  • 典型反例:存储"张三,李四,王五"的共享字段
  • 升级方法:
    -- 错误示范
    CREATE TABLE BadDesign (
        OrderID INT PRIMARY KEY,
        Items VARCHAR(200)  -- 存储多个商品信息
    );
    
    -- 符合1NF
    CREATE TABLE OrderItems (
        OrderID INT,
        ItemID INT,
        Quantity INT,
        PRIMARY KEY (OrderID, ItemID)
    );
    
第二范式(2NF):消除数据寄生关系

核心要求:消除非主属性对候选键的部分依赖

  • 设计哲学:确保数据实体的独立性
  • 关键验证:
    • 每个非主属性必须完全依赖所有候选键
    • 存在单字段主键时自动满足
  • 典型案例分析:
    -- 不符合2NF的表结构
    CREATE TABLE Sales (
        OrderID INT,
        ProductID INT,
        CustomerName VARCHAR(50),  -- 依赖OrderID
        ProductPrice DECIMAL,     -- 依赖ProductID
        PRIMARY KEY (OrderID, ProductID)
    );
    
    解构方案:
    • 拆分为Orders表(OrderID, CustomerName)
    • Products表(ProductID, ProductPrice)
    • OrderDetails表(OrderID, ProductID, Quantity)
第三范式(3NF):切断传递依赖链

核心要求:消除非主属性间的传递依赖

  • 设计哲学:建立数据元素的直接关联
  • 依赖关系验证:
    • 不存在A→B→C的传递链
    • 所有非主属性直接依赖候选键
  • 典型改进案例:
    -- 不符合3NF的员工表
    CREATE TABLE Employees (
        EmployeeID INT PRIMARY KEY,
        DepartmentID INT,
        DeptLocation VARCHAR(50)  -- 通过DepartmentID间接依赖
    );
    
    -- 符合3NF的拆分
    CREATE TABLE Departments (
        DepartmentID INT PRIMARY KEY,
        DeptLocation VARCHAR(50)
    );
    
BC范式(BCNF):候选键的绝对主权

核心要求:所有决定因素都必须是候选键

  • 设计哲学:建立绝对的主键权威
  • 与3NF的核心差异:
    • 3NF允许主属性决定其他属性
    • BCNF要求所有决定因素都是候选键
  • 经典案例解析:
    -- 不符合BCNF的课程表
    CREATE TABLE CourseReg (
        StudentID INT,
        CourseID INT,
        InstructorID INT,  -- 由CourseID决定
        PRIMARY KEY (StudentID, CourseID)
    );
    
    改进方案:
    CREATE TABLE CourseInstructor (
        CourseID INT PRIMARY KEY,
        InstructorID INT
    );
    
    CREATE TABLE StudentCourses (
        StudentID INT,
        CourseID INT,
        PRIMARY KEY (StudentID, CourseID)
    );
    
范式演进关系图示
非规范化表
    │
    ▼ 消除重复组
1NF(原子性)
    │
    ▼ 消除部分依赖
2NF(完全依赖)
    │
    ▼ 消除传递依赖
3NF(直接依赖)
    │
    ▼ 消除主属性依赖
BCNF(超键依赖)
实践权衡策略
  1. 存储优化:当读取频率远高于更新时,允许可控冗余
  2. 性能优先:在复杂查询场景保留计算字段
  3. 历史追溯:审计字段可不严格遵循范式
  4. 高频事务:支付系统建议至少达到3NF
  5. 分析系统:数据仓库可采用星型/雪花模型打破范式
范式验证流程图
开始
 ↓
是否存在多值字段? → 是 → 违反1NF
 ↓否
是否存在部分依赖? → 是 → 违反2NF
 ↓否
是否存在传递依赖? → 是 → 违反3NF
 ↓否
是否存在非候选键决定因素? → 是 → 违反BCNF
 ↓否
符合BCNF规范

理解范式的关键是要把握每个范式要解决的具体问题:

  • 1NF 解决数据存储格式问题
  • 2NF 解决实体属性归属问题
  • 3NF 解决属性间间接依赖问题
  • BCNF 解决候选键的绝对性问题

实际数据库设计时,建议按照"3NF为基准,BCNF为目标,适当反范式优化"的原则进行设计。在OLTP系统中通常要求至少达到3NF,而在OLAP系统中可以适当放宽范式要求。每次范式升级都应该有明确要解决的数据异常问题,避免为范式而范式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967849.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【原创精品】基于Springboot3+Vue3的学习计划管理系统

大家好,我是武哥,最近给大家手撸了一个基于SpringBoot3Vue3的学习计划管理系统,可用于毕业设计、课程设计、练手学习,系统全部原创,如有遇到网上抄袭站长的,欢迎联系博主~ 项目演示视频 https://www.bili…

从零到一:我的元宵灯谜小程序诞生记

缘起:一碗汤圆引发的灵感 去年元宵节,我正捧着热腾腾的汤圆刷朋友圈,满屏都是"转发锦鲤求灯谜答案"的动态。看着大家对着手机手忙脚乱地切换浏览器查答案,我突然拍案而起:为什么不做一个能即时猜灯谜的微信…

RAG 在智能答疑中的探索

一、背景 得物开放平台是一个把得物能力进行开放,同时提供给开发者提供 公告、应用控制台、权限包申请、业务文档等功能的平台。 面向商家:通过接入商家自研系统。可以实现自动化库存、订单、对账等管理。 面向ISV :接入得物开放平台&#…

Flutter编译问题记录

问题: 运行出现以下报错 Launching lib/main.dart on macOS in debug mode... Warning: CocoaPods not installed. Skipping pod install. CocoaPods is a package manager for iOS or macOS platform code. Without CocoaPods, plugins will not work on iOS or …

长安汽车发布“北斗天枢2.0”计划,深蓝汽车普及全民智驾

2月9日,长安汽车智能化战略“北斗天枢2.0”计划暨深蓝汽车全场景智能驾驶解决方案发布会在重庆盛大召开。此次发布会标志着长安汽车正式迈入智能化战略的新纪元,携手众多“中国智驾合伙人”,共同开启全民智驾元年。 发布会上,长安…

Java--集合(理论)

目录 一、collection collection常用方法 1.List(可以存在重复元素) 迭代器 迭代器的概念 注意事项 例子 1.ArrayList 特点 2.LinkedLIst 特点 3.Vector 特点 2.Set(无重复元素) 1.HashSet 特点 2.Linkedhashset&…

三相绕线型异步电动机转子串电阻器起动的建模仿真

1.引言 2.起动方法与原理 3. 起动器的分级电阻计算 4. 起动时间计算 5.三相异步电动机瞬态数学模型 6. 三相绕线型异步电动机转子串电阻器系统仿真模型 7.实例仿真分析 8.总结 1.引言 三相绕线型异步电动机转子串电阻器起动的研究文章有很多很多,但大多数都不…

用Python编写经典《贪吃蛇》小游戏

文章目录 环境准备依赖库 实现思路核心模块设计 代码框架运行效果优化建议总结通过本框架可实现基础版贪吃蛇游戏,关键点在于:典型问题解决方案: 环境准备 依赖库 主要依赖 Python 3.6pygame 2.1.2 # 用于图形界面渲染 安装命令 pip ins…

防洪先锋,应急防洪墙助力灾害应急响应|深圳鼎跃

在全球极端天气频发的背景下,洪涝灾害日益成为威胁人类安全的重要因素。传统的防洪措施如堤坝、沙袋虽有一定效果,但在突发性洪水面前往往难以迅速部署。 应急防洪墙是一种模块化、可移动的临时防洪结构,通过拼插、折叠或液压驱动快速形成刚性…

从Word里面用VBA调用NVIDIA的免费DeepSeekR1

看上去能用而已。 选中的文字作为输入,运行对应的宏即可;会先MSGBOX提示一下,然后相关内容追加到word文档中。 需要自己注册生成好用的apikey Option ExplicitSub DeepSeek()Dim selectedText As StringDim apiKey As StringDim response A…

高通android WIFI debug

参考高通文档:80-76240-16_REV_AA_Wi-Fi_Debug_Techniques 大纲 一、 WLAN Debug Logs –logcat ■ Logcat log logcat is a command-line tool that dumps the log of system messages, ■ Including stack traces when the device throws an error. ■ Need t…

Python:凯撒密码

题目内容: 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符,对应关系如下: 原文:A B C D E F G H I J K L M N O P Q R …

基于STM32的智能鱼缸水质净化系统设计

🤞🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…

STM32系统架构介绍

STM32系统架构 1. CM3/4系统架构2. CM3/4系统架构-----存储器组织结构2.1 寄存器地址映射(特殊的存储器)2.2 寄存器地址计算2.3 寄存器的封装 3. CM3/4系统架构-----时钟系统 STM32 和 ARM 以及 ARM7是什么关系? ARM 是一个做芯片标准的公司&#xff0c…

美甲美睫门店拓客营销小程序开发

一套针对美甲美睫门店开发的营销拓客小程序 小程序支持线上线下服务预约、客户管理、多种客户营销方式以及员工管理、门店管理、门店营销活动创建开展等等。 用户端:服务预约、次卡、时卡办理,会员办理、会员升级、会员权益,复购攒积分&…

deepseek+“D-id”或“即梦AI”快速生成短视频

1、deepseek生成视频脚本 1.1、第一步:使用通用模板提出需求,生成视频脚本 对话输入示例脚本1: 大年初五是迎财神的日志,帮我生成10秒左右的短视频, 体现一家3口在院子里欢庆新年, 孩子在院子里放鞭炮烟…

【STM32】ADC|多通道ADC采集

本次实现的是ADC实现数字信号与模拟信号的转化,数字信号时不连续的,模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法,使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时,0~ 3.3v(模拟信…

从零到一:基于Rook构建云原生Ceph存储的全面指南(上)

文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件1)Rook Operator2)Rook Discover3)Rook Agent 2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.3 获取…

如何在本地部署deepseek?

1、打开ollama官网,点download(下载需要翻墙 https://ollama.com/ 2、双击下载好的OllamaSetup.exe,一直点下一步即可。 3、winR 输入cmd,打开命令提示符,输入ollama。有以下提示即安装完成。 4、可以根据 nvidia-…