数据库三范式(1NF、2NF、3NF)

news2024/11/24 0:07:34

1NF(第一范式)

定义:确保每一列都是原子值,即是不可分割的基础数据项

所谓第一范式(1NF)是指在关系模型中,对于添加列的一个规范要求,所有的列都
应该是原子性的,即数据库表的每一列都是不可分割的原子数据项
,而不能是集合,
数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属
性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一
部分。简而言之,第一范式就是无重复的域。

比如地址,我们可以存为辽宁省大连市甘井子区。那么这样其实就不满足,因为我们
把省市区放在一起存储了。我们将地址进行拆分存储即可。省,市,区。这样满足
第一范式。

2NF(第二范式)

定义:在满足1NF的基础上,消除非主键字段对主键字段的部分(函数)依赖

部分函数依赖是指在一个关系表中,非主属性(即非主键字段)依赖于主键的一部分,而不是整个主键。在第二范式(2NF)中,要求非主属性必须完全依赖于主键,这意味着非主属性不能只依赖于主键的一部分。

第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

部分函数依赖的例子:

假设Student表的结构如下:

学生编号学生姓名班级编号院系课程编号成绩
S01杨明D01思齐C0190
S02李婉D01思齐C0187
S01杨明D01思齐C0292
S03刘海D02述圣C0195
S04安然D02述圣C0278
S05乐天D03省身C0182

复合主键是指由多个字段组合起来,共同作为表的主键,这些字段的组合值必须是唯一的,用来唯一标识表中的每条记录。

学生编号是作为识别学生的唯一标识,我们可以假设它是主键。但是,如果我们考虑到成绩是针对每个学生编号和课程编号组合的,那么在这个特定场景下,学生编号和课程编号一起构成了复合主键因为只有这两个字段的组合才能唯一确定一条记录。

部分函数依赖的情况是指在一个复合主键的情况下,非主属性依赖于主键的一部分。例如,如果学生姓名、班级编号和院系只依赖于学生编号而不依赖于课程编号,那么这些非主属性就对复合主键(学生编号,课程编号)存在部分函数依赖。

为了消除这种部分函数依赖,我们可以将表拆分成两个:

  1. 学生基本信息表(只包含学生编号、学生姓名、班级编号和院系):
学生编号学生姓名班级编号院系
S01杨明D01思齐
S02李婉D01思齐
S03刘海D02述圣
S04安然D02述圣
S05乐天D03省身
  1. 学生成绩表(包含学生编号、课程编号和成绩):
学生编号课程编号成绩
S01C0190
S02C0187
S01C0292
S03C0195
S04C0278
S05C0182

这样,每个表的非主属性都完全依赖于其主键,满足了第二范式(2NF)。

3NF(第三范式)

定义:在满足2NF的基础上,消除非主键字段对主键的传递依赖

第三范式(3NF):第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

举例说明:

上表中,所有属性都完全依赖于学号,所以满足第二范式,但是“班主任性别”和“班主任年龄”直接依赖的是“班主任姓名”,
而不是主键“学号”,所以需做如下调整:

这样以来,就满足了第三范式的要求。

不过现在业务上的表设计基本都是反范式的。当然不是说完全不遵守范式,而是适当的进行调整
比如业务上经常需要余字段,减少联表查询,提升性能,特别是业务量比较大的公司,这种冗余是很有必要的!

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

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

相关文章

亚马逊CEO安迪·贾西(Andy Jassy)近日透露,Alexa助手即将迎来一次重大升级,具备“代理性”功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

ts:函数的重载

ts:函数的重载 1 主要内容说明2 例子2.1 函数的重载2.1.1 源码1 (函数的重载)2.1.2 源码1运行效果 3.结语4.定位日期 1 主要内容说明 重载函数可以提高类型安全性,内容灵活性和可读性。重载允许同一个函数定义多个参数类型的数量…

qt QTabWidget详解

1、概述 QTabWidget是Qt框架中的一个控件,它提供了一个标签页式的界面,允许用户在不同的页面(或称为标签)之间切换。每个页面都可以包含不同的内容,如文本、图像、按钮或其他小部件。QTabWidget非常适合用于创建具有多…

telnet 密码模式 访问路由器

telnet 密码访问华为路由器 模拟被访问路由 sy [Huawei]int g0/0/0 //选中 g0/0/0端口 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.1 24 //设置端口ip [Huawei]user-interface vty 0 4 //配置vty [Huawei-ui-vty0-4]set authentication password cipher huawei123 //设置…

项目模块1~12总结:服务器大模块梳理

一、思维导图 二、设计思路 1、各种回调函数梳理 服务器里面包含了监听套接字和监听到的通信套接字(新连接),我们要对这两种套接字进行设置回调函数,其中监听套接字里面只要设置读回调,通信套接字要设置5种回调&…

UE4安卓Gradle工程中的libUE4.so的生成原理

