用途
Database Schema Design 是一个数据库模式设计技能,主要面向 SQL 和 NoSQL 数据库的模式设计与优化工作。它适用于以下场景:新项目的数据库模式设计;为提升性能或可扩展性而重构现有模式;实现表之间的 1:1、1:N、N:M 关系;安全地应用模式变更(迁移);以及通过索引与模式优化解决慢查询问题。
主要能力
技能按明确的步骤序列执行:
- 定义实体与属性:从业务需求中提取名词作为实体,列出每个实体的属性(列),确定数据类型(VARCHAR、INTEGER、TIMESTAMP、JSON 等),并指定主键(UUID 或自增 ID)。
- 设计关系与规范化:定义表间关系(1:1 使用外键加 UNIQUE 约束,1:N 使用外键,N:M 创建联结表),确定规范化层级(1NF 至 3NF)。决策依据包括:OLTP 系统规范化至 3NF 以保证数据完整性;OLAP/分析系统允许反规范化以提升查询性能;读多场景可通过部分反规范化减少 JOIN;写多场景通过完全规范化消除冗余。
- 建立索引策略:主键自动创建索引;WHERE 子句中频繁使用的列添加索引;用于 JOIN 的外键列添加索引;考虑组合索引(WHERE col1 = ? AND col2 = ?);UNIQUE 索引(email、username 等)。检查清单包括:频繁查询列有索引、外键列有索引、组合索引顺序经过优化(高选择性列在前)、避免索引过多(会降低 INSERT/UPDATE 性能)。
- 设置约束与触发器:NOT NULL(必填列)、UNIQUE(唯一性列)、CHECK(取值范围约束,如 price >= 0)、外键加 CASCADE 选项、设置默认值,以及通过触发器自动更新 updated_at。
- 编写迁移脚本:编写 UP 迁移(应用变更)和 DOWN 迁移(回滚),包裹在事务中,防止数据丢失(谨慎使用 ALTER TABLE)。
使用方式
技能需要用户提供输入信息。必需信息:数据库类型(PostgreSQL、MySQL、MongoDB、SQLite 等)、领域描述(存储什么数据,如电商、博客、社交媒体)、关键实体(核心数据对象,如 User、Product、Order)。可选信息:预期数据量(小 <10K 行、中 10K-1M、大 >1M,默认中)、读写比例(读多、写多、均衡,默认均衡)、事务需求(是否需要 ACID,默认 true)、分片/分区(是否需要大数据分布,默认 false)。
输出格式
交付物遵循固定项目结构:database 目录下包含 schema.sql(完整模式)、migrations(包含成对的 up/down SQL 迁移文件)、seeds(测试数据)、docs(含 ERD.md(Mermaid ERD 图)和 SCHEMA.md(模式文档)),以及 README.md。ERD 使用 Mermaid erDiagram 格式,并附带各表的描述(用途、索引、预估行数)。
适用场景
适用于电商平台、博客平台等 SQL 模式设计,以及实时聊天应用等 MongoDB NoSQL 模式设计。示例包括:电商数据库(User、Product、Order、Review 及 N:M 关系)、博客平台(用户、文章、标签 N:M、点赞、书签、嵌套评论自引用)、MongoDB 聊天应用(读多优化,嵌入 last_message 反规范化)。
限制与强制规则
必须遵守:每个表必须定义主键;有关系的表必须显式定义外键并指定 ON DELETE CASCADE/SET NULL;必填列使用 NOT NULL;建议提供默认值。禁止:滥用 EAV 模式(仅特殊情况下使用,否则查询复杂度剧增、性能下降);过度反规范化(导致数据一致性问题与更新异常风险);敏感数据明文存储(密码、卡号等必须哈希/加密)。安全规则:最小权限原则(仅授予应用数据库账户必要权限);防止 SQL 注入(使用 Prepared Statements/参数化查询);加密敏感列(考虑对静态的个人身份信息加密)。
关于该技能的具体收费、价格、支持平台及详细安装方式,资料中暂未提供。