SuperAPI AI 工具集

loom-database-design

设计与创作

查看项目

更新于 10-15 20:28

技能介绍

用途:为不同工作负载设计数据库模式与数据模型,包括 OLTP(规范化关系模型、事务完整性)、OLAP(星型/雪花型数仓)、NoSQL(文档/键值/宽列)、时序(TimescaleDB/InfluxDB)、事件溯源(仅追加存储)以及 ETL/管道暂存。示例多为 PostgreSQL,原则可推广。

设计方法:先由需求推导模型,梳理实体、属性、关系(1:1/1:N/M:N)、访问模式(读多写多、热点查询)、数据量、增长与保留策略,并区分 OLTP 与 OLAP;物理设计由访问模式而非实体驱动。按负载选模式:OLTP 规范到 3NF 再派生读模型,处理代理键/自然键、外键级联、类型与 CHECK 约束、NULL 语义;OLAP 用星型(事实+反规范化维度),仅在维度基数/复用值得时才雪花化,支持 SCD Type 1/2/3,事实表为外键+可加度量+退化维度;时序以时间为前导主键、按时间分区、仅追加写入、下采样到汇总表并设保留策略;事件溯源用不可变事件(aggregate_id、event_type、sequence_number、payload、occurred_at),以 UNIQUE(aggregate_id, sequence_number) 做乐观并发,投影为派生读模型,payload 需版本化,快照限制重放成本。

性能与并发、迁移、ETL 是缺陷高发区:为每个子表外键列建索引;用 INCLUDE 覆盖索引;注意部分索引字面匹配限制;用声明式分区而非继承+触发器;理解 READ COMMITTED 异常与 SERIALIZABLE+40001 重试;锁感知 DDL(lock_timeout、NOT VALID+VALIDATE、CREATE INDEX CONCURRENTLY);用暂存表与审计列实现幂等 MERGE/ON CONFLICT 更新。

最佳实践:代理主键用 BIGINT GENERATED ALWAYS AS IDENTITY(非 SERIAL/INT4);时间用 TIMESTAMPTZ;金额用 NUMERIC/DECIMAL;文本用 TEXT/VARCHAR。索引覆盖 WHERE/JOIN/ORDER BY/GROUP BY,但每个索引都有写入成本,可审计 pg_stat_user_indexes 中 idx_scan=0 的索引并删除。先规范化再派生,反规范化仅以物化视图/投影形式存在。约束尽量放在数据库层(PK/FK/UNIQUE/CHECK/NOT NULL),用 NOT EXISTS 而非 NOT IN。高数据量表尽早分区/分片/复制,大规模时用 CQRS。运维上保留审计列、幂等 ETL、事件 payload 版本化、在生产级数据量上测试迁移、维护 ERD 与数据字典。

限制:资料未提供该技能的安装方式、收费、价格、平台支持与效果数据,暂未提供。