[Architect] Refs #204 — apply OQ decisions: diet_pattern (19th), ADR-0002 normalize dose_variants
- OQ-1: dose_variants 정규화 결정을 ADR-0002 로 승격 (ADR-0001 = 왜, ADR-0002 = 어떻게). - OQ-3: nutrition diet 패턴 5개를 별도 diet_pattern 카탈로그(19번째 SoT)로 분리. · 02-catalog §8 신규, 인덱스 IDX_diet_patterns_evidence / IDX_diet_patterns_kfit. · 05-seed: diet_patterns.json (5행) 추가, 로딩 순서 끝에 배치. · 04-migrations: v1 테이블 합계 = Catalog 8 + User 11 + 부속 1 + meta_kv = 21. - README §2/§3/§6/§11 갱신: 18→19 SoT, AC-2 에 diet_pattern=5 검증 추가. - README §12 OQ → Resolved Open Questions 표 (OQ-1~OQ-8 결정 결과). - habit_dose_variant → habit_dose_variants 표기 통일. - fn-weekly-minimum-ratio, 03-drift-schema-user 의 ADR-0002 cross-link. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# 02 — Catalog 테이블 7 개 Drift 정의 (#204)
|
||||
# 02 — Catalog 테이블 8 개 Drift 정의 (#204)
|
||||
|
||||
> 부모 설계서: [README.md](./README.md)
|
||||
> SoT: `schema/protocol.schema.json`, `break_protocol.schema.json`, `common_frame.schema.json`, `methodology.schema.json`, `frame_pattern.schema.json`, `reward_menu_item.schema.json`, `reference.schema.json`.
|
||||
> SoT: `schema/protocol.schema.json`, `break_protocol.schema.json`, `common_frame.schema.json`, `methodology.schema.json`, `frame_pattern.schema.json`, `reward_menu_item.schema.json`, `reference.schema.json`, `diet_pattern.schema.json`.
|
||||
|
||||
## 공통 규약
|
||||
|
||||
@@ -176,6 +176,36 @@ class References extends Table {
|
||||
|
||||
인덱스: `IDX_references_kind(kind)`, `IDX_references_doi(doi)` partial WHERE doi IS NOT NULL.
|
||||
|
||||
## 8. `diet_patterns` (← `diet_pattern.schema.json`)
|
||||
|
||||
> OQ-3 결정 (2026-06-11): `protocol(category='diet')` 와 분리된 별도 카탈로그.
|
||||
> 의견 분열 영역의 합리적 선택지 (지중해/케토/TRE/식물성/한식) — 단일 정답 없음, 사용자 체질·문화에 맞춰 *조합* 대상.
|
||||
|
||||
```dart
|
||||
class DietPatterns extends Table {
|
||||
TextColumn get id => text()();
|
||||
TextColumn get name => text()();
|
||||
TextColumn get core => text()();
|
||||
TextColumn get strengthsJson => text().nullable()(); // List<String> JSON
|
||||
TextColumn get weaknessesJson => text().nullable()(); // List<String> JSON
|
||||
TextColumn get evidenceStrength => text().withCheckConstraint(
|
||||
"evidence_strength IN ('strong','moderate','mixed','weak')")();
|
||||
TextColumn get koreanContextFit => text().nullable().withCheckConstraint(
|
||||
"korean_context_fit IS NULL OR korean_context_fit IN ('high','medium','low')")();
|
||||
TextColumn get starterLeversJson => text().nullable()(); // List<String> JSON, ≤3 권장
|
||||
TextColumn get medicalWarning => text().nullable()();
|
||||
TextColumn get linkedProtocolIdsJson => text().nullable()(); // List<String> JSON, protocol(category='diet') id 참조
|
||||
TextColumn get referenceIdsJson => text().nullable()(); // List<String> JSON
|
||||
@override Set<Column> get primaryKey => {id};
|
||||
}
|
||||
```
|
||||
|
||||
인덱스:
|
||||
- `IDX_diet_patterns_evidence(evidence_strength)` — UI 의 "근거 강한 순" 정렬 / 필터.
|
||||
- `IDX_diet_patterns_kfit(korean_context_fit)` partial WHERE korean_context_fit IS NOT NULL — 한국 식문화 친화도 필터.
|
||||
|
||||
> `linked_protocol_ids` 는 JSON TEXT 로 유지. M:N 조인 테이블 미생성 (행 수 작음 — diet_pattern = 5, linked protocol ≤ 6). Phase 2 에서 조인 쿼리 빈도 ↑ 시 정규화 검토.
|
||||
|
||||
## 시드 카운트 추산 (05-seed-data.md 와 sync)
|
||||
|
||||
| 테이블 | 추산 행 수 | 비고 |
|
||||
@@ -187,8 +217,9 @@ class References extends Table {
|
||||
| `methodologies` | 21 | habit-todo-methodologies.md §1~§21 |
|
||||
| `frame_patterns` | ~30 | habit-todo-methodologies.md "흔한 끊기 목표 변환 30선" |
|
||||
| `reward_menu_items` | ~30 | habit-todo-methodologies.md "권장 리워드 메뉴 30선" |
|
||||
| `diet_patterns` | 5 | nutrition/diet-protocols.md §2 (mediterranean / low_carb_keto / tre_if / plant_based / k_diet) |
|
||||
|
||||
> diet §2 (식이 패턴 5 개) 는 OQ-3 에서 결정 후 별도 분류 가능. 본 설계서는 `protocol(category='diet')` 로 동일 테이블에 포함 가정.
|
||||
> OQ-3 결정 (2026-06-11): diet §2 의 식이 패턴 5 개는 별도 `diet_patterns` 카탈로그로 분리 (위 §8). `protocols(category='diet')` 는 diet §1 의 *원칙* 6 항목만 담는다 (두 카탈로그가 `linked_protocol_ids` 로 약한 연결).
|
||||
|
||||
## 카탈로그는 read-only
|
||||
|
||||
|
||||
Reference in New Issue
Block a user