关系型数据库的三范式理解

关系型数据库的三范式(Third Normal Form,3NF)是数据库设计中的一种规范化理论,用于减少数据冗余和提高数据一致性。三范式是建立在第一范式(1NF)和第二范式(2NF)的基础上的。以下是三范式的详细解释:

### 第一范式(1NF)

**定义**:1NF要求数据库中的每一个表格的每一个列(字段)都必须是原子性的,即每个字段都只能包含单一值,不能是集合、数组或其他表格。

**举例**:
假设有一个学生表:
| 学生ID | 学生姓名 | 联系电话          |
|--------|----------|------------------|
| 1      | 张三     | 1234567890,9876543210 |

上表不符合1NF,因为“联系电话”列包含了多个值。应该将其拆分为多个记录来符合1NF:
| 学生ID | 学生姓名 | 联系电话  |
|--------|----------|----------|
| 1      | 张三     | 1234567890 |
| 1      | 张三     | 9876543210 |

### 第二范式(2NF)

**定义**:2NF在1NF的基础上,要求表格中的每一列都必须完全依赖于整个主键,而不能只依赖于主键的一部分(即消除部分依赖)。

**举例**:
假设有一个课程表:
| 课程ID | 学生ID | 学生成绩 | 学生姓名 |
|--------|--------|----------|----------|
| 101    | 1      | 85       | 张三     |
| 102    | 2      | 90       | 李四     |

上表不符合2NF,因为“学生姓名”依赖于“学生ID”而不是整个主键(“课程ID”和“学生ID”)。应该将其拆分为两个表:
学生表:
| 学生ID | 学生姓名 |
|--------|----------|
| 1      | 张三     |
| 2      | 李四     |

课程表:
| 课程ID | 学生ID | 学生成绩 |
|--------|--------|----------|
| 101    | 1      | 85       |
| 102    | 2      | 90       |

### 第三范式(3NF)

**定义**:3NF在2NF的基础上,要求表格中的每一列都必须直接依赖于整个主键,而不能通过其他非主键列间接依赖于主键(即消除传递依赖)。

**举例**:
假设有一个订单表:
| 订单ID | 客户ID | 客户名称 | 订单金额 |
|--------|--------|----------|----------|
| 201    | 1      | 张三     | 500      |
| 202    | 2      | 李四     | 700      |

上表不符合3NF,因为“客户名称”依赖于“客户ID”,而“客户ID”又依赖于“订单ID”(主键)。应该将其拆分为两个表:
客户表:
| 客户ID | 客户名称 |
|--------|----------|
| 1      | 张三     |
| 2      | 李四     |

订单表:
| 订单ID | 客户ID | 订单金额 |
|--------|--------|----------|
| 201    | 1      | 500      |
| 202    | 2      | 700      |

### 总结
- **1NF**:消除重复的组,确保每列都是原子性的。
- **2NF**:消除部分依赖,确保每列完全依赖于主键。
- **3NF**:消除传递依赖,确保每列直接依赖于主键。

通过遵循这些范式,可以设计出结构良好的数据库,减少数据冗余,提高数据一致性和可维护性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之创建高性能的索引(四)

创建高性能的索引 空间数据索引(R-Tree) MyISAM表支持空间索引,可以用作地理数据存储。和B-Tree索引不同,这类索引无须前缀查询。空间索引会从所有维度来索引数据。查询时,可以有效地使用任意维度来组合查询。必须使用MySQL的GIS相关函数如…

AcWing 2568:树链剖分 ← 线段树+DFS

【题目来源】https://www.acwing.com/problem/content/2570/【题目描述】 给定一棵树,树中包含 n 个节点(编号 1∼n),其中第 i 个节点的权值为 ai。 初始时,1 号节点为树的根节点。 现在要对该树进行 m 次操作&#xf…

5.28总结

HTML 三剑客&#xff1a; JS CSS HTML 入门实例 新建一个test.html文件&#xff0c;内容如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

央视网视频下载和花屏问题处理

央视网(www.cctv.com)视频下载往往是花屏的&#xff0c;如何处理呢&#xff1f; 如果您是IT技术开发者&#xff0c;那么您可以通过下面步骤自己实现。 用chrome浏览器&#xff0c;F2打开开发者工具&#xff0c;找到当前页面的network 然后找一个接口&#xff1a;https://vdn.a…

【Python-基础】字典合集

遍历所有键 # vis_params{vis_level: -1, line_thickness: 500} for key in vis_params.keys():注&#xff1a; vis_params &#xff1a; 字典数据 未完待续…

Android UI:ViewTree: 监听

文章目录 涉及设计模式 ​​​​​​​​​​​​​​观察者模式+策略模式API源码分析总结涉及设计模式 观察者模式+策略模式 被观察者:ViewTree ViewTree持有一个观察器ViewTreeObserver 系统在ViewRootImpl和View的相关方法中调用ViewTreeObserver上的注册的监听器的方法,…

文生图模型演进:AE、VAE、VQ-VAE、VQ-GAN、DALL-E 等 8 模型

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

OC IOS 文件解压缩预览

