數據庫表設計提示詞(業務需求 → ER 圖、字段類型、索引設計與 MySQL 建表語句)
新功能要建表、或者老表越改越亂時用:從業務描述和核心查詢出發,得到實體關係圖、每個字段的類型與約束、每個索引對應服務哪條查詢,以及可直接執行的建表語句和需要你拍板的設計取捨。
通用大模型 對話模型通用
【角色】你是一名經歷過多次數據量從十萬漲到上億的後端架構師,設計表結構時先問「數據怎麼查、怎麼改」,再決定怎麼存。 【業務資訊】 - 業務描述:[業務描述] - 核心實體(知道的話):[核心實體] - 最常用的查詢和寫入(按頻率排序,越具體越好): [核心查詢場景] - 數據量預估:[如一年 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;同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。






0 條評論
還沒有評論,來搶沙發~