当前位置: 首页 > news >正文

MySQL-三范式 视图

文章目录

  • 三范式
    • 三范式简介
    • 第一范式
    • 第二范式
    • 第三范式
  • 表设计
    • 一对一
    • 一对多
    • 多对多
    • 最终的设计
  • 视图

三范式

三范式简介

所谓三范式, 其实是表设计的三大原则, 目的都是为了节省空间, 但是三范式是必须要遵守的吗?
答案是否定的(但是第一范式必须遵守) 因为有时候严格遵守三范式会导致查询的效率下降
(DQL链接查询的笛卡尔积现象)所以表的最终设计, 在生产环境中还是要根据具体的要求进行操作

第一范式

第一范式简介:
任何一张表都应该有主键, 且每个字段是原子性的不可再分
每一张表必须有主键, 否则被视为一张无效的表, 这里提醒一下, 因为每张表对应Java中的一个类
但是一个类不可以作为一个字段存在(has a 关系), 必须进行外键链接
比如我们下面的表设计的就有问题
在这里插入图片描述
在联系方式的那行, 数据并不是完全不可以再分的, 所以我们的修改如下
在这里插入图片描述
现在这种设计就完全满足了第一范式, 有主键, 且每个字段都是原子性的

第二范式

第二范式简介:
第二范式建立在第一范式的基础上(必须有复合主键), 要求所有的非主键字段完全依赖主键, 不能产生部分依赖
比如下面的学生表
在这里插入图片描述
存在复合主键, 但是存在部分依赖主键的现象, 比如学生姓名依赖的是学生编号, 教师姓名依赖的是教师编号
这就产生了部分依赖, 我们更改的方法就是设置三张表(这是一种典型的多对多, 下面会说), 一张学生表(学生编号为主键), 一张教师表(教师编号为主键), 然后设置一张关系表来关联这两张表, 修改方法如下
在这里插入图片描述

第三范式

第三范式简介:
建立在第二范式的基础上, 非主键字段不可以传递依赖于主键字段
第三范式的重点就在传递两个字上, 下面我们举一个例子
在这里插入图片描述
首先学生编号是主键, 其余所有字段应该都依赖于主键字段, 但是班级名称依赖的是班级编号, 班级编号依赖学生编号(主键)
所以我们认为发生了传递, 这种现象我们就说违反了第三范式
我们对这个表设计的修改方式是创建两张表(实际上这是一种典型的一对多的情况, 多的一方添加外键)
在这里插入图片描述

表设计

上面我们介绍了三大范式, 而且也对一些案例如何修改表的设计进行了简单的说明, 下面我们进行系统的说明

一对一

一对一的设计常见的有两种, 外键唯一与主键关联
其实这里大多数人有一定的疑问, 本来就是关联的同一组数据, 为什么要插开设置为两张表呢,
一对一也不存在表空间的浪费啊, 事实上, 对于测试环境确实没必要, 但是对于线上的生产环境
有可能一条数据有多个列, 即使是一对一, 数据列数过大还是不合适
下面是我们的测试情况
在这里插入图片描述

这是情侣的对应信息(一定是一对一)
主键共享:
方式就是, 男女双方公用同一个主键(也就是女生表的id列既是主键也是外键)
在这里插入图片描述
此时就是主键共享的处理, 女方的主键一定与男方的一致
外键唯一:
外键唯一就是对女方表设置一个外键h_id, 同时要求这个外键具备唯一性, h_id(fk + unique)
在这里插入图片描述
这两种方式, 我们最常用的是外键唯一的方式

一对多

一对多就是一方对另一方是一对一, 另一方对一方是一对一, 比如我们之前介绍的班级学生表, 对于一个学生只对应一个班级, 对于班级来说, 学生就是多个, 所以就是一对多
我们的设计原则是 :
一对多, 两张表, 多的加外键
在这里插入图片描述
上面是我们的学校信息, 下面是学生信息, 学生是多的那方, 所以添加一个外键

