1)关系型数据库
关系型数据库:表设计、规范化、索引设计、外键与约束。
一、什么是关系型数据库,它解决什么问题
定义:
关系型数据库(Relational Database,RDB)是一种基于关系模型存储和管理数据的数据库,它使用表(表格形式的数据)来表示实体及其关系。
解决的问题:
- 数据组织和查询:通过结构化的表,便于数据存储、管理和查询。
- 数据一致性:通过事务机制(ACID)保证数据一致性。
- 关系管理:通过外键等机制管理表间关系。
- 高效查询:支持复杂 SQL 查询语句,灵活获取数据。
二、与非关系型数据库的区别
特性 | 关系型数据库 | 非关系型数据库(NoSQL) |
---|---|---|
数据结构 | 表格(行、列)形式,严格结构化 | 键值对、文档、列族、图等多样形式 |
查询语言 | 使用 SQL(结构化查询语言) | 根据类型可能无统一查询语言(如 JSON 查询) |
事务支持 | 完整支持 ACID | 部分支持事务或 BASE 模型(最终一致性) |
扩展性 | 垂直扩展(增加硬件)为主 | 水平扩展(增加节点)更为灵活 |
适用场景 | 适合结构化数据和强一致性要求 | 适合大数据量、灵活模型和高可扩展场景 |
三、核心概念以及作用
1)表(Table)
- 数据的基本存储单元,由行(记录)和列(字段)组成。
- 作用:用于存储有特定结构的数据。
2)主键(Primary Key)
- 每张表中唯一标识一行的字段或字段组合。
- 作用:保证数据唯一性。
3)外键(Foreign Key)
- 一个表中指向另一表主键的字段。
- 作用:实现表与表之间的关联。
4)索引(Index)
- 用于加速数据查询的结构。
- 作用:提升查询性能,但会增加写入开销。
5)事务(Transaction)
- 一组操作的集合,具备 ACID 属性:
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
- 作用:确保复杂操作的一致性。
6)视图(View)
- 一种虚拟表,通过 SQL 查询结果动态生成。
- 作用:简化复杂查询,提升安全性(可限制字段暴露)。
7)规范化(Normalization)
- 组织数据以减少冗余和依赖性。
- 作用:提升数据存储效率和一致性。
四、最佳实践
设计合理的表结构
- 避免过多字段,适当分表。
- 确保每张表有主键。
适度规范化与反规范化
- 基于业务需求权衡存储效率与查询效率。
优化索引
- 使用索引提升查询性能,但避免过多无效索引。
- 使用覆盖索引和联合索引。
分区与分库分表
- 对大表进行分区存储(如按日期或区域)。
- 在分布式场景下,使用分库分表提升性能。
定期维护
- 优化查询(分析慢查询日志)。
- 清理冗余数据,重建碎片化索引。
事务与并发控制
- 使用合适的事务隔离级别,避免死锁和数据不一致。
五、常用框架
关系型数据库
- MySQL:开源,广泛使用,支持事务。
- PostgreSQL:高级开源数据库,支持复杂查询与扩展。
- Oracle Database:商业化数据库,功能强大,适合企业级应用。
- Microsoft SQL Server:微软提供,集成于 Windows 生态。
- SQLite:轻量级嵌入式数据库。
常用 ORM 框架
- Hibernate(Java):功能强大的对象关系映射工具。
- Entity Framework(C#):微软的 ORM 框架。
- SQLAlchemy(Python):支持多种数据库的 ORM 工具。
- GORM(Go):简洁高效的 ORM 框架。
- Sequelize(Node.js):适用于 JavaScript 的 ORM。
六、注意事项
避免过度复杂的设计
- 表结构过度复杂会增加维护成本,适当简化设计。
预估数据增长量
- 选择适合的数据类型并预留扩展空间。
谨慎使用外键
- 在分布式系统中,外键可能导致性能瓶颈。
安全性
- 使用权限管理限制数据库访问。
- 防止 SQL 注入(如参数化查询)。
备份与恢复
- 定期备份数据库,测试恢复流程。
高并发场景优化
- 使用读写分离、分库分表、缓存等手段提高性能。
监控与日志
- 设置慢查询日志,定期分析并优化查询。