一、数据库与数据库管理系统
1.1 数据库的相关概念
- DB:数据库(Database):即存储数据的"仓库",其本质是一个文件系统。它保存了一系列有组织的数据。

- DBMS:数据库管理系统(Database Management System):是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。

- SQL:结构化查询语言(Structured Query Language):专门用来与数据库通信的语言。
1.2 数据库与数据库管理系统的关系
数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用项目创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体用户的数据。

1.3 MySQL 概述
• MySQL 是一个开放源代码的关系型数据库管理系统(DBMS),由瑞典 MySQL AB(创始人 Michael Widenius)公司 1995 年开发,迅速成为开源数据库的 No.1。
• 2008 被 Sun 收购(10 亿美金),2009 年 Sun 被 Oracle 收购。MariaDB 应运而生。(MySQL 的创造者担心 MySQL 有闭源的风险,因此创建了 MySQL 的分支项目 MariaDB)
• MySQL6.x 版本之后分为社区版 和商业版。
• MySQL 是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
• MySQL 是可以定制的,采用了 GPL(GNU General Public License) 协议,你可以修改源码来开发自己的 MySQL 系统。
• MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
• MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB ,64 位系统支持最大的表文件为 8TB 。
• MySQL 使用标准的 SQL 数据语言形式。
• MySQL 可以允许运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP 和 Ruby 等。
二、关系型数据库和非关系型数据库
2.1 关系型数据库(RDBMS)
-
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)
-
关系型数据库以行(row) 和列(column) 的形式存储数据,以便于用户理解。
-
关系型数据库可以用 SQL 语句方便的在一个表以及多个表之间做非常复杂的数据查询。
-
关系型数据库支持事务,使得对于安全性能很高的数据访问要求得以实现。

2.2 非关系型数据库
非关系型数据库,可看成传统关系型数据库的功能阉割版本(精简),基于键值对存储数据,不需要经过 SQL 层的解析**,性能非常高**。同时,通过减少不常用的功能,进一步提高性能。
- 键值型数据库:键值型数据库通过 Key-Value 键值的方式来存储数据,其中 Key 和 Value 可以是简单的对象,也可以是复杂的对象。Key 作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,缺点是无法像关系型数据库一样使用条件过滤(比如 WHERE),如果你不知道去哪里找数据,就要遍历所有的键,这就会消耗大量的计算。
a. 典型:Redis 典型的使用场景是作为内存缓存
-
**文档型数据库:**此类数据库可存放并获取文档,可以是 XML、JSON 等格式。在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的"值"。MongoDB 是最流行的文档型数据库。
-
**搜索引擎数据库:**搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。核心原理是"倒排索引"。
a. 典型:ElasticSearch
-
**列式数据库:**列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQL Server 等数据库都是采用的行式存储(Row-based),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的 I/O(行式存储查询时可能存在冗余字段,列式存储如果查询特定字段有效减少查询次数),适合于分布式文件系统,不足在于功能相对有限。
-
**图形数据库:**图形数据库顾名思义,就是一种存储图形关系的数据库。它利用了图这种数据结构存储了实体(对象)之间的关系。关系型数据用于存储明确关系的数据,但对于复杂关系的数据存储却有些力不从心。如社交网络中人物之间的关系,如果用关系型数据库则非常复杂,用图形数据库将非常简单。
a. 典型:Neo4J
三、关系型数据库的设计规则
3.1 表、记录、字段
E-R(entity-relationship,实体-联系)模型中有三个主要概念是: 实体集、属性、联系集。一个实体集(class)对应于数据库中的一个表(table),一个实体(instance)则对应于数据库表中的一行(row),也称为一条记录(record)。一个属性(attribute)对应于数据库表中的一(column),也称为一个字段(field)。

3.2 表的关联关系
表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
-
一对一:在这种关系中,表 A 中的一条记录仅能与表 B 中的一条记录相关联,反之亦然。例如,在一个学校管理系统中,学生表和学生档案表之间可能存在一对一关系。每个学生仅有一份档案,而每份档案也只对应一个学生。这种关系确保了数据的精确对应和唯一性,在数据查询和管理时,能够直接、准确地关联两个表中的相关信息。
-
一对多:表 A 中的一条记录可以与表 B 中的多条记录相关联,但是表 B 中的一条记录只能与表 A 中的一条记录相关联。
a. 举例:部门表和员工表
- 多对多:表 A 中的一条记录可以与表 B 中的多条记录相关联,同时表 B 中的一条记录也可以与表 A 中的多条记录相关联。
a. 举例:产品表和订单表
- 自我引用:这种关系是指在同一个表中,一条记录可以与其他记录存在关联关系。例如,在员工表中,每个员工可能有一个直属上级,而这个上级也是员工表中的一条记录。通过在员工表中添加一个指向自身的外键(如上级 ID),可以建立起这种自我引用的关系。这种关系在表示层次结构或递归关系时非常有用,例如组织结构图、目录树等,能够清晰地展示出实体之间的层级和关联。