热很。。热很。。。。夏天的城市只有热浪没有情怀。。。 来吧&#xff0c;come on。。。 引用第三方库&#xff1a; pod SSZipArchive 开发实现&#xff1a; 一、控制器实现 头文件控制器定义&#xff1a; // // ZipRarViewController.h // // Created by carbonzhao on 2…

JavaScript与版本控制:编译时光机的双重奏——git仓库

JavaScript与版本控制&#xff1a;编译时光机的双重奏——git仓库 JavaScript&#xff1a;代码的魔法棒版本控制&#xff1a;时光机的钥匙案例一&#xff1a;初始化Git仓库与基本操作初始化仓库添加文件至暂存区提交更改分支管理 案例二&#xff1a;JavaScript项目中的Gitignor…

OTFS系统建模、通信性能分析、信道估计、模糊函数【附MATLAB代码】

文献来源&#xff1a;​微信公众号&#xff1a;EW Frontier OTFS简介 OTFS信道估计 % Clear command window, workspace variables, and close all figures clc; clear all; close all; ​ % Define Eb values in dB EbdB -10:2:10; ​ % Convert Eb values from dB to lin…

【测评】香橙派 AIpro上手初体验

AI毋庸置疑是近年来&#xff0c;热度最高的技术之一&#xff0c;作为一名工程师拥抱新技术的同时不可或缺的需要一块强悍的开发板&#xff0c;香橙派 AIpro除了拥有好看的皮囊之外&#xff0c;还拥有一个有趣且充满魅力的灵魂。作为一位长期活跃在嵌入式开发领域的工程师&#…

OrangePi AIpro (8T)使用体验,性能测试报告

前言 这段时间收到了CSDN和香橙派的邀请&#xff0c;对OrangePi AIpro进行体验测评&#xff0c;在此感谢CSDN对我的信任&#xff0c;也感谢香橙派能做出如此优秀的开发板。 可喜可贺&#xff0c;周三晚上我收到了官方寄出的OrangePi AIpro。出于对国产芯片的好奇&#xff0c…

二分答案思想下的二进制问题

序列合并 题目描述 给定一个长度为 n n n 的非负整数序列 { a n } \{a_n\} {an​}&#xff0c;你可以进行 k k k 次操作&#xff0c;每次操作你选择两个相邻的数&#xff0c;把它们合并成它们的按位或。 形式化地&#xff0c;一次操作中&#xff0c;你选择一个下标 i i …

前端 webSocket配置代理

vue, react. nginx 配置反向代理&#xff0c;解决跨域问题 前端请求 如果配置了 wss 协议&#xff0c; 可以将ws 替换为 wss 这里和我们通常使用的方式不同websocket 需要传入完整的地址&#xff0c;然后才能去做代理 let url ${location.protocol https ? wss : ws}://$…

李廉洋:5.29黄金原油持续震荡,今日美盘行情走势分析及策略。

黄金消息面分析&#xff1a;美联储理事鲍曼周二表示&#xff0c;她支持要么先等等再开始放缓缩减资产负债表&#xff0c;要么采取比本月早些时候宣布的更温和的放慢缩表进程。鲍曼认为商业银行准备金水平仍然充足&#xff0c;这让官员们有更多时间来推进缩表进程。“在准备金接…

unity 多个相机的问题

前段时间写个小功能&#xff0c;发现个问题在scene里面写好了程序&#xff0c;但是导出后显示的和场景里面完全不一样经过查找后发现&#xff0c;原来是我购买的模型下面他自己带了一个相机&#xff0c;在打包出去后&#xff0c;显示的是这个相机的渲染内容。只要把这个相机删除…

你的手机是如何控制你的手表之广播篇

前言 要让手机能够控制手表&#xff0c;第一步当然要让手机能够“看见”手表&#xff0c;人类作为上帝视角&#xff0c;我们是能够通过眼睛直接看见手机和手表的&#xff0c;但要让手机“看见”手表&#xff0c;就需要一端把自己的信息通过电磁波的形式发往空中&#xff0c;另…

Excel中怎样将第一行建立好的规则套用到每一行?

考虑使用条件格式来完成&#xff0c;有两种方式可以尝试&#xff1a; 一、一次性创建条件格式 1.选中需要设置条件格式的区域&#xff0c;如果是不连续的区域&#xff0c;可以按住Ctrl键&#xff0c;然后用鼠标依次选中需要的数据区域 2.点击 开始选项卡&#xff0c;条件格式…

解决Plugin ‘maven-clean-plugin:3.1.0‘ not found的问题

1. 问题描述 当导入别人的Maven项目时&#xff0c;可能会出现Plugin maven-clean-plugin:3.1.0 not found的错误信息。 2. 解决方案 2.1 方案一 检查自己的Maven仓库地址是否正确&#xff0c;一般引入其他人的项目时&#xff0c;Maven仓库的目录以及配置都会是别人的&#xff…

TypeScript 学习笔记(四):装饰器与高级编程技巧

1. 引言 在前几篇学习笔记中,我们已经了解了 TypeScript 的基础知识、高级类型系统以及模块与命名空间的使用。本篇将深入探讨 TypeScript 中的装饰器与一些高级编程技巧,帮助你在实际项目中更好地利用 TypeScript 的强大功能。 2. 装饰器 装饰器(Decorators)是 TypeScr…