28 lines
1.4 KiB
Markdown
28 lines
1.4 KiB
Markdown
# 資料建模 (Data Modeling) 知識合約指南
|
||
|
||
## 概述
|
||
`data-modeling` 是知識合約,用來定義資料庫結構、分區鍵、索引、查詢模式、反正規化策略、TTL/快取與資料所有權。供 `design-architecture` 在設計資料模型時參考。
|
||
|
||
## 核心原則
|
||
- 資料模型必須由查詢與寫入模式驅動,而非理論純度
|
||
- 每個資料表必須有明確目的,可追溯到 PRD 需求
|
||
- 索引必須有明確的查詢模式支撐
|
||
- 資料所有權必須明確:每筆資料只屬於一個服務
|
||
|
||
## 設計重點
|
||
- **資料表定義**:資料表名稱、目的、欄位定義、主鍵、外鍵關係
|
||
- **索引設計**:索引必須有查詢模式支撐,避免 speculation 索引
|
||
- **分區鍵**:分散式資料儲存的分區鍵選擇、熱分割風險
|
||
- **關係**:One-to-one、One-to-many、Many-to-many,(含義與 cascade 行為)
|
||
- **反正規化策略**:何時反正規化、資料同步機制、過時容忍度
|
||
- **TTL 與快取**:Ephemeral 資料的 TTL、快取類型與失效策略
|
||
- **資料所有權**:每筆資料的唯一擁有服務、其他服務透過 API 或事件存取
|
||
|
||
## 知識合約職責
|
||
- 提供資料建模的理論指引
|
||
- 不直接產生資料庫結構定義(由 `design_database_schema` 負責格式)
|
||
|
||
## 不應做的事
|
||
- 不替特定資料庫選擇資料表名稱或欄位
|
||
- 不定義具體的索引名稱或類型
|
||
- 不產生 Schema 檔案 |