Skip to content

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)

  • 组织数据以减少冗余和依赖性。
  • 作用:提升数据存储效率和一致性。

四、最佳实践

  1. 设计合理的表结构

    • 避免过多字段,适当分表。
    • 确保每张表有主键。
  2. 适度规范化与反规范化

    • 基于业务需求权衡存储效率与查询效率。
  3. 优化索引

    • 使用索引提升查询性能,但避免过多无效索引。
    • 使用覆盖索引和联合索引。
  4. 分区与分库分表

    • 对大表进行分区存储(如按日期或区域)。
    • 在分布式场景下,使用分库分表提升性能。
  5. 定期维护

    • 优化查询(分析慢查询日志)。
    • 清理冗余数据,重建碎片化索引。
  6. 事务与并发控制

    • 使用合适的事务隔离级别,避免死锁和数据不一致。

五、常用框架

关系型数据库

  • 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。

六、注意事项

  1. 避免过度复杂的设计

    • 表结构过度复杂会增加维护成本,适当简化设计。
  2. 预估数据增长量

    • 选择适合的数据类型并预留扩展空间。
  3. 谨慎使用外键

    • 在分布式系统中,外键可能导致性能瓶颈。
  4. 安全性

    • 使用权限管理限制数据库访问。
    • 防止 SQL 注入(如参数化查询)。
  5. 备份与恢复

    • 定期备份数据库,测试恢复流程。
  6. 高并发场景优化

    • 使用读写分离、分库分表、缓存等手段提高性能。
  7. 监控与日志

    • 设置慢查询日志,定期分析并优化查询。