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

面试八股文--数据库基础知识总结(1)

1、数据库的定义

  • 数据库(DataBase,DB)简单来说就是数据的集合
  • 数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。
  • 数据库系统(Database System,DBS)是指基于数据库的计算机应用系统,通常由数据库、数据库管理系统、软件、数据库管理员、用户组成

2、数据库中的一些基本概念

  • 元组:元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
  • :码就是能唯一标识实体的属性,对应表中的列。
  • 候选码:若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。
  • 主码 : 主码也叫主键。主码是从候选码中选出来的。 一个实体集中只能有一个主码,但可以有多个候选码。
  • 外码 : 外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。外键用来和其他表建立联系用,外键是另一表的主键,外键是可以有重复的,可以是空值。一个表可以有多个外键。
  • 主属性:候选码中出现过的属性称为主属性。比如关系 工人(工号,身份证号,姓名,性别,部门). 显然工号和身份证号都能够唯一标示这个关系,所以都是候选码。工号、身份证号这两个属性就是主属性。如果主码是一个属性组,那么属性组中的属性都是主属性。
  • 非主属性: 不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生(学号,姓名,年龄,性别,班级)中,主码是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。

 3、数据库中三范式

  • 第一范式(1NF):属性不可再分
  • 第二范式(2NF):在1NF的基础上,消除了非主属性对码的部分函数依赖
  • 第三范式(3NF):在2NF的基础上,消除了非主属性对码的传递函数依赖

(1) 函数依赖(Functional Dependency)

函数依赖是关系数据库中属性之间的一种约束关系。假设有一个关系模式R(U) ,其中U是属性集合,如果对于U 的一个子集X 和另一个子集Y,满足以下条件:对于R的任意两个元组t和s,只要 t[X] = s[X],就必然有t[Y] = s[Y],那么称Y函数依赖于X,记作X \rightarrow Y

- 举例:在学生关系表中,假设属性集合为 {学号, 姓名, 年龄, 性别},如果每个学号唯一对应一个学生的所有信息,那么可以表示为学号 -> 姓名, 年龄, 性别。

(2)部分函数依赖(Partial Functional Dependency)

如果在关系模式R(U) 中,存在函数依赖X \rightarrow Y,并且存在X的一个真子集X' ,使得X' \rightarrow Y成立,那么称Y对X是部分函数依赖。

- 举例:假设有一个关系模式R(学号, 课程号, 成绩),其中 (学号, 课程号)是候选键。如果(学号, 课程号) -> 成绩,但同时课程号->成绩也成立,那么成绩 对 (学号, 课程号) 是部分函数依赖。

部分函数依赖会导致数据冗余和更新异常,因此在数据库设计中应尽量避免。

(3) 完全函数依赖(Full Functional Dependency)

如果在关系模式R(U)中,存在函数依赖X \rightarrow Y,并且对于X的任意真子集X',X' \rightarrow Y 都不成立,那么称Y对X是完全函数依赖。

- 举例:在关系模式R(学号, 姓名, 年龄)中,假设学号->姓名, 年龄。因为姓名和年龄不能被学号的任何真子集决定,所以姓名和年龄对学号是完全函数依赖。

完全函数依赖是数据库设计中期望的依赖关系,因为它可以减少数据冗余和更新异常。

(4) 传递函数依赖(Transitive Functional Dependency)

在关系模式R(U)中,如果存在函数依赖X \rightarrow YY \rightarrow Z,并且Y不是X 的子集,同时X 不能直接决定Z,那么称Z对X是传递函数依赖。

- 举例:假设有一个关系模式R(学号, 班级, 班主任),其中学号->班级和班级 \rightarrow 班主任,但学号不能直接决定班主任,那么班主任对学号是传递函数依赖。

传递函数依赖也会导致数据冗余和更新异常,因此在数据库设计中,通常需要通过规范化(如第三范式)来消除传递函数依赖。

4、数据库语言

1. 数据库定义语言(DDL,Data Definition Language)

