---
url: https://docs.nemo12.com/reference/data-dictionary/retention.md
description: >-
  Từ điển dữ liệu D1, domain Retention: 1 bảng, learner_retention; cột, kiểu,
  khoá ngoại, index.
---

# Data Dictionary · Retention

> ⚙️ **Trang này sinh tự động** từ source code bằng `scripts/gen-reference.mjs` — đừng sửa tay, sửa code rồi chạy `npm run gen:reference`.

Thuộc [Data Dictionary](../data-dictionary.md). 1 bảng, `learner_retention`.

## `learner_retention`

Migration 0021 — Retention Model (SDD-017 §2, REQ-INT-23, SRC-065) Mastery ≠ Retention: learner_skill_state.mastery KHÔNG decay theo thời gian; trạng thái trí nhớ hiện tại lưu riêng tại đây, cấp node (Q-112).

migration: `0021_learner_retention.sql`

| Cột | Kiểu | Ràng buộc / ghi chú |
| --- | --- | --- |
| `learner_id` | TEXT | NOT NULL REFERENCES learners(id) |
| `subject_id` | TEXT | NOT NULL |
| `target_type` | TEXT | NOT NULL DEFAULT 'node' |
| `target_id` | TEXT | NOT NULL |
| `historical_mastery` | REAL | NOT NULL DEFAULT 0 |
| `current_retention` | REAL | NOT NULL DEFAULT 0 |
| `retention_confidence` | REAL | NOT NULL DEFAULT 0 |
| `stability_days` | REAL | NOT NULL DEFAULT 6 |
| `last_exposure_at` | TEXT | — |
| `last_successful_retrieval_at` | TEXT | — |
| `last_strong_evidence_at` | TEXT | — |
| `retrieval_count` | INTEGER | NOT NULL DEFAULT 0 |
| `successful_retrieval_count` | INTEGER | NOT NULL DEFAULT 0 |
| `review_urgency` | TEXT | NOT NULL DEFAULT 'NONE' CHECK (review_urgency IN ('NONE','LOW','MEDIUM','HIGH','CRITICAL')) |
| `next_review_earliest` | TEXT | — |
| `next_review_ideal` | TEXT | — |
| `next_review_latest` | TEXT | — |
| `model_version` | TEXT | NOT NULL DEFAULT 'retention-v1' |
| `updated_at` | TEXT | NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')) |
| — | *table constraint* | `PRIMARY KEY (learner_id, subject_id, target_type, target_id)` |

**Khóa ngoại:** `learner_id` → `learners`

**Index:** `idx_retention_review`(learner_id, subject_id, next_review_ideal)
