第一章:数据库概述

news2024/9/20 1:10:40

第一章:数据库概述

1.1:为什么要使用数据库

  • 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以"固化",而持久化的现实过程大多通过各种关系数据库来完成。
  • 持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
    在这里插入图片描述

1.2:数据库与数据库管理系统

  1. 数据库的相关概念

    • DB数据库(Database):即存储数据的"仓库",其本质是一个文件系统。它保存了一系列有组织的数据。

    • DBMS数据库管理系统(Database Management System):

      ​ 是一种操作和管理数据的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。

    • SQL结构化查询语言(Structured Query Language):专门用来与数据库通信的语言。

  2. 数据库与数据库管理系统的关系

    ​ 数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体用户的数据。

    数据库管理系统,数据库和表的关系如图说所示:
    在这里插入图片描述

  3. 常见的数据库管理系统排名

    ​ 目前互联网上常见的数据库管理软件有OracleMySQLMS SQL ServerDB2PostgreSQLAccessSybaseInformix这几种。以下是2023DB-Engines Ranking对各种数据库受欢迎程度进行调查后的统计结果。(查看数据库最新排名:https://db-engines.com/en/ranking)
    在这里插入图片描述

    对应的走势图:(https://bd-engines.com/en/ranking_trend)在这里插入图片描述

  4. 常见的数据库介绍

    • Oracle

      1. 1979 年,Oracle2诞生,它是第一个商用的RDBMS(关系型数据库管理系统)。随着Oracle软件的名气
        越来越大,公司也改名叫Oracle公司。
      2. 2007年,总计85亿美金收购BEA Systems
      3. 2009年,总计74亿美金收购SUN。此前的2008年,SUN以10亿美金收购MySQL。意味着Oracle同时拥有了MySQL的管理权,至此Oracle在数据库领域中成为绝对的领导者。
      4. 2013年,甲骨文超越IBM,成为继Microsoft后全球第二大软件公司。
      5. 如今Oracle的年收入达到了400亿美金,足以证明商用(收费)数据库软件的价值。
    • SQL Server

      SQL Server是微软开发的大型商业数据库,诞生于1989年C#.net等语言常使用,与WinNT完全集成,也可以很好地与Microsoft BackOffice产品集成。

    • DB2

      IBM公司的数据库产品,收费的。常应用在银行系统中。

    • PostgreSQL

      PostgreSQL的稳定性极强,最符合SQL标准,开放源码,具备商业级DBMS质量。PG对数据量大的文本以及SQL处理较快。

    • SyBase

      ​ 已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner

    • SQLite

      ​ 嵌入式的小型数据库,应用在手机端。 零配置,SQlite3不用安装,不用配置,不用启动,关闭或者配置数据库实例。当系统崩溃后不用做任何恢复操作,再下次使用数据库的时候自动恢复。

    • informix

      IBM公司出品,取自InformationUnix的结合,它是第一个被移植到Linux上的商业数据库产品。仅运行于unix/linux平台,命令行操作。 性能较高,支持集群,适应于安全性要求极高的系统,尤其是银行,证券系统的应用。

1.3:MySQL介绍

  1. 概述

    • MySQL是一个开放源代码的关系型数据库管理系统,由瑞典MySQL AB(创始人Michael widenius)公司1995开发,迅速成为开源数据库的No.1
    • 2008Sum收购(10亿美金),2009年SumOrale收购。MariaDB应运而生。(MySQL创造者担心MySQL有闭源的风险,因此创建了MySQL的分支项目MariaDB)。
    • MySQL6.x 版本之后分为社区版商业版
    • MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
    • MySQL是开源的,所以你不需要支付额外的费用。
    • MySQL是可以定制的,采用了GPL(GNU General Public License) 协议,你可以修改源码来开发自己的MySQL系统。
    • MySQL支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
    • MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB ,64位系统支持最大的表文件为8TB
    • MySQL使用标准的SQL数据语言形式。
    • MySQL可以允许运行于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHPRuby等。
  2. MySQL发展史重大事件

    MySQL的历史就是整个互联网的发展史。互联网业务从社交领域、电商领域到金融领域的发展,推动着应用对数据库的需求提升,对传统的数据库服务能力提出了挑战。高并发、高性能、高可用、轻资源、易维护、易扩展的需求,促进了MySQL的长足发展。
    在这里插入图片描述

  3. 关于MySQL 8.0

    MySQL从5.7版本直接跳跃发布了8.0版本 ,可见这是一个令人兴奋的里程碑版本。MySQL8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是多MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。

  4. Why choose MySQL
    在这里插入图片描述

    为什么如此多的厂商要选用MySQL?大概总结的原因主要有以下几点:

    • 开放源代码,使用成本低。
    • 性能卓越,服务稳定。
    • 软件体积小,使用简单,且易于维护。
    • 历史悠久,社区用户非常活跃,遇到问题可以寻求帮助。
    • 许多互联网公司在用,经过了时间的验证。
  5. Oracle VS MySQL

    • Oracle更适合大型跨国企业的使用,因为他们对费用不敏感,但是对性能要求以及安全性有更高的要求。
    • MySQL由于体积小、速度快、总体拥有成本低,可处理上千万条记录的大型数据库,尤其是开放源码这一特点,使得很多互联网公司、中小型网站选择了MySQL作为网站数据库

1.4:RDBMS与非RDBMS

​ 从排名中我们能看出来,关系型数据库绝对是DBMS的主流,其中使用最多的DBMS分别是OracleMySQLSQL Server。这些都是关系型数据库(RDBMS)。

  1. 关系型数据库RDBMS

    • 实质

      1. 这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。
        在这里插入图片描述

      2. 关系型数据库以(row)和(column)的形式存储数据,以便于用户理解。这一系列的行和列被称为(table),一组表组成了一个库(database)。

      3. 表与表之间的数据记录有关系(relationsship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系型数据库,就是建立在关系模型基础上的数据库。

      4. SQL就是关系型数据库的查询语言。

    • 优势

      1. 复杂查询:可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
      2. 事物支持:使得对于安全新能很高的数据访问要求得以实现。
  2. 非关系型数据库非RDBMS

    • 介绍

      ​ 非关系型数据库,可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,不需要经过SQL层的解析,性能非常高。同时,减少不常用的功能,进一步提高性能。

      ​ 目前基本上大部分主流的非关系型数据库都是免费的。

    • 有哪些非关系型数据库

      ​ 相比于SQLNoSQL泛指非关系型数据库,包括了榜单上的键值型数据库、文档型数据库、搜索引擎和
      列存储等,除此以外还包括图形数据库。也只有用NoSQL一词才能将这些技术囊括进来。

      1. 键值型数据库

        ​ 键值型数据库通过Key-Value键值的方式来存储数据,其中KeyValue可以是简单的对象,也可以是复杂的对象。Key作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,缺点是无法像关系型数据库一样使用条件过滤(比如WHERE),如果你不知道去哪里找数据,就要遍历所有的键,这就会消耗大量的计算。

        ​ 键值型数据库典型的使用场景是作为内存缓存Redis是最流行的键值型数据库。
        在这里插入图片描述

      2. 文档型数据库

        ​ 此类数据库可存放并获取文档,可以是XMLJSON等格式。在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。MongoDB是最流行的文档型数据库。此外,还有CouchDB等。

      3. 搜索引擎数据库

        ​ 虽然关系型数据库采用了索引提升检索效率,但是针对全文索引效率却较低。搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。核心原理是“倒排索引”。
        ​ 典型产品:SolrElasticsearchSplunk 等。

      4. 列式数据库

        ​ 列式数据库是相对于行式存储的数据库,OracleMySQLSQL Server 等数据库都是采用的行式存储(Row-based),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统,不足在于功能相对有限。典型产品:HBase等。
        在这里插入图片描述

      5. 图形数据库

        ​ 图形数据库,利用了图这种数据结构存储了实体(对象)之间的关系。图形数据库最典型的例子就是社交网络中人与人的关系,数据模型主要是以节点和边(关系)来实现,特点在于能高效地解决复杂的关系问题。
        ​ 图形数据库顾名思义,就是一种存储图形关系的数据库。它利用了图这种数据结构存储了实体(对象)之间的关系。关系型数据用于存储明确关系的数据,但对于复杂关系的数据存储却有些力不从心。如社交网络中人物之间的关系,如果用关系型数据库则非常复杂,用图形数据库将非常简单。典型产品:Neo4JInfoGrid等。
        在这里插入图片描述

1.5:关系型数据库设计规则

​ 关系型数据库的典型数据结构就是数据表,这些数据表的组成都是结构化的(Structured)。将数据放到表中,表再放到库中,一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。表具有一些特性,这些特性定义了数据在表中如何存储,类似JavaPython中"类"的设计。

  1. 表、记录、字段

    • ER(entity-relationship,实体-联系)模型中有三个主要概念是:实体集、属性、联系集

    • 一个实体集(class)对应于数据库中的一个表(table),一个实体(instance)则对应于数据库表中的一行(row),也称为一条记录(record)。一个属性(attribute)对应于数据库表中的一列(column),也称为一个字段(field)。
      在这里插入图片描述

    • ORM思想(Object Relationl Mapping)

      1. 数据库中的一个表 <-------> JavaPython中的一个类。
      2. 表中的一条数据 <------->类中的一个对象(或实体)
      3. 表中的一个列 <--------> 类中的一个字段、属性(field)
  2. 表的关联关系

    ​ 表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。

    ​ 四种:一对一关联、一对多关联、多对多关联、自我引用。

    • 一对一关联(one-to-one)

      1. 在实际的开发中应用不多,因为一对一可以建成一张表。
      2. 举例(设计学生表):学号、姓名、手机号码、班级、系别、身份证号码、家庭住址、籍贯、紧急联系人…
        • 拆为两个表:两个表的记录是一一对应
        • 基础信息表(常用信息):学号、姓名、手机号码、班级、系别
        • 档案信息表(不常用信息):学号、身份证号码、家庭住址、籍贯、紧急联系人…
      3. 两种建表原则
        • 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一。
        • 外键是主键:主表的主键和从表的主键,形成主外键关系。
          在这里插入图片描述
    • 一对多关系(one-to-many)

      1. 常见实例场景:客户表和订单表、分类表和商品表、部门表和员工表。
      2. 举例
        • 员工表:编号、姓名、…、所属部门
        • 部门表:编号、名称、简介
      3. 一对多键表原则:在从表(多方)创建一个字段,字段作为外键之向主表(一方)的主键。
        在这里插入图片描述
    • 多对多(many-to-many)

      ​ 要表示多对多关系,必须创建第三个表,该表通常称为联接表,它将多对多关系划分为两个一对多关系。将这两个表的主键都插入第三个表中。
      在这里插入图片描述

      1. 举例:学生-课程

        • 学生信息表:一行代表一个学生的信息(学号、姓名、手机号码、班级、系别…)

        • 课程信息表:一行代表一个课程的信息(课程编号、授课老师、简介…)

        • 选课信息表:一个学生可以选多门课,一门课可以被多个学生选择

          学号		课程编号
          1			1001
          2			1001
          1			1002
          
    • 自我引用(Self reference)
      在这里插入图片描述

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

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

相关文章

低代码平台简单分享

低代码平台简单分享 文章目录 低代码平台简单分享1、什么是低代码&#xff1f;什么是低代码平台&#xff1f;2、低代码平台的前世今生**一、低代码的起源**二、低代码的分类三、低代码的能力四、低代码开发的特点 3、目前主流的低代码平台有哪些&#xff1f;优缺点&#xff1f;…

常用模拟低通滤波器的设计——契比雪夫II型滤波器

常用模拟低通滤波器的设计——契比雪夫II型滤波器 切比雪夫 II 型滤波器的振幅平方函数为&#xff1a; 式中&#xff0c;为有效带通截止频率&#xff0c; 是与通带波纹有关的参量&#xff0c; 大&#xff0c;波纹大&#xff0c;&#xff1b; 为 N 阶契比雪夫多项式。 在 Matl…

几种常见数据库的表和列信息查询

文章目录 前言1. oracle数据库1.1 表信息和注释信息1.2 表的列信息 2. mysql数据库2.1 常用的几个命令2.2 使用desc查看表结构2.3 表结构信息主要存在information_schema数据库2.4 主要表是columns&#xff0c;tables&#xff0c;schemata2.4.1 schemata 数据库信息2.4.2 table…

三、opengles画三角形

第一部分Java端 1&#xff09;界面 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.andro…

数据中台浅析——概念、架构以及未来

数据中台浅析 1. 引言 在当今的数字化时代&#xff0c;数据被誉为"新的石油"&#xff0c;越来越多的企业和组织开始深度挖掘数据的价值。在这个过程中&#xff0c;数据中台逐渐成为了数据管理和分析的核心架构&#xff0c;让我们来深入了解一下它。 1.1 数据中台…

算法复杂度分析(一)

求第n个斐波那契数列 斐波那契数 0 1 1 2 3 5 数列默认从0开始 public static int fib1(int n) {if(n < 1) return n;return fib1(n-1) fib1(n-2);}public static int fib2(int n) {if(n < 1) return n;int first 0;int secend 1;for (int i 0; i < n-1; i) {int…

七、帧缓冲离屏渲染

第一部分基础概念 1)两种帧缓冲的由来 首先opengl能够显示到屏幕&#xff0c;也是有一个默认的framebuffer由窗口系统创建并管理的&#xff0c;将数据放到默认framebuffer 中就可以显示到屏幕上。但是应用程序也想创建额外的非可显示的framebuffer。 应用程序自己创建FBO也是…

【2023RT-Thread全球技术峰会】一套全新的物联网多应用框架xiotman,助你解决多应用的难题

写在前面 就在上周&#xff0c;我作为讲师参与了2023RT-Thread全球技术峰会的主题演讲&#xff0c;我给大家带来了一套全新的解决物联网终端应用多样化的软件架构解决方案&#xff0c;在这里我再次以图文的形式介绍一下给社区的小伙伴&#xff0c;希望借此机会找到更多的同频小…

Nginx优化、Nginx+Tomcat实现负载均衡、动静分离集群部署

Nginx优化、NginxTomcat实现负载均衡、动静分离集群部署 一、Tomcat 优化二、Tomcat多实例部署1、安装好jdk2、安装tomcat3、配置tomcat环境变量4、修改tomcat2中的server.xml文件&#xff0c;要求各tomcat实例配置不能有重复的端口号5、修改各tomcat实例中的startup.sh和shutd…

ARM--$2$驱动模块

目录 1.驱动模块&#xff08;驱动程序的框架&#xff09; 2.内核中的打印函数&#xff08;编写第一个驱动程序&#xff09; Source Insight 使用&#xff1a; 打印函数编写 分析 3.驱动的多文件编译 4.模块传递参数 安装好驱动之后如何传参&#xff1f; 多驱动之间调用…

js内存管理与闭包

JavaScript内存管理 ◼ 不管什么样的编程语言&#xff0c;在代码的执行过程中都是需要给它分配内存的&#xff0c;不同的是某些编程语言需要我们自己手动的管理内存&#xff0c; 某些编程语言会可以自动帮助我们管理内存&#xff1a; ◼ 不管以什么样的方式来管理内存&#xf…

扩展系统功能——装饰模式(二)

装饰模式概述 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为&#xff0c;在现实生活中&#xff0c;这种情况也到处存在&#xff0c;例如一张照片&#xff0c;我们可以不改变照片本身&#xff0c;给它增加一个相框&#xff0c;使得它具有防潮的功能&…

安装Unity Hub和Unity Editor

1、首先下载UnityHub的安装包&#xff1a; https://unity.com/cn/download 开始您的创意项目并下载 Unity Hub | Unity 2、运行安装包 3、运行Unity Hub 第一次运行Unity Hub会默认弹出登录Unity提示&#xff0c;正常登录就可以了&#xff0c;登录后会在浏览器提示打开 Unity…

nginx+lua(openresty) 安装及使用(一)

前言 OpenResty —— 通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台。 OpenResty&#xff08;也称为 ngx_openresty&#xff09;是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超…

全志V3S嵌入式驱动开发(lcd屏幕驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于一些设备&#xff0c;人们是希望从屏幕上面获取结果信息的&#xff0c;这样也显得更直观一些。另外&#xff0c;也有一些设备&#xff0c;它本…

阿里云OSS实现图片上传(后端接口)

文章目录 1、阿里云oss服务开通2、java操作阿里云oss&#xff0c;上传文件到阿里云oss1. 创建操作阿里云oss许可证2. 安装SDK3.修改配置文件4.创建常量类&#xff0c;读取配置文件中的内容5、OssController6、OssService7、OssServiceImpl8、改进1. 多次上传相同名称文件&#…

Segment Anything学习小结

论文地址&#xff1a;Segment Anything 项目地址&#xff1a;https://github.com/facebookresearch/segment-anything 在线Demo&#xff1a; https://segment-anything.com/demo 前言 近日&#xff0c;MetaAI团队开源了一个用于分割的10亿个masks&#xff0c;1100w张图片数…

测试新手如何晋升为月入过万的软件测试工程师?“我“的测试之路不简单...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试工程师这个岗…

记一次binlog恢复Mysql某张表数据的过程

1、备份数据库&#xff0c;非常重要 2、要用户不能操作&#xff08;如果不能停止&#xff0c;可以新建一个库&#xff0c;所有的binlog执行操作在新库执行&#xff09;。 3、登录服务器&#xff1b; 4、获取Mysql数据路径 cat /etc/my.cnf.d/mysql-server.cnf5、进入当前目录…

【SpinalHDL快速入门】4.2、基本类型之Bits

文章目录 1.1、描述1.2、声明1.3、运算符1.3.1、逻辑运算&#xff08;Logic&#xff09;1.3.2、比较&#xff08;Comparison&#xff09;1.3.3、类型转换&#xff08;Type cast&#xff09;1.3.4、部分赋值/提取操作符&#xff08;Bit extraction&#xff09;1.3.5、杂项&#…