数据库定义语言用于定义和管理数据库的结构,包括创建、修改、删除数据库中的各种对象(如表、视图、索引、约束等)。DDL操作直接影响数据库的模式(schema)。
 常见的DDL语句:

1. CREATE(创建)- 创建数据库:CREATE DATABASE database_name;- 创建表:CREATE TABLE table_name (column1 datatype, column2 datatype, ...);- 创建索引:CREATE INDEX index_name ON table_name (column);- 创建视图:CREATE VIEW view_name AS SELECT columns FROM table_name WHERE condition;2. ALTER(修改)- 修改表结构,例如添加或删除列:ALTER TABLE table_name ADD COLUMN column_name datatype;ALTER TABLE table_name DROP COLUMN column_name;- 修改列的数据类型:ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;3. DROP(删除)- 删除数据库:DROP DATABASE database_name;- 删除表:DROP TABLE table_name;- 删除索引:DROP INDEX index_name;- 删除视图:DROP VIEW view_name;4. TRUNCATE(清空)- 清空表中的所有数据,但保留表结构:TRUNCATE TABLE table_name;

特点:
- DDL操作通常会导致数据库结构的永久性变化。
- DDL语句在执行时通常会隐式提交事务,不可回滚。

2. 数据库操作语言(DML,Data Manipulation Language)

数据库操作语言用于操作数据库中的数据,包括插入、更新、删除数据。DML操作直接影响数据库中的数据实例,但不改变数据库的结构。常见的DML语句:

1. INSERT(插入)- 向表中插入数据:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);2. UPDATE(更新)- 修改表中的数据:UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;3. DELETE(删除)- 删除表中的数据:DELETE FROM table_name WHERE condition;4. MERGE(合并)- 在某些数据库系统中,`MERGE`语句用于根据条件插入或更新数据:MERGE INTO target_table tUSING source_table sON (t.id = s.id)WHEN MATCHED THENUPDATE SET t.column = s.columnWHEN NOT MATCHED THENINSERT (column1, column2)VALUES (s.column1, s.column2);

 特点:
- DML操作可以被事务控制(如提交或回滚)。
- DML是数据库中最常用的语言,用于日常的数据操作。

3. 数据库查询语言(DQL,Data Query Language)

数据库查询语言是DML的一个子集,专门用于从数据库中检索数据。DQL的核心是`SELECT`语句,它是数据库中最常用的操作之一。

常见的DQL语句:

1. SELECT(查询)- 基本查询:SELECT column1, column2, ...FROM table_nameWHERE condition;- 查询所有列:SELECT * FROM table_name;- 带条件的查询:SELECT column1, column2FROM table_nameWHERE column1 = value AND column2 > value;- 聚合查询:SELECT COUNT(*), AVG(column), SUM(column), MAX(column), MIN(column)FROM table_nameWHERE conditionGROUP BY column;- 多表连接查询:SELECT t1.column1, t2.column2FROM table1 t1JOIN table2 t2 ON t1.id = t2.idWHERE condition;

特点:
- DQL的核心是`SELECT`语句,用于从数据库中检索数据。
- 查询操作不会修改数据库中的数据,只是返回结果集。
- 查询语言支持复杂的逻辑,如条件过滤、分组、排序、连接等。


到这里我们就介绍完数据库的相关理论知识,从整体上把握了数据库,接下来介绍MySQL

记得给个小心心♥~

相关文章:

面试八股文--数据库基础知识总结(1)

1、数据库的定义 数据库(DataBase,DB)简单来说就是数据的集合数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。数据库系统…...

10. docker nginx官方镜像使用方法

本文介绍docker nginx官方镜像使用方法,因为第一次用,在加上对docker也不是很熟,中间踩了一些坑,为了避免下一次用又踩坑,因此记录如下,也希望能够帮到其它小伙伴。 官方镜像页面:https://hub.d…...

[Web 安全] PHP 反序列化漏洞 —— PHP 反序列化漏洞演示案例

