数据库表设计提示词(业务需求 → ER 图、字段类型、索引设计与 MySQL 建表语句)

新功能要建表、或者老表越改越乱时用:从业务描述和核心查询出发,得到实体关系图、每个字段的类型与约束、每个索引对应服务哪条查询,以及可直接执行的建表语句和需要你拍板的设计取舍。

NNathaniel bigo··原创首发·AI 辅助撰写
通用大模型 对话模型通用
【角色】你是一名经历过多次数据量从十万涨到上亿的后端架构师,设计表结构时先问「数据怎么查、怎么改」,再决定怎么存。

【业务信息】
- 业务描述:[业务描述]
- 核心实体(知道的话):[核心实体]
- 最常用的查询和写入(按频率排序,越具体越好):
  [核心查询场景]
- 数据量预估:[如一年 500 万订单]
- 数据库:[MySQL 8/PostgreSQL 16]
- 特殊要求(软删除、多租户、审计、历史版本等):[特殊要求]

【请依次完成】
1. 实体与关系:列出实体、关系类型(一对一、一对多、多对多及中间表),并用 Mermaid erDiagram 画出来。
2. 字段设计:每张表列出 字段 | 类型 | 可空 | 默认值 | 约束 | 说明。逐项检查:
   - 主键策略(自增、雪花 ID、UUID 的取舍,对外暴露的编号与内部主键分开);
   - 金额用 DECIMAL 或整数分,禁止 FLOAT/DOUBLE;时间字段的类型与时区约定(MySQL 的 TIMESTAMP 有 2038 年上限);
   - 字符集用 utf8mb4;状态字段的取值写进注释或枚举表;
   - 订单这类记录要冗余「下单时的快照」(商品名、单价),不能只存外键;
   - 软删除与唯一约束的冲突怎么处理。
3. 索引设计:每个索引写明服务于哪条查询;联合索引说明列顺序的理由(等值条件在前、范围条件在后,最左前缀);指出哪些查询即使加索引也会慢,并给出替代方案。
4. 输出完整的建表 DDL。
5. 前瞻风险:数据量增长到 10 倍时最先出问题的表和查询,以及届时的方案(归档、分区、读写分离、分库分表)。

【约束】
- 不确定的业务规则(如一个用户能否有多个收货地址)列为「待确认」,并说明不同答案对表结构的影响。
- 范式与冗余的每处取舍都要写理由。
- 不要为了「以后可能用到」预留大量无用字段。

【输出格式】
ER 图(Mermaid)→ 字段表(每张表一个)→ 索引与查询对照表 → DDL(SQL 代码块)→ 风险与扩展 → 待确认问题。

高亮处换成你自己的内容:[业务描述]、[核心实体]、[核心查询场景]、[如一年 500 万订单]、[特殊要求]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:[核心查询场景] 是整个设计的依据,写成「用户查看自己最近 30 天的订单,按时间倒序分页」「后台按订单号精确查询」这样具体的句子,AI 才能给出有针对性的索引。[数据量预估] 决定是否需要提前考虑分区或归档。

常见坑:

  • 只给业务描述不给查询,得到的往往是「每个外键都加一个单列索引」的平庸设计。
  • 自增主键直接当订单号对外暴露,会泄露业务量,也方便别人遍历;对外编号应单独生成。
  • AI 生成的 DDL 一定要在测试库实际执行,不同版本对默认值、排序规则的支持有差异。

追问技巧:把你最慢的那条 SQL 和 EXPLAIN 结果贴回去,问「按现在的索引会走哪个、为什么」;需求变化时说「新增一个优惠券功能,给出最小改动的表结构变更和迁移步骤」。

示例输出

示例,仅供参考(节选)
mermaid
erDiagram
  users ||--o{ orders : places
  orders ||--|{ order_items : contains
sql
CREATE TABLE orders (
  id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  order_no VARCHAR(32) NOT NULL COMMENT '对外订单号,不暴露自增 id',
  user_id BIGINT UNSIGNED NOT NULL,
  status TINYINT NOT NULL DEFAULT 0 COMMENT '0待支付 1已支付 2已取消 3已退款',
  amount_cents BIGINT NOT NULL COMMENT '实付金额,单位分',
  created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (id),
  UNIQUE KEY uk_order_no (order_no),
  KEY idx_user_created (user_id, created_at) COMMENT '我的订单:按用户查、按时间倒序'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

同款作品

用这条提示词做出来的作品;原作者会因此获得积分

做同款

还没有同款,来做第一个。

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~