数据库的规范化设计方法---3种范式
第一范式(1NF):确保表中的每个字段都是不可分割的基本数据项。
第二范式(2NF):在满足1NF的基础上,确保非主属性完全依赖于主键。
第三范式(3NF):在满足2NF的基础上,确保非主属性不传递依赖于主键。
使用 StudentCourse
表作为基础,来解释第一范式(1NF)。
第一范式 (1NF) 的核心要求:
确保表中的每一个单元格(字段值)都包含单一、不可再分割的基本数据项。换句话说,表中的每一列都必须是原子性的,不能包含多个值或复合值。
回顾之前的 StudentCourse
表:
StudentID (学号) | StudentName (姓名) | StudentDepartment (系别) | CourseID (课程号) | CourseName (课程名) | Professor (教授) |
---|---|---|---|---|---|
1001 | 张三 | 计算机系 | CS101 | 数据结构 | 李教授 |
1001 | 张三 | 计算机系 | CS201 | 数据库原理 | 王教授 |
1002 | 李四 | 电子系 | EE101 | 电路基础 | 赵教授 |
1003 | 王五 | 计算机系 | CS101 | 数据结构 | 李教授 |
1003 | 王五 | 计算机系 | CS301 | 操作系统 | 刘教授 |
分析 StudentCourse
表是否满足 1NF:
现在我们来逐一检查这个表中的每一列,看看它们是否都满足原子性(不可分割)的要求:
- StudentID (学号): 例如 “1001”。这是一个单一的数值,不能再分割成更小的有意义的部分(比如不能把它分成 ‘1’, ‘0’, ‘0’, ‘1’ 并认为每个都有独立意义)。满足 1NF。
- StudentName (姓名): 例如 “张三”。虽然姓名可以拆分成姓氏和名字(“张” 和 “三”),但在数据库设计中,通常将整个姓名视为一个不可分割的字符串来处理,特别是当我们不需要单独查询姓氏或名字时。如果业务上需要单独处理姓氏和名字,才需要拆分成两列。通常认为满足 1NF。
- StudentDepartment (系别): 例如 “计算机系”。这是一个单一的文本值,表示一个系别。满足 1NF。
- CourseID (课程号): 例如 “CS101”。这是一个单一的标识符,不能再分割。满足 1NF。
- CourseName (课程名): 例如 “数据结构”。这是一个单一的文本值。满足 1NF。
- Professor (教授): 例如 “李教授”。这是一个单一的文本值。满足 1NF。
结论: 在这个例子中,StudentCourse
表的每一列都只包含单一、不可分割的数据项。因此,这个表满足第一范式 (1NF)。
一个不满足 1NF 的例子:
假设我们有一个StudentInfo
表,其中存储了学生的联系电话,但允许一个学生有多个电话:
StudentID | StudentName | PhoneNumbers |
---|---|---|
1001 | 张三 | 13812345678, 13987654321 |
1002 | 李四 | 13700001111 |
1003 | 王五 | 13611112222, 13833334444, 13955556666 |
在这个表中,PhoneNumbers
列包含了多个电话号码,用逗号分隔。这违反了 1NF,因为该列的单元格包含了多个基本数据项(多个电话号码)。
要使其满足 1NF,我们需要将每个电话号码放在单独的一行,或者创建一个单独的 StudentPhone
表。
希望这个例子能帮助你理解第一范式的要求!
好的,我们来通过具体的例子来解释“完全依赖”和“不传递依赖”这两个概念,它们是第二范式(2NF)和第三范式(3NF)的核心。
假设我们有一个存储学生选修课程信息的表:
表:StudentCourse (学生选课表)
StudentID (学号) | StudentName (姓名) | StudentDepartment (系别) | CourseID (课程号) | CourseName (课程名) | Professor (教授) |
---|---|---|---|---|---|
1001 | 张三 | 计算机系 | CS101 | 数据结构 | 李教授 |
1001 | 张三 | 计算机系 | CS201 | 数据库原理 | 王教授 |
1002 | 李四 | 电子系 | EE101 | 电路基础 | 赵教授 |
1003 | 王五 | 计算机系 | CS101 | 数据结构 | 李教授 |
1003 | 王五 | 计算机系 | CS301 | 操作系统 | 刘教授 |
这个表的主键是 (StudentID, CourseID)
,因为一个学生可以选多门课,一门课可以被多个学生选,只有同时知道学号和课程号才能唯一确定一行记录。
2. 第二范式 (2NF) - 完全依赖 (Full Dependency)
定义: 在满足第一范式(1NF)的基础上,非主属性必须完全依赖于整个主键,而不仅仅是主键的一部分。
问题: 如果主键是由多个属性组成的(复合主键),我们需要检查每个非主属性是否依赖于所有主键属性。
在 StudentCourse 表中:
- 主键: (StudentID, CourseID)
- 非主属性: StudentName, StudentDepartment, CourseName, Professor
现在我们检查每个非主属性是否完全依赖于(StudentID, CourseID)
:
- StudentName (姓名): 姓名是由学号
StudentID
决定的,和选了哪门课CourseID
无关。所以StudentName
只依赖于StudentID
,而不是(StudentID, CourseID)
。这叫部分依赖 (Partial Dependency)。 - StudentDepartment (系别): 系别也是由学号
StudentID
决定的,和课程号CourseID
无关。所以StudentDepartment
只依赖于StudentID
,而不是(StudentID, CourseID)
。这也是部分依赖。 - CourseName (课程名): 课程名是由课程号
CourseID
决定的,和学生的学号StudentID
无关。所以CourseName
只依赖于CourseID
,而不是(StudentID, CourseID)
。这同样是部分依赖。 - Professor (教授): 教授通常是由课程号
CourseID
决定的(假设一门课只有一个固定教授),和学生的学号StudentID
无关。所以Professor
只依赖于CourseID
,而不是(StudentID, CourseID)
。这也是部分依赖。
结论: StudentCourse 表不满足 2NF,因为存在非主属性(StudentName, StudentDepartment, CourseName, Professor)部分依赖于主键(StudentID, CourseID)
的子集(要么只依赖StudentID
,要么只依赖CourseID
)。
如何修正 (分解): 我们需要将表分解,使得每个表的非主属性都完全依赖于该表的主键。
- Student (学生表): 主键
StudentID
StudentID (学号) StudentName (姓名) StudentDepartment (系别) 1001 张三 计算机系 1002 李四 电子系 1003 王五 计算机系 - Course (课程表): 主键
CourseID
CourseID (课程号) CourseName (课程名) Professor (教授) CS101 数据结构 李教授 CS201 数据库原理 王教授 EE101 电路基础 赵教授 CS301 操作系统 刘教授 - StudentSC (学生选课关系表): 主键
(StudentID, CourseID)
StudentID (学号) CourseID (课程号) 1001 CS101 1001 CS201 1002 EE101 1003 CS101 1003 CS301
现在检查这些新表:
- Student 表的主键是
StudentID
,所有非主属性 (StudentName, StudentDepartment) 都完全依赖于StudentID
。 - Course 表的主键是
CourseID
,所有非主属性 (CourseName, Professor) 都完全依赖于CourseID
。 - StudentSC 表的主键是
(StudentID, CourseID)
,它没有其他非主属性,所以自然满足。
这些分解后的表都满足了 2NF。
3. 第三范式 (3NF) - 不传递依赖 (No Transitive Dependency)
定义: 在满足第二范式(2NF)的基础上,非主属性必须不传递依赖于主键。也就是说,非主属性不能依赖于另一个非主属性。
问题: 我们需要检查是否存在“主键 -> 非主属性 A -> 非主属性 B”这样的依赖链条,其中 B 就是传递依赖于主键。
在修正后的 Student 表中:
- 主键:
StudentID
- 非主属性: StudentName, StudentDepartment
检查是否存在传递依赖: StudentID
->StudentDepartment
(学号决定系别)StudentDepartment
-> ? 这个系别 (StudentDepartment
) 是否又决定了其他的非主属性?在我们的 Student 表中,系别只决定了它自己,没有决定其他非主属性 (StudentName)。所以没有传递依赖。
在修正后的 Course 表中:- 主键:
CourseID
- 非主属性: CourseName, Professor
检查是否存在传递依赖: CourseID
->Professor
(课程号决定教授)Professor
-> ? 这个教授 (Professor
) 是否又决定了其他的非主属性?在我们的 Course 表中,教授只决定了它自己,没有决定其他非主属性 (CourseName)。所以没有传递依赖。
假设我们有一个不满足 3NF 的表:
表:StudentDept (学生系别表 - 假设大学有系主任)
StudentID (学号) | StudentName (姓名) | StudentDepartment (系别) | DepartmentHead (系主任) |
---|---|---|---|
1001 | 张三 | 计算机系 | 陈主任 |
1002 | 李四 | 电子系 | 吴主任 |
1003 | 王五 | 计算机系 | 陈主任 |
- 主键:
StudentID
(假设学号唯一) - 非主属性: StudentName, StudentDepartment, DepartmentHead
检查依赖关系:
StudentID
->StudentName
(满足)StudentID
->StudentDepartment
(满足)StudentID
->DepartmentHead
? 不完全是。学号本身不直接决定系主任。但是,我们可以通过学号找到系别 (StudentID
->StudentDepartment
),然后通过系别找到系主任 (StudentDepartment
->DepartmentHead
)。所以,DepartmentHead
是传递依赖于主键StudentID
的。StudentID
->StudentDepartment
->DepartmentHead
。
结论: StudentDept 表不满足 3NF,因为存在非主属性DepartmentHead
传递依赖于主键StudentID
。
如何修正 (分解): 我们需要将传递依赖的非主属性分离出来。
- Student (学生表): 主键
StudentID
-
StudentID (学号) StudentName (姓名) StudentDepartment (系别) 1001 张三 计算机系 1002 李四 电子系 1003 王五 计算机系 - Department (系别表): 主键
StudentDepartment
(可以用系别名称或系编号作为主键,这里简化用名称)StudentDepartment (系别) DepartmentHead (系主任) 计算机系 陈主任 电子系 吴主任
现在检查这些新表:
- Student 表满足 3NF。
- Department 表的主键是
StudentDepartment
,唯一的非主属性DepartmentHead
完全依赖于它,并且没有其他非主属性可以依赖,所以也满足 3NF。
总结:
- 完全依赖 (2NF): 非主属性不能只依赖于复合主键的“一部分”。它们必须依赖于整个主键。
- 不传递依赖 (3NF): 非主属性不能依赖于另一个非主属性。它们必须直接依赖于主键,不能通过中间的非主属性间接依赖。
通过满足这些范式,可以减少数据冗余,避免数据更新异常(插入、删除、修改异常)。
相关文章:
数据库的规范化设计方法---3种范式
第一范式(1NF):确保表中的每个字段都是不可分割的基本数据项。 第二范式(2NF):在满足1NF的基础上,确保非主属性完全依赖于主键。 第三范式(3NF):在满足2NF的基…...
p024基于Django的网上购物系统的设计与实现
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 商品类型管理 商品信息管理 系统管理 订单管理…...
C++跨平台开发:挑战与应对策略
C跨平台开发:挑战与应对策略 在如今设备多样、操作系统碎片化的开发环境中,跨平台能力已成为衡量软件生命力与团队工程效率的重要指标。C 作为高性能系统级语言,在游戏引擎、嵌入式系统、实时渲染等领域依旧坚挺。然而,实现“一次…...
Kotlin 作用域函数(let、run、with、apply、also)对比
Kotlin 的 作用域函数(Scope Functions) 是简化代码逻辑的重要工具,它们通过临时作用域为对象提供更简洁的操作方式。以下是 let、run、with、apply、also 的对比分析: 一、核心区别对比表 函数上下文对象引用返回值是否扩展函数…...
JavaScript性能优化实战(11):前沿技术在性能优化中的应用
引言 随着Web应用复杂度和性能需求不断提高,传统的JavaScript优化技术已经无法满足某些高性能计算场景的需求。本文将深入探讨前沿Web技术如何突破JavaScript的性能瓶颈,为Web应用提供接近原生应用的性能体验。从底层计算到图形渲染,从并发处理到动画优化,我们将通过实际案…...
数据结构【AVL树】
AVL树 1.AVL树1.AVL的概念2.平衡因子 2.AVl树的实现2.1AVL树的结构2.2AVL树的插入2.3 旋转2.3.1 旋转的原则 1.AVL树 1.AVL的概念 AVL树可以是一个空树。 它的左右子树都是AVL树,且左右子树的高度差的绝对值不超过1。AVL树是一颗高度平衡搜索二叉树,通…...
电动调节V型球阀:行业应用与材质选择全解析
电动调节V型球阀:行业应用与材质选择全解析 作为工业自动化控制中的关键设备,电动调节V型球阀凭借其独特的结构设计与高性能调节能力,在石油、化工、造纸等高要求领域广泛应用。本文将从核心功能、行业应用场景、材质选择要点等方面深入解析…...
页面上如何显示特殊字符、Unicode字符?
在前端开发中,显示特殊字符通常涉及到HTML实体(HTML Entities)或 Unicode 字符的使用。以下是一些常见的方法来处理特殊字符的显示: 1、HTML实体: HTML为一些常见的特殊字符提供了预定义的实体。例如,要显…...
桌面端进程通信
以下是关于 Electron 桌面端进程通信的基本知识点总结: 一、Electron 进程模型基础 1. 进程类型与职责 进程类型职责权限主进程(Main)创建窗口、系统级操作、IPC中枢完全Node.js访问权限渲染进程(Renderer)展示Web内容、UI交互默认受限(可配置开启Node.js)预加载脚本(Prelo…...
vue2 切换主题色以及单页面好使方法
今天要新增一个页面要根据不同公司切换不同页面主题色,一点一点来,怎么快速更改 el-pagination 分页组件主题色。 <el-pagination :page-size"pageSize" :pager-count"pageCount"layout"sizes, prev, pager, next, jumper,…...
三层固定实体架构:高效实现图上的检索增强生成(RAG)
知识图谱正在成为跨各个领域组织和检索信息的强大工具。它们越来越多地与机器学习和自然语言处理技术相结合,以增强信息检索和推理能力。在本文中,我介绍了一种用于构建知识图谱的三层架构,结合了固定本体实体、文档片段和提取的命名实体。通过利用嵌入和余弦相似度,这种方…...
pnpm 与 npm 的核心区别
以下是 pnpm 与 npm 的核心区别总结,涵盖依赖管理、性能、安全性等关键维度: 1. 依赖存储机制 • npm: 每个项目的依赖独立存储于 node_modules,即使多个项目使用相同版本的包,也会重复下载和存储。例如,1…...
NVMe简介6之PCIe事务层
PCIe的事务层连接了PCIe设备核心与PCIe链路,这里主要基于PCIe事务层进行分析。事务层采用TLP传输事务,完整的TLP由TLPPrefix、TLP头、Payload和TLP Digest组成。TLP头是TLP中最关键的部分,一般由三个或四个双字的长度,其格式定义如…...
【C++详解】string各种接口如何使用保姆级攻略
文章目录 一、string介绍二、string使用构造函数析构函数赋值运算符重载string的遍历修改方法1、下标[]2、迭代器3、范围for 迭代器使用详解const迭代器反向迭代器(reverse) Capacity(容量相关)size/lengthmax_sizecapacityclear/emptyshrink_to_fit(缩容)reserve(扩…...
深入理解 requestIdleCallback:浏览器空闲时段的性能优化利器
requestIdleCallback 核心作用 requestIdleCallback 是浏览器提供的 API,用于将非关键任务延迟到浏览器空闲时段执行,避免阻塞用户交互、动画等关键任务,从而提升页面性能体验。 基本语法 const handle window.requestIdleCallback(callb…...
QML鼠标事件和按键事件
1 鼠标事件 1.1 MouseArea组件 在QML中,鼠标事件主要通过MouseArea元素处理,它是用于检测和响应鼠标交互的核心组件。常用属性 cursorShape: 光标形状acceptedButtons: 设置响应鼠标的哪些按键事件,默认为鼠标左键 Qt.LeftButton࿱…...
Animaster:一次由 CodeBuddy 主导的 CSS 动画编辑器诞生记
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念:我想要一个动画编辑器 那天我突然想到,如果能有一个简单好用的 CSS 动画编辑…...
Git 版本控制系统入门指南
Git 版本控制系统入门指南 一、Git 基础概念 1. 什么是 Git? Git 是一个分布式版本控制系统,它可以: 跟踪文件变化协调多人协作管理代码版本支持离线工作保证数据完整性 2. Git 的特点 分布式架构快速分支操作完整历史记录数据完整性保…...
GitHub 趋势日报 (2025年05月16日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1TapXWorld/ChinaTextbookPDF教材。⭐ 4792⭐ 19814Roff2xming521/WeClone&…...
C/C++之内存管理
1. 内存分布 我们定义的变量对于电脑来说也叫数据,同时电脑也会把这些数据分为不同的类型,分别是局部数据,静态数据,全局数据,常量数据和动态申请数据。 在 C 中,各类数据存储位置如下: • 局…...
GitHub文档加载器设计与实现
文章结构: 目录 GitHub文档加载器设计与实现 引言 架构设计 主要组件 核心功能 文档加载流程 加载单个文件 加载目录内容 错误处理与健壮性 分支回退策略 文件类型和大小限制 安全性考虑 SSL证书验证 使用示例 基本使用 测试环境配置 最佳实践 结…...
历史数据分析——中证白酒
简介 中证白酒指数选取涉及白酒生产业务相关上市公司证券作为指数样本,为投资者提供更多样化的投资标的。 估值 中证白酒总体的PB是5.26,在过去十年间位于23.76%,属于较低的水平。 中证白酒总体的PE是20.13,在过去十年间,位于14.24%,属于较低的水平。 从估值的角度似…...
PHP8.0版本导出excel失败
环境:fastadmin框架,不是原版接手的项目。PHP8.0,mysql5.7. code // 创建一个新的 Spreadsheet 对象 $spreadsheet new Spreadsheet(); $worksheet $spreadsheet->getActiveSheet();// 设置表头 $worksheet->setCellValue(A1, ID); $worksheet…...
Seata源码—5.全局事务的创建与返回处理二
大纲 1.Seata开启分布式事务的流程总结 2.Seata生成全局事务ID的雪花算法源码 3.生成xid以及对全局事务会话进行持久化的源码 4.全局事务会话数据持久化的实现源码 5.Seata Server创建全局事务与返回xid的源码 6.Client获取Server的响应与处理的源码 7.Seata与Dubbo整合…...
mac-M系列芯片安装软件报错:***已损坏,无法打开。推出磁盘问题
因为你安装的软件在Intel 或arm芯片的mac上没有签名导致。 首先打开任何来源操作 在系统设置中配置,如下图: 2. 然后打开终端,输入: sudo spctl --master-disable然后输入电脑锁屏密码 打开了任何来源,还遇到已损坏…...
端到端自动驾驶系统实战指南:从Comma.ai架构到PyTorch部署
引言:端到端自动驾驶的技术革命 在自动驾驶技术演进历程中,端到端(End-to-End)架构正引领新一轮技术革命。不同于传统分模块处理感知、规划、控制的方案,端到端系统通过深度神经网络直接建立传感器原始数据到车辆控制…...
MoveIt Setup Assistant 在导入urdf文件的时候报错
在使用MoveIt Setup Assistant导入urdf文件的时候(load a urdf or collada robot model),找到urdf文件后MoveIt Setup Assistant闪退并报错: Warning: Ignoring XDG_SESSION_TYPEwayland on Gnome. Use QT_QPA_PLATFORMwayland to run on Wayland anyway…...
uniapp +vue +springboot多商家订餐系统
uniapp vue springboot多商家订餐系统,这个系统我整理调试的多商家,多用户的,多端小程序订餐系统,主要包含了uniapp小程序端,管理后台页面vue端,后台功能接口Springboot端,源码齐全,…...
docker迅雷自定义端口号、登录用户名密码
在NAS上部署迅雷,确实会带来很大的方便。但是目前很多教程都是讲怎么部署docker迅雷,鲜有将自定义配置的方法。这里讲一下怎么部署,并重点讲一下支持的自定义参数。 一、部署docker 在其他教程中,都是介绍的如下命令,…...
联想笔记本黑屏了,排线出问题还是静电
以下引用 联想电脑屏幕不亮,电源键和键盘灯均正常的解决办法(超简单)_拯救者屏幕不亮,键盘有电-CSDN博客 昨天正常关机后,今天一早来工位打开电脑,美美开始玩手机。 一会之后抬头屏幕是黑的,还以为自动息…...
uniapp -- uCharts 仪表盘刻度显示 0.9999999 这样的值问题处理。
文章目录 🍉问题🍉解决方案🍉问题 在仪表盘上,23.8变成了 23.799999999999997 🍉解决方案 formatter格式化问题 1:在 config-ucharts.js 或 config-echarts.js 配置对应的 formatter 方法 formatter: {yAxisDemo1: function (...
为 Spring Boot 应用程序构建 CI/CD 流水线
为 Spring Boot 应用程序创建构建/部署流水线涉及多个步骤,而 Jenkins 可以作为强大的工具来自动化这些流程。在本教程中,我们将指导您为托管在 GitHub 上的 Spring Boot 应用程序设置流水线,使用 Jenkins 构建该应用程序,并将其部…...
数值分析填空题速通
填空题速通 文章目录 填空题速通误差与误差传播均差插值与误差范数、赋范线性空间与内积、内积空间范数代数精度数值微分积分误差迭代方程与收敛阶微分方程数值解法的迭代公式与阶 误差与误差传播 例 设 a 1.414 a 1.414 a1.414, b − 0.576 b -0.576 b−0.57…...
day016-系统负载压力测试-磁盘管理
文章目录 1. 系统负载2. 模拟系统高负载2.1 模拟cpu负载2.2 模拟IO负载 3. 磁盘接口分类4. 思维导图 1. 系统负载 系统负载是衡量系统繁忙程度的指标负载值接近或超过cpu核心总数表示系统负载高负载高常见原因:1.占用cpu过多导致2.占用磁盘IO过多导致(I…...
DeepSeek指令微调与强化学习对齐:从SFT到RLHF
后训练微调的重要性 预训练使大模型获得丰富的语言和知识表达能力,但其输出往往与用户意图和安全性需求不完全匹配。业内普遍采用三阶段训练流程:预训练 → 监督微调(SFT)→ 人类偏好对齐(RLHF)。预训练阶段模型在大规模语料上学习语言规律;监督微调利用人工标注的数据…...
安全性(一):加密算法总结
一、加密算法分类总览 加密类型关键特性代表算法主要用途对称加密加解密使用同一个密钥DES、3DES、AES、SM4数据加密传输、存储非对称加密公钥加密,私钥解密(或反向)RSA、DSA、ECC、SM2密钥交换、数字签名、身份认证哈希算法不可逆摘要MD5、…...
DeepSeek 赋能军事:重塑现代战争形态的科技密码
目录 一、引言:AI 浪潮下的军事变革与 DeepSeek 崛起二、DeepSeek 技术原理与特性剖析2.1 核心技术架构2.2 独特优势 三、DeepSeek 在军事侦察中的应用3.1 海量数据快速处理3.2 精准目标识别追踪3.3 预测潜在威胁 四、DeepSeek 在军事指挥决策中的应用4.1 战场态势实…...
我司助力高校打造「智慧创新AI学习中心」
为推动AI教育融合跨领域应用,东吴大学于2025年4月举行「智慧创新AI学习中心」揭牌仪式,并宣布正式启动AI特色课程与教学空间建置计画。此次建置由我司协助整体教室空间与设备规划,导入最新NVIDIA GeForce RTX 50系列桌上型电脑,并…...
AI赋能把“杂多集合”转化为“理想集合”的数学建模与认知升级
AI赋能把“杂多集合”转化为“理想集合”的数学建模与认知升级 一、核心概念定义 杂多集合(Chaotic Set) 定义:元素间关系模糊、结构无序的集合 数学表达:C{x∣x∈X,P(x)},其中 P(x) 是模糊隶属函数 实例…...
NVC++ 介绍与使用指南
文章目录 NVC 介绍与使用指南NVC 简介安装 NVC基本使用编译纯 C 程序编译 CUDA C 程序 关键编译选项示例代码使用标准并行算法 (STDPAR)混合 CUDA 和 C 优势与限制优势限制 调试与优化 NVC 介绍与使用指南 NVC 是 NVIDIA 提供的基于 LLVM 的 C 编译器,专为 GPU 加速…...
Redis 事务与管道:原理、区别与应用实践
在现代分布式系统开发中,Redis 作为高性能的内存数据库,其事务处理和管道技术是开发者必须掌握的核心知识点。本文将深入探讨 Redis 事务和管道的实现原理、使用场景、性能差异以及最佳实践,帮助开发者根据实际需求选择合适的技术方案。 一、…...
Git 多人协作
目录 情景一 情景二 合并分支 情景一 目标:远程 master 分支下的 file.txt 文件新增代码 "aaa","bbb"。 实现:由开发者1新增 "aaa" ,开发者2新增 bbb。 条件:在一个分支下合作完成。 针对以上情景我们要注意…...
Unity 人物模型学习笔记
一、关于模型的检查 拿到人物模型时,检查人物: 位置信息是否在0点布线/UV是否正常身体各部分是否分开各部分命名是否清晰骨骼需要绑定 二、Unity人物动画 https://www.bilibili.com/video/BV1cc41197mF?spm_id_from333.788.recommend_more_video.-1&a…...
【和春笋一起学C++】(十四)指针与const
将const用于指针,有两种情况: const int *pt; int * const pt; 目录 1. const int *pt 2. int * const pt 3. 扩展 1. const int *pt 首先看第一种情况,const在int的前面,有如下语句: int peoples12࿱…...
AI知识梳理——RAG、Agent、ReAct、LangChain、LangGraph、MCP、Function Calling、JSON-RPC
AI技术I AI技术II RAG 📌 高度凝练表达 RAG (检索增强生成)是一种结合信息检索与生成式人工智能的技术框架,旨在提升大型语言模型(LLM)的输出准确性和实用性。通过在生成响应前引入外部知识库的信息&#…...
ModuleNotFoundError: No module named ‘SDToolbox‘
(py311) C:>python Python 3.11.11 | packaged by Anaconda, Inc. | (main, Dec 11 2024, 16:34:19) [MSC v.1929 64 bit (AMD64)] on win32 Type “help”, “copyright”, “credits” or “license” for more information. from SDToolbox import PostShock_eq Tracebac…...
在宝塔中使用.NET环境管理部署 .NET Core项目
本次采用的演示环境未腾讯云轻量级服务器,使用应用模板,选择宝塔liunx面板。 一、登录宝塔安装环境 直接选择免密登录 进入腾讯云webshell后,输入bt,选择14 选择网站选择.NET项目安装.NET环境管理安装对应的.NET 版本 注意&…...
【DAY21】 常见的降维算法
内容来自浙大疏锦行python打卡训练营 浙大疏锦行 目录 PCA主成分分析 t-sne降维 线性判别分析 (Linear Discriminant Analysis, LDA) 作业: 什么时候用到降维 降维的主要应用场景 知识点回顾: PCA主成分分析t-sne降维LDA线性判别 通常情况下,…...
Linux面试题集合(3)
一秒刷新一次某个进程的状况 top -d 1 -p pid ’显示pid为1、2、3的进程的状况 top -p 1,2,3(按上键选择某个进程) 强制杀死进程 kill -9 pid 说一下ps和top命令的区别 ps命令只能显示执行瞬间的进程状态 top命令实时跟进进程状态 你在工作中什么情况下…...
Pytorch实现常用代码笔记
Pytorch实现常用代码笔记 基础实现代码其他代码示例Network ModulesLossUtils 基础实现代码 参考 深度学习手写代码 其他代码示例 Network Modules Pytorch实现Transformer代码示例 Loss PyTorch实现CrossEntropyLoss示例 Focal Loss 原理详解及 PyTorch 代码实现 PyTorc…...