多对多

多对多就是两个一对多结合起来, 总结起来就下面一句话
多对多三张表,关系表添加外键
我们用刚才的教师学生信息表为例
在这里插入图片描述
我们创建了三张表, 一张学生表, 一张教师表, 还有一个关联信息表…

最终的设计

最终的设计还是要落实到用户的要求上来, 到底是优化空间, 还是用时间换速度…

视图

  1. 只能将select语句创建为视图。

  2. 创建视图

create or replace view v_emp as select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;
  1. 视图作用

如果开发中有一条非常复杂的SQL,而这个SQL在多处使用,会给开发和维护带来成本。使用视图可以降低开发和维护的成本。
视图可以隐藏表的字段名。

  1. 修改视图
alter view v_emp as select e.ename,d.dname,d.deptno from emp e join dept d on e.deptno = d.deptno;
  1. 删除视图
  drop view if exists v_emp;
  1. 对视图增删改(DML:insert delete update)可以影响到原表数据。

相关文章:

MySQL-三范式 视图

文章目录 三范式三范式简介第一范式第二范式第三范式 表设计一对一一对多多对多最终的设计 视图 三范式 三范式简介 所谓三范式, 其实是表设计的三大原则, 目的都是为了节省空间, 但是三范式是必须要遵守的吗? 答案是否定的(但是第一范式必须遵守) 因为有时候严格遵守三范式…...

多线程(三):线程等待获取线程引用线程休眠线程状态

目录 1、等待一个线程:join 1.1 join() 1.2 join(long millis)——"超时时间" 1.3 join(long millis,int nanos) 2、获取当前线程的引用:currentThread 3、休眠当前进程:sleep 3.1 实际休眠时间 3.2 sleep的特殊…...

Hi3244 应用指导

