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

重生之我要学后端11--数据库基础概念(持续更新)

数据库

  • 前言
  • 一、关系型数据库
  • 二、非关系型数据库
  • 三、应用场景
    • 关系型数据库(RDBMS)
    • 非关系型数据库(NoSQL)
    • 综合因素

前言

后端开发者应该熟悉数据库管理系统(DBMS),包括关系型数据库(如MySQL, PostgreSQL)和非关系型数据库(如MongoDB, Redis)的基本操作。了解如何设计数据库模式、执行CRUD操作(创建、读取、更新、删除)、编写SQL查询等是很有必要的。

一、关系型数据库

关系型数据库以表格的形式存储数据,其中每张表都有其定义好的模式(schema),指定了各个字段的数据类型和约束。常见的关系型数据库包括MySQL、PostgreSQL、Oracle、SQL Server等。

数据库设计

  • 规范化:数据库设计通常涉及规范化过程,这是一种避免冗余和依赖性的结构化技术,确保数据的逻辑存储。
  • 表设计:确定如何将数据分组到不同的表中,并定义表的列(属性)和数据类型。
  • 关系:设计表之间的关系,如一对一、一对多、多对多关系,并使用外键约束来维护数据的完整性。

CRUD操作

  • 创建(Create):插入新记录到数据库表中。
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
  • 读取(Read):查询数据库获取信息。
SELECT * FROM users WHERE username = 'john_doe';
  • 更新(Update):修改现有数据库记录。
UPDATE users SET email = 'john_doe_new@example.com' WHERE username = 'john_doe';
  • 删除(Delete):从数据库删除记录。
DELETE FROM users WHERE username = 'john_doe';

SQL查询编写

  • 基础查询:使用SELECT语句来选取数据。
  • 联结:使用JOIN语句来合并多个表的数据。
  • 子查询:在另一个SQL查询内部进行SQL查询。
  • 聚合:使用如SUM, AVG, COUNT等函数进行数据汇总。
  • 排序和筛选:使用ORDER BY和WHERE语句进行结果的排序和筛选。

二、非关系型数据库

非关系型数据库(NoSQL)有多种类型,包括文档型、键值存储、宽列存储和图形数据库等。它们没有固定的模式,可以存储半结构化数据或无结构化数据,并且在处理大量分布式数据时通常具有更高的伸缩性和灵活性。常见的非关系型数据库包括MongoDB、Redis、Cassandra、Neo4j等。

基本操作

  • 文档型数据库(如 MongoDB):集合中存储文档(通常是JSON格式),每个文档都可以有不同的结构。
    • 创建文档:db.collection.insertOne({})
    • 读取文档:db.collection.find({})
    • 更新文档:db.collection.updateOne({}, {})
    • 删除文档:db.collection.deleteOne({})
  • 键值数据库(如 Redis):通过唯一键存储和检索值。
    • 设置键值:SET key value
    • 获取键值:GET key
    • 键值过期:EXPIRE key seconds
    • 删除键:DEL key
  • 宽列存储(如 Cassandra):类似于关系型数据库的表,但每行可以有不同的列集合。
  • 图形数据库(如 Neo4j):存储节点(entities)和边(relationships),适用于表示复杂的关系网络。
    设计和建模
  • 根据应用程序的查询需求和数据访问模式来设计存储结构。
  • 在文档型数据库中,通常需要平衡嵌入文档与引用其他文档之间的关系。
  • 对于键值数据库,重点是如何有效地组织键以便于快速检索。

后端开发者应该了解如何选择适合特定用例的数据库系统,并掌握执行CRUD操作、编写查询、优化性能和确保数据一致性的方法。随着项目需求的变化,可能还需要对数据库结构进行调整或迁移。

三、应用场景

选择数据库系统时应考虑多种因素,包括数据模型、查询模式、一致性需求、伸缩性和可用性。以下是关系型数据库和非关系型数据库的一些常见应用场景:

