1. 基础概念
- 持久化:将内存中的数据保存到可掉电式存储设备(如硬盘、数据库、文件、XML 等),供后续使用,是企业级应用中数据固化的重要方式。
- 核心术语:
- DB(数据库):存储数据的 “仓库”,本质是文件系统,用于保存有组织的数据。
- DBMS(数据库管理系统):操纵和管理数据库的大型软件,用于建立、使用和维护数据库,用户通过它访问表中数据(如 MySQL、Oracle)。
- SQL(结构化查询语言):专门用于与数据库通信的语言。
- 关系:DBMS 管理多个数据库,每个数据库包含多个表,表存储具体数据。
2. 常见数据库管理系统(DBMS)
2.1 主流 DBMS 及特点
数据库 | 特点 | 适用场景 |
---|---|---|
Oracle | 第一个商用 RDBMS,功能强、安全性高,收费;收购 Sun 后拥有 MySQL 管理权 | 大型跨国企业 |
MySQL | 开源、速度快、体积小、易维护,支持千万级记录,分社区版和商业版 | 互联网公司、中小型网站 |
SQL Server | 微软开发,与 C#、.net 集成好,适合 Windows 环境 | 微软技术栈相关应用 |
PostgreSQL | 稳定性强,符合 SQL 标准,开源,处理大数据量文本和 SQL 快 | 需高稳定性的企业级应用 |
SQLite | 嵌入式小型数据库,零配置,崩溃后自动恢复 | 手机端应用 |
Redis | 键值型非关系数据库,性能高 | 内存缓存、排行榜 |
MongoDB | 文档型非关系数据库,存储 XML/JSON 格式文档 | 文档存储场景 |
Elasticsearch | 搜索引擎数据库,基于倒排索引,检索效率高 | 全文检索场景 |
3. MySQL 重点信息
- 概述:1995 年由瑞典 MySQL AB 公司开发,开源关系型数据库,2008 年被 Sun 收购,2009 年随 Sun 被 Oracle 收购;分社区版和商业版。
- 特点:
- 数据存于不同表中,提高速度和灵活性;
- 开源免费,可定制(基于 GPL 协议);
- 支持大型数据库(千万条记录,64 位系统表文件最大 8TB);
- 支持 C、Java、Python 等多种语言。
- 关键节点:2010 年进入 Oracle 时代,2013 年 InnoDB 成为默认存储引擎,2018 年发布 MySQL 8.0.11 GA。
4. 关系型数据库(RDBMS)与非关系型数据库(非 RDBMS)
4.1 关系型数据库(RDBMS)
- 实质:基于二维表格(行 / 列)存储数据,表与表之间存在关系,用 SQL 操作。
- 优势:
- 支持复杂查询(多表关联);
- 支持事务,保证数据安全性。
- 代表:Oracle、MySQL、SQL Server、PostgreSQL。
4.2 非关系型数据库(非 RDBMS)
- 实质:基于键值对存储,无需 SQL 解析,性能高,功能简化。
- 分类及代表:
- 键值型:Redis(内存缓存);
- 文档型:MongoDB(存储 XML/JSON);
- 搜索引擎:Elasticsearch(倒排索引,全文检索);
- 列式存储:HBase(适合分布式文件系统)。
- 适用场景:日志收集、排行榜、定时器等无需复杂关系的场景。
5. 关系型数据库设计规则
5.1 核心结构
- 层次:数据→表→库;一个库含多个表,表名唯一。
- ORM 映射:
- 表 ↔ 类;
- 记录(行) ↔ 对象;
- 字段(列) ↔ 类属性。
5.2 表的关联关系及建表原则
- 一对一:可合并为一张表,如需拆分,从表外键唯一或外键作为主键(如学生基础信息表与档案表)。
- 一对多:从表(多方)添加外键指向主表(一方)主键(如部门表与员工表)。
- 多对多:需创建中间表,存储双方主键(如学生表与课程表通过选课表关联)。
- 自我引用:表中字段关联自身主键(如员工表的 “主管编号” 关联同表 “员工编号”)。