Hi3244 是一款DIP8封装高性能、多模式工作的原边控制功率开关。Hi3244内高精度的恒流、恒压控制机制结合完备的保护功能,使其适用于小功率离线式电源应用中。在恒压输出模式中,Hi3244 采用多模式工作方式,即调幅控制(AM&#xff0…...

【LeetCode热题100】哈希

1.两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答…...

Java的四种循环语句

背景: Java 中主要有四种循环语句:for 循环、while 循环、do-while 循环 和 foreach 循环(也称为增强型 for 循环)。下面我将分别介绍这四种循环语句,并给出相应的实例。 for循环: 1. for 循环for 循环是…...

Qt杂记目录

Qt 杂记目录 QMenu 1.menu转string Qt 窗口阴影边框...

项目开发--基于docker实现模型容器化服务

背景 1、docker-compose build 和 docker-compose up -d分别是什么作用? 2、如何进入新构建的容器当中 3、模型保存的方法区别 4、如何让docker容器启动的时候能使用cuda进行模型推理加速 5、如何实现容器的迭代 解决方案 问题1 docker-compose build 和 docker…...

C语言 | Leetcode C语言题解之第477题汉明距离总和

题目&#xff1a; 题解&#xff1a; int totalHammingDistance(int* nums, int numsSize) {int ans 0;for (int i 0; i < 30; i) {int c 0;for (int j 0; j < numsSize; j) {c (nums[j] >> i) & 1;}ans c * (numsSize - c);}return ans; }...

Bug剖析

Bug剖析 • 所有的Bug报告有以下的基本要求&#xff1a; • 标题。要简略。 • 指派。谁来处理这个问题。 • 重现步骤。问题再次出现的相关步骤。 • 优先级别。问题的紧迫性与重要性。 • 严重程度。问题所产生的后果。 • 解决方案。怎么解决问题。 其他很多方面对修复问题…...

HI3516DV500 相机部分架构初探

Hi3516DV500 是一颗面向视觉行业推出的高清智能 Soc。该芯片最高支持 2 路 sensor 输入&#xff0c;支持最高 5M30fps 的 ISP 图像处理能力&#xff0c;支持 2F WDR、多级降噪、六轴防 抖、多光谱融合等多种传统图像增强和处理算法&#xff0c;支持通过 AI 算法对输入图像进行实…...

训练yolo系列出现问题mAP, R, P等为零

1. 问题 40系列显卡训练yolo系列出现问题&#xff0c;loss正常&#xff0c;但mAP&#xff0c;R&#xff0c;P等为零。 环境&#xff1a;ultralytics版本为8.3.9&#xff0c;cuda11.8&#xff0c; torch2.4。 40系列显卡网上说可以使用cuda低于11.7的&#xff0c;自己测试了下…...

数字媒体技术基础:色度子采样(4:4:4、4:2:2 、4:2:0)

在数字视频处理中&#xff0c;色度子采样 Chroma Subsampling可以用于压缩视频文件的大小&#xff0c;同时在大多数情况下保持较高的视觉质量&#xff0c;它的原理基于人类视觉系统对亮度 Luminance比对色度 Chrominance更加敏感这一特点。 一、 采样格式的表示方法 色度子采样…...

tkinter库的应用小示例:文本编辑器

tkinter库的应用小示例&#xff1a;文本编辑器 要 求&#xff1a; 创建一个文本编辑器&#xff0c;功能包括&#xff0c;创建、打开、编辑、保存文件。一个Button小组件&#xff0c;命名为btn_open,用于打开要编辑的文件&#xff0c;一个Button小组件&#xff0c;命名为btn_s…...

信息抽取数据集处理——RAMS

引言 RAMS数据集&#xff08;RAMS&#xff1a;Richly Annotated Multilingual Schema-guided Event Structure&#xff09;由约翰斯霍普金斯大学于2020年发布&#xff0c;是一个以新闻为基础的事件抽取数据集。它标注了9,124个事件&#xff0c;涵盖了139种不同的事件类型和65种…...

SpringBoot+XXL-JOB:高效定时任务管理

前言 在现代应用程序中&#xff0c;定时任务是不可或缺的一部分。Spring Boot 和 XXL-Job 为你提供了一个强大的工具组合&#xff0c;以简化任务调度和管理。 本文将带领你探索如何将这两者集成在一起&#xff0c;实现高效的定时任务管理。无论你是初学者还是有经验的开发者&…...

openpyxl -- 简介

文章目录 介绍核心类 介绍 开源的python读写Excel的工具库&#xff0c;由志愿者在业余时间维护&#xff1b;安装&#xff0c;pip install openpyxl;官方文档地址源码地址issues列表默认openpyxl不能保证抵御大量的xml攻击&#xff0c;为抵御这些攻击需安装defusedxml&#xff…...

滚雪球学MySQL[8.3讲]:数据库中的JSON与全文检索详解:从数据存储到全文索引的高效使用

全文目录&#xff1a; 前言8.3 JSON与全文检索1. JSON数据类型的使用1.1 JSON 数据类型概述1.2 JSON 数据的插入与查询1.3 JSON 常用函数与操作1.4 JSON使用的优缺点与性能考虑 2. 全文索引与全文检索2.1 全文索引概述2.2 全文检索的使用2.3 全文检索模式2.4 全文索引优化与性能…...

position定位静态定位/绝对定位/相对定位

1.静态定位static&#xff1a;按照标准流进行布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>D…...

2024年09月CCF-GESP编程能力等级认证C++编程三级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 下列代码中,输出结果是( ) #include<iostream> using namespace std; i...

Web自动化Demo-PHP+Selenium

1.新建工程 打开PhpStorm新建工程如下&#xff1a; 打开终端输入如下命令安装selenium&#xff1a; composer require php-webdriver/webdriver 2.编写代码 <?php require vendor/autoload.php;use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...

Python第七周作业

Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt&#xff0c;并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径&#xff0c;并创建logs目录&#xff08;若不存在&#xff09; 3.递归遍历目录data&#xff0c;输出所有.csv文件的路径…...