关系型数据库(RDBMS)

  • 结构化数据存储:如果您的数据是高度结构化的并且需要以表格形式组织,关系型数据库是优秀的选择。

  • 复杂查询:支持复杂的JOIN操作和事务处理,适合需要执行复杂查询的应用。

  • 数据完整性:如果需要强一致性和复杂的事务管理(ACID属性),关系型数据库提供了这些功能。

  • 标准化操作:使用标准化的SQL语句进行操作,有利于维护和迁移。

应用场景:

  • 金融服务行业:银行、保险和其他金融机构需要精确的事务处理和报告。
  • 电子商务平台:订单管理、库存跟踪和用户信息存储等。
  • 企业级应用程序:需要强数据完整性和标准操作的场景,如CRM、ERP系统。

非关系型数据库(NoSQL)

  • 半结构化或无结构化数据:非关系型数据库可以更灵活地处理不同类型和格式的数据。

  • 水平扩展:相比于关系型数据库通常的垂直扩展,许多非关系型数据库容易实现水平扩展,即通过增加更多服务器来提高性能。

  • 高吞吐量和低延迟:特别适合需要快速读写操作的应用,例如在大规模的分布式系统中。

  • 特定数据模型优势:如文档数据库很适合JSON数据存储和检索,键值存储简单快速,宽列存储适合大量数据的分析,图形数据库优秀于关系密集型的数据分析。

应用场景:

  • 大数据处理和实时分析:适用于需处理大量数据的场景,如日志分析、用户行为追踪。
  • 社交网络平台:非关系型数据库可方便地存储和处理社交网络中的复杂关系网。
  • 缓存:键值存储如Redis常作为缓存解决方案,提高数据读取速度。
    内容管理系统和博客平台:文档数据库如MongoDB适合存储动态变化的内容。
  • IoT应用:物联网设备产生的数据量巨大且多样,非关系型数据库能够有效地处理这些数据。

综合因素

在选择数据库时,还需要考虑以下因素:

  • 预算和资源:商业数据库可能有额外成本,而开源数据库虽然免费但可能需要投入时间进行管理和维护。
  • 技术栈兼容性:数据库是否与现有的技术栈和团队技能相匹配。
  • 社区和支持:一个活跃的开发者社区和良好的技术支持是成功采用任何数据库技术的关键因素。
  • 数据安全和合规性:确保所选数据库符合行业安全标准和法规要求。
  • 未来的伸缩性和可维护性:预测业务增长和数据增长,并确定数据库是否能够应对这些挑战。

最终,选择哪种数据库通常取决于具体项目的需求、预算和开发团队的经验。有时候,混合使用关系型和非关系型数据库的多数据库架构也是可行的,以便更好地满足不同的需求和目标。

(后续进一步学习会单独开分栏)

相关文章:

重生之我要学后端11--数据库基础概念(持续更新)

