SuperAPI AI 工具集

database-designer

数据与分析

查看项目

更新于 10-15 16:25

技能介绍

该技能是一套面向现代数据库系统的综合数据库设计能力,结合理论原则与实用工具,帮助架构师和开发者创建可扩展、高性能、易维护的数据库模式。适用于用户提出设计数据库模式、规划数据迁移、优化查询、在 SQL 与 NoSQL 之间选型或建模数据关系等需求时。

核心能力

模式设计与分析:自动检测规范化级别(1NF 到 BCNF);针对性能优化给出反规范化策略建议;识别不恰当的数据类型与大小问题;分析缺失的外键、唯一约束与空值检查;校验表名与列名的命名约定一致性;根据 DDL 自动生成 Mermaid ERD 图。

索引优化:识别外键和查询模式上缺失的索引;为多列索引给出最优列顺序的复合索引策略;检测重叠与未使用的冗余索引;进行选择性估算与查询成本建模以为性能影响建模;在 B-tree、hash、partial、covering 及专用索引之间选型。

迁移管理:通过扩展-收缩模式实现零停机迁移;安全地新增、删除列及变更类型;生成数据迁移脚本并做自动转换与验证;提供带验证的完整回滚能力;按依赖关系规划有序的迁移执行步骤。

工具工作流(应运行脚本,而非手工分析模式) 所有路径相对于本技能目录,样例输入位于 assets/。

  1. 分析模式: python3 schema_analyzer.py --input schema.sql --generate-erd --output-format json -o analysis.json 接受 SQL DDL 或 JSON 模式(assets/sample_schema.sql / sample_schema.json)。输出包含规范化发现、缺失约束、命名问题以及 Mermaid ERD——应先向用户展示 ERD,并在优化前修复被标记的问题。

  2. 依据真实查询模式优化索引: python3 index_optimizer.py --schema assets/sample_schema.json --queries assets/sample_query_patterns.json --analyze-existing --format json -o indexes.json 先将用户的热点查询写入查询模式 JSON(可复制 assets/sample_query_patterns.json)。输出是按优先级排序的 CREATE INDEX 建议列表以及冗余索引移除项。

  3. 生成迁移: python3 migration_generator.py --current current_schema.json --target target_schema.json --zero-downtime --format sql -o migration.sql --zero-downtime 会输出扩展-收缩方案;--validate-only 仅检查可行性而不生成 SQL。

  4. 验证循环:在目标模式上重新运行第 1 步,确认首轮发现的问题已消失;在交付迁移前运行 migration_generator.py --validate-only。

数据库设计原则与最佳实践

模式设计:使用有意义的名称与清晰一致的命名约定;选择合适的数据类型,按需设定列大小以提升存储效率;定义恰当约束(外键、检查约束、唯一索引);从开始就规划规模与未来增长;清晰记录外键关系与业务规则。

性能优化:有针对性地建索引,覆盖常见查询模式而不过度索引;定期分析慢查询以监控性能;对大表进行分区;使用合适的隔离级别,在一致性与性能间取得平衡;实现连接池以提高资源利用率。

安全考虑:遵循最小权限原则,只授予必要权限;对静态和传输中的敏感数据加密;审计访问模式并记录数据库访问日志;校验输入以防 SQL 注入;保持数据库软件定期安全更新。

查询生成模式(资料提供示例) 包含 SELECT 与 JOIN(INNER JOIN、LEFT JOIN、自连接)、CTE(含递归 CTE 生成组织架构图)、窗口函数(ROW_NUMBER 用于分页/去重、RANK 与 DENSE_RANK、LAG/LEAD 比较相邻行)、聚合模式(PostgreSQL 的 FILTER 条件聚合、GROUPING SETS 多级汇总)。

迁移模式 每个迁移必须有可逆的对应脚本,文件名使用时间戳前缀排序(如 migrations/20260101_000001_create_users.up.sql 与对应 down.sql)。零停机迁移采用扩展-收缩模式:扩展(新增可空带默认值的列/表)→ 迁移数据(分批回填、应用双写)→ 过渡(应用读新列、停止写旧列)→ 收缩(在后续迁移中删除旧列)。数据回填使用批量更新避免长时间锁(示例:UPDATE users SET email_normalized = LOWER(email) WHERE id IN (SELECT id FROM users WHERE email_normalized IS NULL LIMIT 5000),循环直到影响 0 行)。回滚方面:部署 up.sql 前先在预发环境测试 down.sql;保持短回滚窗口,若已执行收缩步骤则回滚需要新的前向迁移;对不可逆变更(如删除含数据列)先做逻辑备份。

性能优化 提供索引类型对照表:B-tree(默认,用于等值、范围、ORDER BY)、GIN(全文搜索、JSONB、数组)、GiST(几何、范围类型、最近邻)、Partial(行子集以减小体积)、Covering(仅索引扫描,使用 INCLUDE 子句)。EXPLAIN 计划解读中需关注:大表上的 Seq Scan(缺索引)、行估计偏高的 Nested Loop、Buffers shared read 远高于 hit(工作集超出内存)。N+1 查询检测:症状为应用逐行发起查询;修复方式包括使用 JOIN 或子查询一次往返、ORM 预加载(select_related / includes / with)、GraphQL 解析器使用 DataLoader 模式。连接池工具:PgBouncer(PostgreSQL)、ProxySQL(MySQL)、应用内置池(HikariCP、SQLAlchemy pool);经验法则为池大小设为 (2 * CPU 核数) + 磁盘主轴数,云 SSD 从 2 * vCPU 起调优。读副本与查询路由:SELECT 路由到副本、写入到主库,需考虑复制延迟(异步通常小于 1 秒,同步为 0),关键数据读取前可用 pg_last_wal_replay_lsn() 检测延迟。

多数据库决策矩阵 对比 PostgreSQL、MySQL、SQLite、SQL Server 在适用场景、JSON 支持、复制、许可、最大实用规模上的差异。选择建议:PostgreSQL 是新项目默认选择,扩展性和标准符合性最佳;MySQL 适用于已有 MySQL 生态和简单读密集型 Web 应用;SQLite 适用于移动应用、CLI 工具、单元测试数据库、IoT/边缘;SQL Server 适用于企业政策要求及深度 .NET/Azure 集成。

NoSQL 考量 MongoDB(文档型):模式灵活、快速原型、内容管理。Redis(键值/缓存):会话存储、限流、排行榜、发布订阅。DynamoDB(宽列):Serverless AWS 应用、任意规模下的个位数毫秒延迟。原则:默认使用 SQL,仅当访问模式明显受益时才选择 NoSQL。

分片与复制 垂直分区:将列拆分到不同表(如分离 BLOB 列),减少窄查询 I/O。水平分区(分片):将行拆分到不同数据库/服务器,单节点无法容纳数据集或吞吐量时需要。分片策略包括 Hash(哈希取模,分布均匀但重新分片成本高)、Range(按日期或 ID 范围,简单且适合时间序列,但最新分片有热点)、Geographic(按用户区域,数据本地化与合规,但跨区域查询困难)。复制模式包括同步(强一致、写延迟较高,用于金融交易)、异步(最终一致、写延迟低,用于读密集 Web 应用)、半同步(至少一个副本确认,一致性与速度平衡)。

关联参考 sql-database-assistant(日常 SQL 编写、优化与调试)、database-schema-designer(ERD 建模、规范化分析与模式生成)、migration-architect(跨数据库引擎或重大模式改造的大规模迁移规划)、senior-backend(连接池、ORM 最佳实践等应用层模式)、senior-devops(数据库集群与副本的基础设施配置)。具体收费与价格信息暂未提供。