Extract and consolidate entities, fields, types, constraints, and relationships from completed feature files and API spec into a formal DBML data model.
實體推導有三個資料來源,依優先順序處理:
${ES_SPEC_PATH})→ 每個 Aggregate 直接對應一個 Table。Aggregate 的屬性表直接成為 Table 的欄位初始集合。此為實體清單的權威來源,確保 ES 階段定義的資料結構完整保留。${FEATURE_SPECS_DIR}/*.feature)→ 從 datatable、step 中補充細節:具體型別、約束(如 price > 0)、列舉值(如 CREATED / PAID)。${API_SPECS_DIR}/api.yml)→ 補充 schema 層面的型別對應。ES Aggregates 確保不遺漏任何實體或屬性,Feature Files 確保每個屬性都有行為上的依據。兩者交叉驗證一致性。
當 ${ES_SPEC_PATH} 中有 Aggregates 定義時,AI 先從 Aggregates 直接映射為 Tables 初版草稿。
erm.dbml 草稿,由協調器統一展示。Enum 定義,並將對應欄位型別設為該 Enum。price > 0)erm.dbml,展示更新內容,與用戶確認。| price | 50 |,屬性名稱與型別(int)已顯而易見。當屬性的值域為有限集合(如狀態、類型、方法),必須定義為 Enum,不可用 varchar + note 列舉替代。
Enum <enum_name> {
VALUE_A [note: '<中文說明>']
VALUE_B [note: '<中文說明>']
}
order_status、coupon_type)。[note: '...'] 提供中文對照。// <實體說明>
Table <table_name> {
<field_name> <type> [<attributes>]
indexes {
<field_name>
(<field1>, <field2>) [unique]
}
Note: '''
<實體用途>
<僅保留 DBML 語法無法表達的約束>:
- <跨屬性不變條件>
- <狀態流轉規則>
- <嵌套結構(如 JSON)的 schema 說明>
'''
}
以 [attr1, attr2, ...] 語法組合:
| 屬性 | 語法 | 說明 |
|---|---|---|
| 主鍵 | primary key | |
| 自動遞增 | increment | |
| 非空 | not null | |
| 可空 | null | |
| 唯一 | unique | |
| 預設值 | default: <value> | 字面值或 `now()` |
| 外鍵 | ref: > <table.field> | > 多對一, < 一對多, - 一對一 |
| 備註 | note: '<說明>' | 僅用於補充語義,不可替代 Enum |
| 型別 | 用途 |
|---|---|
integer | 整數 |
varchar / varchar(N) | 字串(可指定長度) |
decimal(M,N) | 精確小數(金額等) |
timestamp | 時間戳 |
json | 結構化嵌套資料 |
boolean | 布林值 |
<enum_name> | 引用已定義的 Enum 型別 |
| 情境 | 做法 |
|---|---|
| 屬性值為有限集合(狀態、類型、方法) | 定義 Enum,欄位型別設為該 Enum |
跨屬性約束(如 price > 0) | 寫入 Table Note |
| 狀態流轉規則(如 CREATED → PAID) | 寫入 Table Note |
| JSON 欄位的內部結構說明 | 寫入 Table Note |
| 單純的中文欄位名稱對照 | 使用欄位 note 屬性 |
原則:能用 DBML 結構(Enum、ref、index、attribute)表達的,就不放在 Note 裡。
${ES_SPEC_PATH} 中定義了 Aggregates,每個 Aggregate 直接對應一個 Table,不遺漏、不合併、不拆分。| status | CREATED |、| status | PAID |,則推導出 Enum order_status { CREATED; PAID; ... })。quantity > 0 約束)。僅將 Feature File 中包含的內容形式化,不添加推測性的屬性或實體。
當所有實體皆已定義完成並經用戶確認,輸出完整的 ${ENTITY_SPECS_DIR}/erm.dbml。