数据库 前言一、关系型数据库二、非关系型数据库三、应用场景关系型数据库(RDBMS)非关系型数据库(NoSQL)综合因素 前言 后端开发者应该熟悉数据库管理系统(DBMS),包括关系型数据库(…...

配置 Cmder 到鼠标右键

win Q 快捷键搜索 cmd,以管理员身份运行 在命令行输入 cmder.exe /REGISTER ALL...

kali下安装使用蚁剑(AntSword)

目录 0x00 介绍0x01 安装0x02 使用1. 设置代理2. 请求头配置3. 编码器 0x00 介绍 蚁剑(AntSword)是一个webshell管理工具。 官方文档:https://www.yuque.com/antswordproject/antsword 0x01 安装 在kali中安装蚁剑,分为两部分&am…...

GIT-LFS使用

0.前言 目前git仓库有很多很大的文件需要管理,但是直接上传,每次clone的文件太大,所有准备使用git-lfs解决。 1、下载和安装 Git LFS 1.1、直接下载二进制包: Releases git-lfs/git-lfs GitHub 安装 Git LFS sudo rpm -ivh…...

免费分享一套SpringBoot+Vue在线水果(销售)商城管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue在线水果(销售)商城管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue在线水果(销售)商城管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue在线水果(销售)商…...

推荐两款电脑文件处理工具,强大到你不舍得卸载

EasyFileCount EasyFileCount是一款基于Java开发的多功能文件管理工具,旨在帮助用户更轻松地管理和优化他们的文件存储。以下是EasyFileCount的主要功能和特点: 查看文件夹大小:用户可以快速统计和查看文件夹的总大小,实时显示各…...

Python 高级实战:基于自然语言处理的情感分析系统

前言 在大数据和人工智能迅猛发展的今天,自然语言处理(NLP)作为人工智能的重要分支,已经深入到我们的日常生活和工作中。情感分析作为NLP中的一个重要应用,广泛应用于市场分析、舆情监控和客户反馈等领域。本文将讲述…...

ruby面试题

ruby 基础 1、each、map、collect的区别 each: 仅遍历数组,并做相应操作,数组本身不发生改变。 map:遍历数组,并做相应操作后,返回新数组(处理),原数组不变。 collect: 跟map作用一样。 collect! map!: 多了一个作…...

Android U Settings 应用中 APN 菜单实现的代码逻辑

功能简介 MobileNetwork移动网络设置页面下有【接入点设置】(APN)。 问题:为什么Controller初始化找不到pref,然后报错。 Note:什么时候切换成Controller的呢?在Android T&U 上还没有更新成kt实现 ,但是已经有Controller的方案。 流程逻辑 1、界面“telephony_a…...

java时间处理工具类

效果 最近7天:2024年6月21日-2024年6月27日过去一周、最近一周:2024年6月16日-2024年6月22日过去三个月:2024年3月-2024年6月近半年、过去半年:2023年12月-2024年6月去年:2023年1月-2023年12月过去3年:202…...

Android高级面试_2_IPC相关

Android 高级面试-3:语言相关 1、Java 相关 1.1 缓存相关 问题:LruCache 的原理? 问题:DiskLruCache 的原理? LruCache 用来实现基于内存的缓存,LRU 就是最近最少使用的意思,LruCache 基于L…...

docker封禁对外端口映射

docker比linux防火墙规则优先级要高,一旦在docker里面配置了对外服务端口的话在iptable里面封不掉,需要通过下面的方法进行封禁: 这里我的宿主机IP地址是10.5.1.244,docker 内部网络ip段是默认的172.17段的,以下为命令&#xff1…...

【leetcode系列】567.字符串的排列(滑动窗口)

题目 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 示例 示例 1: 输入:s1 “ab” s2…...

情感分析方法与实践

第1关:情感分析的基本方法 情感分析简介 情感分析,又称意见挖掘、倾向性分析等。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。在日常生活中,情感分析的应用非常普遍,下面列举几种常见的…...

迁移学习——CycleGAN

CycleGAN 1.导入需要的包2.数据加载(1)to_img 函数(2)数据加载(3)图像转换 3.随机读取图像进行预处理(1)函数参数(2)数据路径(3)读取文…...

【软件测试】对于测试中的bug,我们真正了解了吗?

目录 1.软件测试的生命周期 1.1.软件测试阶段流程 1.2.各流程的任务 2.什么是bug 2.1.bug的概念 2.2.怎么描述bug 2.3.bug的级别 2.4.bug的生命周期 1.软件测试的生命周期 在学习bug前,我们先来学习一下软件测试的生命周期,也就是测试人员进行测…...

Packer-Fuzzer一款好用的前端高效安全扫描工具

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、Packer Fuzzer介绍 Packer Fuzzer是一款针对Webpack…...

解决卸载TabX explorer软件后导致系统文件资源管理器无法正常使用问题

最近安装了最新版本的鲁大师,安装过程中不小心同时安装了捆绑软件TabX explorer。这个软件和系统自带的文件资源管理器很像,最后弹出会员到期才发现,这个不是系统文件资源管理器,是第三方的文件资源管理器,就按正常流程…...

qt for android 使用打包sqlite数据库文件方法

1.在使用sqlite数据库时,先将数据库文件打包,放置在assets中如下图: 将文件放置下android中的assets下的所有文件都会打包在APK中,可以用7zip查看apk文件 2.在qt代码读取数据文件,注意在assets下的文件都是Read-Only,需…...

MYBATIS大于等于、小于等于的写法

mybatis使用的是xml格式的文件。使用>和<号的时候&#xff0c;会存在与xml的标签的规范冲突。需要写成如下形式&#xff0c;否则会报错。 第一种写法 原符号 替换符号 < < < <> > > >& &amp; &…...

GitHub Trending 每日精选 - 2026-03-27

GitHub Trending 每日精选 - 2026-03-27 &#x1f4c8; 今日概览 今天是 2026-03-27&#xff0c;GitHub Trending 榜单上有哪些值得关注的开源项目&#xff1f;注&#xff1a;此博客为自动化生成&#xff0c;系统会在每日运行时获取最新 Trending 数据并填充具体项目信息。&…...

Pixel Fashion Atelier保姆级教程:从INSERT COIN按钮到像素粒子物理引擎解析

Pixel Fashion Atelier保姆级教程&#xff1a;从INSERT COIN按钮到像素粒子物理引擎解析 1. 像素时装锻造坊简介 像素时装锻造坊是一款融合了复古游戏美学与现代AI技术的图像生成工具。它基于Stable Diffusion和Anything-v5模型构建&#xff0c;专为时尚设计和像素艺术创作而…...

Pikachu靶场实战:SQL注入漏洞深度解析与防御指南

1. SQL注入漏洞初探&#xff1a;从Pikachu靶场开始 第一次接触SQL注入时&#xff0c;我完全被这种"通过输入框就能控制数据库"的神奇攻击方式震惊了。在Pikachu靶场这个专为Web安全学习设计的实验环境中&#xff0c;我们可以安全地体验各种SQL注入攻击手法。不同于真…...

OpenCore Legacy Patcher终极指南:让你的老Mac焕发新生,体验最新macOS

OpenCore Legacy Patcher终极指南&#xff1a;让你的老Mac焕发新生&#xff0c;体验最新macOS 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为老旧的Mac无法升…...

每日一题 力扣 3548. 等和矩阵分割 II 前缀和 哈希表 C++ 题解

文章目录题目描述思路简述代码实现复杂度分析踩坑记录题目描述 力扣 3548. 等和矩阵分割 II 示例 1&#xff1a; 输入&#xff1a; grid [[1,4],[2,3]] 输出&#xff1a; true 解释&#xff1a; 在第 0 行和第 1 行之间进行水平分割&#xff0c;结果两部分的元素和为 1 4 5…...

从CUDA核心到Tensor Core:GPU计算单元的演进与实战解析

1. CUDA核心&#xff1a;通用计算的基石 我第一次接触CUDA核心是在2012年做图像处理项目时。当时用GTX 680显卡做图像渲染&#xff0c;发现它比CPU快了近20倍&#xff0c;这个性能差距让我震惊。后来才知道&#xff0c;这要归功于显卡里密密麻麻的CUDA核心。 CUDA核心本质上就是…...

雨课堂运动与健康网课高效学习指南

1. 雨课堂运动与健康网课学习资源整合 第一次接触雨课堂的运动与健康网课时&#xff0c;我和很多同学一样手忙脚乱。平台上的资料分散在各个角落&#xff0c;视频、文档、测试题混在一起&#xff0c;根本不知道从哪里开始。后来摸索出一套资源整理方法&#xff0c;效率直接翻倍…...

Ubuntu 20.04 LTS下FinalShell安装全攻略(附一键脚本及常见问题解决)

Ubuntu 20.04 LTS下FinalShell终极配置指南&#xff1a;从安装到高阶应用 为什么开发者需要FinalShell&#xff1f; 作为一名长期使用Ubuntu进行远程服务器管理的开发者&#xff0c;我深知一款优秀的SSH工具对工作效率的影响。FinalShell作为跨平台的国产SSH工具&#xff0c;…...

3步精通哔哩下载姬:零基础掌握B站视频高效下载与管理全攻略

3步精通哔哩下载姬&#xff1a;零基础掌握B站视频高效下载与管理全攻略 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&…...

类和对象(中)——运算符重载

引入语言在语法上可以直接用指令实现运算符对 内置类型 的操作C中加入了类类型&#xff0c;那如何使用以前的运算符&#xff08;如 - * / 等&#xff09;&#xff0c;对类类型进行操作呢&#xff1f;由此引入运算符重载&#xff1a;C为了增强代码的可读性引入了运算…...