流程图 流程图放在最前面,下面是讲解。 libUE4.so 问:在UE4安卓开发中,libUE4.so即是符号表,又是引擎代码native,是吗? 答:是的,libUE4.so在UE4安卓开发中既包含符号表,…

Linux下Nginx的安装与使用

Linux下Nginx的安装与使用 博客: www.lstar.icu 开源地址 Gitee 地址: https://gitee.com/lxwise/iris-blog_parent Github 地址: https://github.com/lxwise/iris-blog_parent 序言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子…

STM32 HAL库 SPI驱动1.3寸 OLED屏幕

目录 参考硬件引脚与接线 点亮屏幕CubeMX 配置OLED 驱动程序代码 参考 基于STM32F103C8T6最小系统板HAL库CubeMX SPI驱动7针 OLED显示屏(0.96寸 1.3寸通用)0.96 oled HAL库驱动 SPI STM32SPI驱动0.96/1.3寸 OLED屏幕,易修改为DMA控制STM32驱…

江协科技STM32学习- P26 UART串口外设

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

基于Abaqus的高纯铝不同应变率下单晶塑性变形的取向依赖性研究

文章题目:《Strain rate effect of high purity aluminum single crystals: Experiments and simulations》 文章doi:10.1016/j.ijplas.2014.10.002 推荐理由:作者研究了高纯铝不同应变率下单晶塑性变形的取向依赖性,不同应变率…

虚拟现实与增强现实:重塑娱乐和教育的边界!

内容概要 在这个瞬息万变的时代,虚拟现实(VR)和增强现实(AR)正如两位魔法师,腾云驾雾间掀起了一场教育与娱乐的革命。虚拟现实带我们飞跃平凡,进入一个充满奇迹的数字宇宙,仿佛我们…

【论文分享】利用机器学习和计算机视觉技术增强城市街道峡谷中的PM2.5实时监测

本文以兰州市为研究区域使用计算机视觉技术从交通摄像头拍摄的交通图像中提取实时交通流量和街景特征,以预测PM2.5浓度,并解释道路环境变化对PM2.5水平的影响。 【论文题目】 Enhancing urban real-time PM2.5 monitoring in street canyons by machine…

《双指针篇》---复写零(标的简单,实际比较复杂)

题目传送门 方法一:双指针 我们发现不能从前向后复写,因为会覆盖掉还没有被复写的数据 因此我们需要从后往前复写。 此时left应该指向最后一个被复写的数。 right指向数组最后一个元素 1.找到最后一个被复写的数据。我们用left指向 ①先判断left的位置0/…

Docker(二):Docker的基本使用

1 Docker的基本使用 1.1 镜像相关操作 1、从DockerHub搜索镜像 [rootmaster ~]# docker search centos # 镜像名字 描述 星标 是否官方(有OK表示为官方镜像) NAME …

SQL Server 可观测最佳实践

SQL Server 简介 SQL Server 是微软公司开发的一款关系数据库管理系统,支持企业 IT 环境中的各种事务处理、商业智能和分析应用程序。它支持多种操作系统平台,而无论是物理还是虚拟形式,自建部署环境还是在云环境中,运行的操作系…

PyEcharts | 认识图形--饼图和玫瑰图

饼图和玫瑰图 饼图玫瑰图rosetype 参数 饼图 from pyecharts.charts import Pie import pyecharts.options as optsfrom pyecharts.globals import CurrentConfig,NotebookType CurrentConfig.NOTEBOOK_TYPE NotebookType.JUPYTER_LAB CurrentConfig.ONLINE_HOST OnlineHos…

ros与mqtt相互转换

vda5050 VDA5050协议介绍 和 详细翻译-CSDN博客 ros与mqtt相互转换 如何转换的,通过某个中转包,获取ros的消息然后以需要的格式转换为mqtt 需要的参数 ros相关 parameters[ (ros_subscriber_type, vda5050_msgs/NodeState), (ros_subscriber_queue…

这几款AI搜索产品,你用过几个?

AI搜索产品逐步走进普通大众的视野,当然也会有更多的产品进入市场供大家选择。 以下是一些常见的 AI 搜索产品: 综合型 AI 搜索平台: Perplexity:海外较受欢迎的 AI 搜索引擎,拥有百万用户。它利用 GPT、Claude、Llam…

[代码随想录打卡 Day3] 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

(ง •_•)ง今天出去玩了,只刷完了视频,做了部分题,就是具体整理明天整理。希望坚持下去。啊啊啊啊啊啊啊啊啊啊啊 链表理论基础 基础的就是单链表。 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成&#xff0…

OpenCV基本操作(python开发)——(8)实现芯片瑕疵检测

OpenCV基本操作(python开发)——(1) 读取图像、保存图像 OpenCV基本操作(python开发)——(2)图像色彩操作 OpenCV基本操作(python开发)——(3&…