Database Management Patterns 是一套用于掌握 SQL 与 NoSQL 数据库管理的综合性技能,覆盖 PostgreSQL 与 MongoDB 两大系统,内容包含模式设计、索引策略、事务管理、复制、分片以及面向生产级应用的性能优化。
适用场景 根据资料,该技能适用于以下情况:为新应用设计数据库模式,或重构既有模式;在 SQL 与 NoSQL 数据库之间做选型;利用合适的索引策略优化查询性能;通过事务与 ACID 保障实现数据一致性;使用分片与复制实现数据库水平扩展;管理需要分布式数据库的高流量应用;通过约束、触发器与校验保障数据完整性;使用执行计划与查询分析排查性能问题;通过复制与故障转移构建容错系统;以及处理复杂数据关系(关系型)或灵活模式(文档型)。
核心概念 资料先对比两类数据库范式。关系型数据库(PostgreSQL)的优势包括:ACID 事务带来的强一致性保证、JOIN/子查询/CTE 等复杂查询、外键约束与触发器等数据完整性机制、规范化数据以减少冗余并保持更新一致、成熟生态。它最适合需要严格一致性的金融系统、有复杂关系与数据完整性要求的场景、结构清晰的应用、需要复杂分析查询的系统,以及跨多表的多步事务。 文档数据库(MongoDB)的优势包括:灵活模式便于演进与多态数据、内建分片支持水平扩展、JSON 原生契合现代应用开发、嵌入式文档以反规范化提升性能、强大的聚合框架。它最适合需求快速演进的场景、数据结构多样的内容管理系统、实时分析与事件日志、使用 JSON API 的移动与 Web 应用,以及层级或嵌套数据结构。
资料还给出 ACID 属性定义:原子性(事务内所有操作同成功或同失败)、一致性(事务使数据库从一个有效状态转到另一个有效状态)、隔离性(并发事务互不干扰)、持久性(已提交事务在系统故障后仍保留)。CAP 定理方面,分布式系统只能在三者中取其二:一致性(所有节点看到相同数据)、可用性(系统保持可运行)、分区容忍(网络故障下仍可继续)。PostgreSQL 强调 CP(一致性与分区容忍),MongoDB 可依据写入/读取关注级别配置为 CP 或 AP。
PostgreSQL 模式 在模式设计基础中,资料列出规范化层级:第一范式(1NF)要求原子值、行唯一(存在主键)、无重复组;第二范式(2NF)在满足 1NF 基础上,所有非键属性依赖完整主键;第三范式(3NF)在满足 2NF 基础上,无传递依赖(非键属性仅依赖主键)。反规范化的适用场景包括:连接开销大的读密集型负载、频繁访问的聚合数据、不应变化的历史快照、性能关键的查询。 表设计模式部分给出主键示例,包括 SERIAL 自增、分布式系统用 UUID、复合主键,并附完整 SQL 代码。外键约束部分给出级联删除(ON DELETE CASCADE)、置空(ON DELETE SET NULL)和限制删除(ON DELETE RESTRICT)三种行为的建表示例。高级约束部分给出检查约束(如价格大于 0、折扣 0–100、库存不小于 0、结束日期晚于开始日期)、唯一约束(单列唯一、复合唯一、带 WHERE 条件的部分唯一索引)。触发器与函数部分提供审计追踪模式(audit_log 表与 audit_trigger_function,分别处理 INSERT/UPDATE/DELETE 并记录 row_to_json 数据)以及时间戳自动更新模式(update_modified_timestamp 函数与 posts_update_timestamp 触发器)。视图与物化视图部分说明标准视图在每次查询时计算,物化视图存储计算结果并需 REFRESH(含 CONCURRENTLY 并发刷新)更新,可在物化视图上建索引。
MongoDB 模式 文档建模策略部分对比嵌入与引用。嵌入模式(反规范化)适用于一对一或少量关系,一次查询即可取回文档与评论,读取性能更好、可原子更新整个文档;缺点是文档大小上限(MongoDB 为 16MB)、难以独立查询嵌入的子文档、若子数据需在别处出现会重复。引用模式(规范化)适用于一对多或多对多等无界关系,不重复数据、用户可拥有无限帖子、更新用户信息只需一次;缺点是需要多次查询或 $lookup、连接数据读取较慢。资料还给出混合方式(选择性反规范化),嵌入频繁访问且很少变化的字段(如用户名、头像)同时保留 author_id 引用,并说明权衡。 模式设计模式部分给出:桶模式(时间序列数据)将大量微小文档按小时合并为含 measurements 数组与 summary 的桶文档,减少文档数量、提升索引效率并预计算摘要;计算模式(预聚合数据)存储 total_sales、units_sold、unique_customers 等计算值以避免昂贵聚合,由计划任务或触发器更新;多态模式在同一集合中处理不同产品类型(如 book、electronics),以 type 字段区分并按类型查询。 聚合框架部分给出基础聚合管道示例($match、$group、$sort、$limit 按作者统计帖子数)、带 $lookup 连接用户数据并 $unwind、$project 计算发布天数的高级管道,以及以订单销售分析为例的复杂聚合式。
限制与未提供信息 资料未提供安装命令、具体版本支持范围、索引的完整策略细节、事务隔离级别说明、复制与分片的配置步骤、性能基准数据或收费与授权信息;原文在下述聚合示例处截断($match 条件内容不完整),相关后续内容暂未提供。