关注这个专栏的其他相关笔记:[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 反序列化漏洞产生原因 PHP 反序列化漏洞产生的原因就是因为在反序列化过程中,unserialize() 接收的值可控。 0x01:环境搭建 这里笔者是使用 PhpStudy 搭建的环…...

es-head(es库-谷歌浏览器插件)

1.下载es-head插件压缩包,并解压缩 2.谷歌浏览器添加插件 3.使用...

第二十:【路由的props配置】

作用:让路由组件更方便的收到参数(可以将路由参数作为props传给组件) {name:xiang,path:detail/:id/:title/:content,component:Detail, ​ 第一种方法:// props的对象写法,作用:把对象中的每一组key-valu…...

Vue 2全屏滚动动画实战:结合fullpage-vue与animate.css打造炫酷H5页面

引言 在移动端H5开发中,全屏滚动效果因其沉浸式体验而广受欢迎。如何快速实现带有动态加载动画的全屏滚动页面?本文将手把手教你使用 Vue 2、全屏滚动插件 fullpage-vue 和动画库 animate.css 3.5.1,打造一个高效且视觉冲击力强的H5页面。通…...

AF3 DataPipeline类process_pdb 方法解读

DataPipeline 类中的 process_pdb 方法用于从 PDB 文件中生成特定蛋白质链的特征,作为 AlphaFold3 预测的输入。它的流程与 process_mmcif 类似,但输入来源是 PDB 文件而非 MmcifObject。 源代码: def process_pdb(self,pdb_path: str,alignment_dir: str,is_distillation:…...

抓包工具 wireshark

1.什么是抓包工具 抓包工具是什么?-CSDN博客 2.wireshark的安装 【抓包工具】win 10 / win 11:WireShark 下载、安装、使用_windows抓包工具-CSDN博客 3.wireshark的基础操作 Wireshark零基础使用教程(超详细) - 元宇宙-Meta…...

OpenBMC:BmcWeb app获取socket

OpenBMC:BmcWeb app.run-CSDN博客 app对象在run函数中调用了setupSocket() static std::vector<Acceptor> setupSocket() {std::vector<Acceptor> acceptors;char** names = nullptr;int listenFdCount = sd_listen_fds_with_names(0, &names);BMCWEB_LOG_DE…...

《深度学习实战》第2集-补充:卷积神经网络(CNN)与图像分类 实战代码解析和改进

以下是对《深度学习实战》第2集中 CIFAR-10 数据集 使用卷积神经网络进行图像分类实战 代码的详细分析&#xff0c;并增加数据探索环节&#xff0c;同时对数据探索、模型训练和评估的过程进行具体说明。所有代码都附上了运行结果配图&#xff0c;方便对比。 《深度学习实战》第…...

nodejs:express + js-mdict 作为后端,vue 3 + vite 作为前端,在线查询英汉词典

向 doubao.com/chat/ 提问&#xff1a; node.js js-mdict 作为后端&#xff0c;vue 3 vite 作为前端&#xff0c;编写在线查询英汉词典 后端部分&#xff08;express js-mdict &#xff09; 1. 项目结构 首先&#xff0c;创建一个项目目录&#xff0c;结构如下&#xff1…...

《深度剖析Linux 系统 Shell 核心用法与原理_666》

1. 管道符的用法 查找当前目录下所有txt文件并统计行数 # 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l 在/etc目录下查找包含"network"的文件并统计数量 # 使用find命令查找文件&#xff0c;并通过grep查找包含特定字符串的文件&#xf…...

索提诺比率(Sortino Ratio):更精准的风险调整收益指标(中英双语)

索提诺比率&#xff08;Sortino Ratio&#xff09;&#xff1a;更精准的风险调整收益指标 &#x1f4c9;&#x1f4ca; &#x1f4cc; 什么是索提诺比率&#xff1f; 在投资分析中&#xff0c;我们通常使用 夏普比率&#xff08;Sharpe Ratio&#xff09; 来衡量风险调整后的…...

minio作为K8S后端存储

docker部署minio mkdir -p /minio/datadocker run -d \-p 9000:9000 \-p 9001:9001 \--name minio \-v /minio/data:/data \-e "MINIO_ROOT_USERjbk" \-e "MINIO_ROOT_PASSWORDjbjbjb123" \quay.io/minio/minio server /data --console-address ":90…...

一周学会Flask3 Python Web开发-Jinja2模板访问对象

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 如果渲染模板传的是对象&#xff0c;如果如何来访问呢&#xff1f; 我们看下下面示例&#xff1a; 定义一个Student类 cla…...

RAGS评测后的数据 如何利用influxdb和grafan 进行数据汇总查看

RAGS(通常指相关性、准确性、语法、流畅性)评测后的数据能借助 InfluxDB 存储,再利用 Grafana 进行可视化展示,实现从四个维度查看数据,并详细呈现每个问题对应的这四个指标情况。以下是详细步骤: 1. 环境准备 InfluxDB 安装与配置 依据自身操作系统,从 InfluxDB 官网下…...

第25周JavaSpringboot实战-电商项目 4.商品分类管理

商品分类模块开发笔记 模块功能概述 实现分类数据的 增删改查 功能核心难点&#xff1a; 分类的父子级目录结构递归实现多级分类查找列表展示顺序控制&#xff08;从父级向子级递归&#xff09; 接口说明 后台接口 1. 添加分类 请求地址: /admin/category/add 请求方法: …...

C语言--正序、逆序输出为奇数的位。

题目&#xff1a; 采用正序和逆序分别输出为奇数的位。例如输入12345&#xff0c;正序输出135&#xff0c;逆序输出531 代码&#xff1a; #include <stdio.h>void printOddDigits(int num) {int res 0;int divider 10;while (num / divider > 10) {divider * 10;…...

C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载

下载地址<------完整源码 在数字化转型加速的背景下&#xff0c;企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台&#xff0c;其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下&#xff0c;C#开发者需要耗费大…...

H13-821 V3.0 HCIP 华为云服务架构题库

华为云上哪个服务能够用于收集来自主机和云服务的日志数据&#xff0c;并通过海量日志数据的分析与处理帮助开发或运维人员进行问题定位和分析&#xff1f; A&#xff1a;云监控服务 B&#xff1a;云日志服务 C&#xff1a;云审计服务 D&#xff1a;对象存储服务 答案&#xff…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

ubuntu清理垃圾

windows和ubuntu 双系统&#xff0c;ubuntu 150GB&#xff0c;开发用&#xff0c;基本不装太多软件。但是磁盘基本用完。 1、查看home目录 sudo du -h -d 1 $HOME | grep -v K 上面的命令查看$HOME一级目录大小&#xff0c;发现 .cache 有26GB&#xff0c;.local 有几个GB&am…...

OpenHarmony标准系统-HDF框架之I2C驱动开发

文章目录 引言I2C基础知识概念和特性协议&#xff0c;四种信号组合 I2C调试手段硬件软件 HDF框架下的I2C设备驱动案例描述驱动Dispatch驱动读写 总结 引言 I2C基础知识 概念和特性 集成电路总线&#xff0c;由串网12C(1C、12C、Inter-Integrated Circuit BUS)行数据线SDA和串…...

链结构与工作量证明7️⃣:用 Go 实现比特币的核心机制

链结构与工作量证明:用 Go 实现比特币的核心机制 如果你用 Go 写过区块、算过哈希,也大致理解了非对称加密、数据序列化这些“硬核知识”,那么恭喜你,现在我们终于可以把这些拼成一条完整的“区块链”。 不过别急,这一节我们重点搞懂两件事: 区块之间是怎么连接成“链”…...

SpringBoot离线应用的5种实现方式

在当今高度依赖网络的环境中&#xff0c;离线应用的价值日益凸显。无论是在网络不稳定的区域运行的现场系统&#xff0c;还是需要在断网环境下使用的企业内部应用&#xff0c;具备离线工作能力已成为许多应用的必备特性。 本文将介绍基于SpringBoot实现离线应用的5种不同方式。…...