---
# System prepended metadata

title: Recommendation 資料庫表格說明

---

Recommendation 資料庫表格說明
==============

以下依序列出各資料表的**用途**，並以表格方式說明各欄位的**欄位名稱**與**欄位意義**。

---
# ER-D
![er-d](https://hackmd.io/_uploads/ByIsFZ_5lg.png)








1\. mdl\_user
-------------

用途：儲存使用者基本資料

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 使用者在 Moodle 系統中的唯一識別碼 |
| username | 使用者帳號 |
| email | 使用者電子郵件地址 |
| firstaccess | 使用者首次登入系統的時間（字串或時間戳記） |
| timecreated | 使用者帳號建立時間（字串或時間戳記） |
| lastaccess | 使用者上次登入系統的時間（字串或時間戳記） |
| city | 使用者所屬城市 |
| lang | 使用者介面語言偏好|
| degree | 學習程度|
| loginday | 連續登入幾天 |

---

2\. mdl\_course
----------------

用途：儲存課程基本資料

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 課程唯一識別碼 |
| category | 課程所屬類別編號（對應 mdl\_course\_categories.id） |
| fullname | 課程全名 |
| foemat | 課程格式（例如 weeks、topics） |
| startdate | 課程開始時間（時間戳記） |
| enddate | 課程結束時間（時間戳記） |
| visible | 課程是否可見（0 = 隱藏，1 = 顯示） |
| summary | 課程摘要說明（長文本） |
| lang | 課程使用語言 |
| timecreated | 課程建立時間（時間戳記） |
| timemodified | 資料最後修改時間（時間戳記） |
| level | 課程所屬學段(國小、國中、普高、技高、大專) (自訂欄位) |
| CEFR | 課程所屬程度  (自訂欄位)|


---

3\. mdl\_enrol
--------------

用途：定義可用的註冊方式

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 註冊方法唯一識別碼 |
| enrol | 註冊方式名稱（manual, self, guest 等） |
| status | 註冊方法狀態（0 = 啟用，1 = 停用） |
| courseid | 此註冊方式所屬課程（對應 mdl\_courses.id） |
| timecreate | 課程開放此註冊方式的時間（時間戳記） |

---

4\. mdl\_user\_enrolments
-------------------------

用途：記錄使用者在課程中的註冊情形

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| userid | 使用者識別碼（對應 mdl\_user.id） |
| enrolid | 註冊方式識別碼（對應 mdl\_enrol.id） |
| timr\_start | 註冊起始時間（時間戳記） |

---

5\. mdl\_grade\_items
---------------------

用途：儲存課程內評分項目設定

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| categoryid | 分類識別碼（對應同表的 category id） |
| courseid | 所屬課程識別碼（對應 mdl\_courses.id） |
| itemname | 評分項目名稱 |
| itemtype | 項目類型（mod, manual 等） |
| itemmodule | 模組名稱（quiz, assignment 等） |
| grademax | 項目最高分 |
| grademin | 項目最低分 |
| timemodified | 最後修改時間（時間戳記） |

---

6\. mdl\_grade\_grades
---------------------

用途：記錄使用者各評分項目的實際成績

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| itemid | 評分項目識別碼（對應 mdl\_grade\_items.id） |
| userid | 使用者識別碼（對應 mdl\_user.id） |
| rawgrade | 原始分數 |
| finalgrade | 最終計算後分數 |
| aggregationstatus | 整合狀態（是否計算進最終成績） |
| timemodified | 最後修改時間（時間戳記） |

---

7\. mdl\_student\_school
------------------------

用途：記錄使用者就讀學校資訊

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| userid | 使用者識別碼（對應 mdl\_user.id） |
| schoolid | 學校識別碼（對應 mdl\_school.id） |
| current | 是否為目前就讀學校（0 = 否，1 = 是） |
| grada | 就讀年級 |

---

8\. mdl\_user\_teacher
----------------------

用途：記錄使用者為老師時的學校所屬

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| userid | 使用者識別碼（對應 mdl\_user.id） |
| school | 老師所屬學校名稱或識別 |

---

9\. mdl\_school\_category
----------------------------------------------------

用途：學校分類設定

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| name | 分類名稱 |

---

10\. mdl\_user\_group
---------------------

用途：使用者群組(包括班級)

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| teacherid | 老師識別碼（對應 mdl\_user.id） |
| group\_name | 群組名稱 |

---

11\. mdl\_user\_group\_member
-----------------------------

用途：群組成員關係

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| gruopid | 群組識別碼（對應 mdl\_user\_group.id） |
| userid | 使用者識別碼（對應 mdl\_user.id） |
| createtime | 加入群組時間（時間戳記） |

---

12\. mdl\_school
----------------

用途：儲存學校基本資料

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| schoolid | 學校外部識別碼 |
| cityid | 城市識別碼（對應 mdl\_city.id） |
| categoryid | 學校類別識別碼（對應 mdl\_school\_category.id） |
| name | 學校名稱 |
| type | 學校類型 |
| address | 學校地址 |
| distance | 學校是否偏遠(一般或是偏遠) |

---

13\. mdl\_city
--------------

用途：城市資料表

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| name | 城市名稱 |

---

14\. mdl\_course\_completion
----------------------------

用途：所有user已經完成的course

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| userid | 使用者識別碼（對應 mdl\_user.id） |
| course | 課程識別碼（對應 mdl\_courses.id） |
| timeenrolled | 註冊時間（時間戳記） |
| timestarted | 開始學習時間（時間戳記） |
| timecompleted | 完成時間（時間戳記） |
| reaggregate | 是否重新計算完成狀態 |

---

15\. mdl\_stats\_monthly
------------------------

用途：統計每月每個course累計被訪問的次數

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| courseid | 課程識別碼（對應 mdl\_courses.id） |
| roleid | 角色識別碼 |
| stattype | 統計類型 |
| stat1 | 統計指標 1 |
| stat2 | 統計指標 2 |
| timeend | 統計結束時間（時間戳記） |

---

16\. mdl\_stats\_daily
----------------------

用途：統計每日每個course累計被訪問的次數

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| courseid | 課程識別碼 |
| roleid | 角色識別碼 |
| stattype | 統計類型 |
| stat1 | 統計指標 1 |
| stat2 | 統計指標 2 |
| timeend | 統計結束時間 |

---

17\. mdl\_stats\_weekly
-----------------------

用途：統計每周每個course累計被訪問的次數

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| courseid | 課程識別碼 |
| roleid | 角色識別碼 |
| stattype | 統計類型 |
| stat1 | 統計指標 1 |
| stat2 | 統計指標 2 |
| timeend | 統計結束時間 |
| weeklycol | 額外週統計欄位 |

---

18\. mdl\_time
--------------

用途：紀錄user在每月每個 course module 的花費時間

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| uid | 使用者識別碼（對應 mdl\_user.id） |
| cid | 課程識別碼（對應 mdl\_courses.id） |
| cmid | 課程模組識別碼 |
| timespent | 停留時間（秒或時間單位） |
| firsttime | 第一次進入時間（時間戳記） |
| lasttime | 最後一次離開時間（時間戳記） |
| yearmonth | 年月（格式 YYYYMM） |

---

19\. mdl\_time\_statistics\_by\_course
--------------------------------------

用途：紀錄每月每個course 的上課人數及其 module 個數

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| yearmonth | 年月（YYYYMM） |
| cid | 課程識別碼 |
| name | 課程名稱 |
| monthtotal | 當月總時長 |
| coursepeople | 參與人數 |
| coursemodule | 課程模組數 |

---

20\. mdl\_time\_statistics\_by\_people
-----------------------------------------------------------------------------

用途：紀錄每月每個 user 完成 coursemodule 的 個數

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| uid | 使用者識別碼 |
| monthtatle | 當月總時長 |
| cooursemodules | 完成課程模組數 |
| yearmonth | 年月格式（YYYYMM） |

---

21\. mdl\_user\_layer
---------------------

用途：使用者分層（程度）設定

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| uid | 使用者識別碼 |
| layer | 分層類型（ENUM 定義） |

---

22\. mdl\_course\_categories
----------------------------

用途：課程分類架構

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 分類唯一識別碼 |
| name | 分類名稱 |
| description | 分類說明 |
| parent | 父群組 |
| coursecount | 此分類下課程數量 |
| visible | 是否可見（0 = 隱藏，1 = 顯示） |
| timemodified | 最後修改時間（時間戳記） |
| depth | 課程類別所在深度 |
| path | 課程類別路徑 |
| categories_type | 紀錄該類別型態(文法、聽力、閱讀等等)  (自訂欄位) |
| Level | 學校級別(國小、國中等)  (自訂欄位)|



---

## 23. `mdl_course_modules_completion`

用途: 紀錄「使用者在某個活動的完成狀態」。

| 欄位                  | 型別         | 說明                                                            |
| ------------------- | ---------- | ------------------------------------------------------------- |
| **id**              | BIGINT, PK | 主鍵。                                                           |
| **coursemoduleid**  | BIGINT     | 關聯 `mdl_course_modules.id`，指向哪個活動。                            |
| **userid**          | BIGINT     | 使用者 ID (`mdl_user.id`)。                                       |
| **completionstate** | TINYINT(1) | 完成狀態：<br>• 0 = 未完成<br>• 1 = 完成<br>• 2 = 完成但未通過<br>• 3 = 完成且通過 |
| **viewed**          | TINYINT(1) | 是否已瀏覽：<br>0 = 未看過，1 = 已看過。                                    |
| **timemodified**    | BIGINT     | 最後更新時間（UNIX timestamp）。                                       |

---

## 24. `mdl_course_modules`

用途: 紀錄「課程中每一個活動（如作業、測驗、論壇）」。

| 欄位           | 型別         | 說明                                              |
| ------------ | ---------- | ----------------------------------------------- |
| **id**       | BIGINT, PK | 主鍵。                                             |
| **course**   | BIGINT     | 關聯 `mdl_course.id`，所屬課程。                        |
| **module**   | BIGINT     | 關聯 `mdl_modules.id`，表示是哪種類型的活動（如 quiz, assign）。 |
| **instance** | BIGINT     | 指向該活動類型自己的表的主鍵，例如 `quiz.id`, `assign.id`。       |
| **section**  | BIGINT     | 關聯 `mdl_course_sections.id`，該活動屬於哪個章節。          |
| **added**    | BIGINT     | 活動建立時間（UNIX timestamp）。                         |
| **score**    | SMALLINT   | 幾乎不用，預設 0。                                      |
| **visible**  | TINYINT(1) | 是否顯示：1=顯示，0=隱藏。                                 |

---

## 25. `mdl_course_sections`

用途: 紀錄「課程中的章節 / 主題 / 週次」。

| 欄位                | 型別           | 說明                                                   |
| ----------------- | ------------ | ---------------------------------------------------- |
| **id**            | BIGINT, PK   | 主鍵。                                                  |
| **course**        | BIGINT       | 關聯 `mdl_course.id`，所屬課程。                             |
| **section**       | BIGINT       | 章節編號：<br>• 0 = General section<br>• 1,2,3… = 第幾週/主題。 |
| **name**          | VARCHAR(255) | 章節名稱（可為空，系統會自動顯示「週次/主題 X」）。                          |
| **summary**       | LONGTEXT     | 章節描述 / 摘要（HTML 格式）。                                  |
| **sequence**      | LONGTEXT     | 本章節活動的 ID 清單（逗號分隔的 `mdl_course_modules.id`）。         |
| **visible**       | TINYINT(1)   | 是否顯示章節：1=顯示，0=隱藏。                                    |
| **availability**  | LONGTEXT     | 可用性條件（JSON 格式，控制「限制存取」規則）。                           |
| **timemodified**  | BIGINT       | 最後修改時間（UNIX timestamp）。                              |

---

## 26. `mdl_modules`

用途: 紀錄「系統中有哪些模組類型（活動/資源插件）」。

| 欄位           | 型別          | 說明                                             |
| ------------ | ----------- | ---------------------------------------------- |
| **id**       | BIGINT, PK  | 主鍵。                                            |
| **name**     | VARCHAR(20) | 模組名稱，例如：`quiz`, `assign`, `forum`, `resource`。 |
| **cron**     | BIGINT      | （舊欄位）模組是否需要定時任務，通常用不到。                         |
| **lastcron** | BIGINT      | 上次執行 cron 的時間（UNIX timestamp）。                 |
| **visible**  | TINYINT(1)  | 是否啟用該模組：1=啟用, 0=停用。                            |

---
## 27. ` mdl_logstore_standard_log`
用途:紀錄使用者在整個網站的活動
| 欄位名稱            | 說明                                                         |
|---------------------|------------------------------------------------------------|
| id                  | 主鍵，自動遞增。                                              |
| component           | 事件所屬元件 (例如 core, mod_quiz, mod_forum)。                |
| action              | 動作 (create, update, delete, view, submit...)。             |
| target              | 動作目標 (例如 course, user, discussion, post)。              |
| objecttable         | 事件關聯的資料表名稱 (例如 course, quiz, forum_posts)。       |
| objectid            | 事件關聯的資料表內的記錄 ID。                                |
| crud                | 事件的 CRUD 類型：C = Create (新增)，R = Read (讀取)，U = Update (更新)，D = Delete (刪除)。|
| edulevel            | 教育層級：0 = 其他 (non-educational)，1 = 參與 (participating)，2 = 教學管理 (teaching)。 |
| contextid           | 事件所屬的 context id (例如課程、模組、系統)。               |
| contextlevel        | context 的層級 (10=系統，40=課程，50=模組...)。              |
| contextinstanceid   | context 具體對應的 ID，例如課程 ID、模組 ID。                 |
| userid              | 觸發事件的使用者 ID (mdl_user.id)。                          |
| relateduserid       | 相關的其他使用者 ID（例如某老師刪除了某學生的作業）。          |
| courseid            | 所屬課程 ID (mdl_course.id)。                                                                      |
| timecreated         | 事件發生的時間 (UNIX timestamp)。                            |
| origin              | 事件來源 (例如 web, cli, ws = web service)。                  |
| ip                  | 觸發事件的使用者 IP。                                         |
 
## 28. ` mdl_recommended_courses  (自訂TABLE)`
用途:紀錄學生被推薦的課程清單

| 欄位名稱             | 資料型態                                                 | 說明                                        | 備註             |
| ---------------- | ---------------------------------------------------- | ----------------------------------------- | -------------- |
| `id`             | `INT AUTO_INCREMENT`                                 | 主鍵（唯一識別每筆推薦紀錄）                            | PRIMARY KEY    |
| `user_id`        | `BIGINT NOT NULL`                                    | 推薦對象的使用者 ID                               | 方便查詢      |
| `course_id`      | `BIGINT NOT NULL`                                    | 被推薦的課程 ID                                 | 方便查詢      |
| `recommend_type` | `VARCHAR(50) NOT NULL`                               | 推薦類別（例如:個人、程度等） | 用來標示推薦類別|
| `create_time`    | `BIGINT DEFAULT (UNIX_TIMESTAMP())`                  | 建立時間（以 Unix 時間戳記儲存）                       | 方便程式運算與排序      |
| `clicked`        | `BOOLEAN DEFAULT FALSE`                              | 使用者是否有點擊此推薦                               | 可用於統計點擊率       |
| **索引**           | `idx_user_id`, `idx_course_id`, `idx_recommend_type` | 加速依據使用者、課程、推薦類型的查詢                        | —              |

## 29. ` mdl_user_click_recommend_log  (自訂TABLE)`
用途:紀錄學生被推薦的課程清單的每次點擊

| 欄位名稱             | 資料型態                                          | 說明                               | 備註              |
| ---------------- | --------------------------------------------- | -------------------------------- | --------------- |
| `id`             | `INT AUTO_INCREMENT`                          | 主鍵（唯一識別每次點擊）                     | PRIMARY KEY     |
| `recommended_id` | `INT NOT NULL`                                | 對應到 `mdl_recommended_courses.id` 等於0代表這筆點擊來自教師推薦 | 外鍵（FOREIGN KEY） |
| `user_id`        | `BIGINT NOT NULL`                             | 點擊該推薦的使用者 ID                     | 方便查詢       |
| `course_id`      | `BIGINT NOT NULL`                             | 被點擊的課程 ID                        | 方便查詢       |
| `click_time`     | `BIGINT DEFAULT (UNIX_TIMESTAMP())`          | 點擊發生的時間                          | 以 Unix 時間戳記儲存  |
| `teacher_recommendationsid`     | `BIGINT NOT NULL`          | teacher_recommendations的id，等於0代表這筆點擊非教師推薦                     | 以 Unix 時間戳記儲存  |
| **索引**           | `idx_recommended_id`, `idx_user_id`           | 加速查詢特定推薦或使用者的點擊紀錄                | —               |
| **外鍵**           | `recommended_id → mdl_recommended_courses.id` | 維持資料一致性                          | —               |

30 \. mdl\_levelup\_requirement  (自訂TABLE)
--------------------------------------

用途：紀錄每個等級的條件

| 欄位名稱 | 欄位意義 |
| --- | --- |
| id | 唯一識別碼 |
| level | CERF等級 |
| requirement_hours | 到達該級別的升級條件 |

31 \. teacher_recommendations (自訂TABLE)
--------------------------------------

用途:記錄教師推薦給特定學生的課程
| 欄位名稱       | 資料型態   | 條件及說明                        |
| ---------- | ------ | ---------------------------- |
| id         | BIGINT | 主鍵，AUTO_INCREMENT            |
| teacherid  | BIGINT | 不允許為 NULL，推薦教師的唯一識別 ID       |
| userid     | BIGINT | 接收推薦的學生唯一識別 ID 如果等於0代表為班級推薦 否則為個人推薦|
| courseid   | BIGINT | 不允許為 NULL，被推薦的課程唯一識別 ID      |
| createtime | BIGINT | 不允許為 NULL，存 Linux 時間戳，記錄推薦時間 |
| groupid    | BIGINT | 可為 NULL，user所屬的班級  |


---

32  mdl_user_group_assign
--------------------------------------

| 欄位 (Column)  | 可能用途／說明                                                                        |
| ------------ | ------------------------------------------------------------------------------ |
| `id`         | 主鍵 (primary key)，唯一標識這張表中的一行記錄。                                                |
| `groupid`    | 群組 (group) 的 ID —— 指向某個群組 (在 `mdl_groups` 表中)；代表這筆指派 (assign) 屬於哪個群組 (group)。  |
| `title`      | 作業標題。    |
| `assigndate` |  發布日期。           |
| `deadline`   | 截止日期／時間。                                            |
| `subgroupid` | 子群組 (sub-group) 的 ID |

---
33 \. mdl_user_group_assign_mod
--------------------------------------
| 欄位 (Column) | 可能用途／說明                                                                                                                                                         |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`        | 主鍵 (primary key)，唯一標識這張表中的一行記錄。                                                                                                                                 |
| `assignid`  | 指向 `mdl_user_group_assign.id` —— 表示這筆 “mod” 記錄屬於哪一個 assign (也就是上表中的一筆 assign 記錄)。                                                                               |
| `cid`       |  指向course id                                                   |
| `cmid`      |指向 course module id                                                                      |
| `reqtype`  | 存放要求的提交方式 (多為null) 。 |
| `reqscore`  | 存放分數門檻／要求分數 (多為null)。 |

---

34 \. mdl_user_language_level (自訂TABLE)
--------------------------------
| 欄位名稱         | 型態      | Key/限制             | 預設值 | 說明                                            |
| ------------ | ------- | ------------------ | --- | --------------------------------------------- |
| id           | BIGINT  | PK, AUTO_INCREMENT |     | 主鍵，自動遞增流水號                                    |
| userid       | BIGINT  | UQ (唯一), NN        |     | Moodle 使用者 ID（對應 `mdl_user.id`），每位使用者最多一筆程度資料 |
| vocab_level  | TINYINT | NN, UNSIGNED       | 0   | 英檢體驗區字彙程度等級（以數值表示等級；0 表示未通過/未知，數值越大代表程度越高）         |
| listen_level | TINYINT | NN, UNSIGNED       | 0   | 英檢體驗區聽力程度等級（同上）                                    |
| speak_level  | TINYINT | NN, UNSIGNED       | 0   | 英檢體驗區口說程度等級（同上）                                    |
| read_level   | TINYINT | NN, UNSIGNED       | 0   | 英檢體驗區閱讀程度等級（同上）                                    |
| write_level  | TINYINT | NN, UNSIGNED       | 0   | 英檢體驗區寫作程度等級（同上）                                    |
| timecreated  | BIGINT  | NN                 | 0   | 建立時間（Unix timestamp，秒）                        |
| timemodified | BIGINT  | NN                 | 0   | 最後更新時間（Unix timestamp，秒）                      |


35 \. mdl_user_language_level_GEPT (自訂TABLE)
--------------------------------
| 欄位名稱         | 型態      | Key/限制             | 預設值 | 說明                                            |
| ------------ | ------- | ------------------ | --- | --------------------------------------------- |
| id           | BIGINT  | PK, AUTO_INCREMENT |     | 主鍵，自動遞增流水號                                    |
| userid       | BIGINT  | UQ (唯一), NN        |     | Moodle 使用者 ID（對應 `mdl_user.id`），每位使用者最多一筆程度資料 |
| vocab_level  | TINYINT | NN, UNSIGNED       | 0   | GEPT 字彙程度等級（以數值表示等級；0 表示未通過/未知，數值越大代表程度越高）         |
| listen_level | TINYINT | NN, UNSIGNED       | 0   | GEPT 聽力程度等級（同上）                                    |
| speak_level  | TINYINT | NN, UNSIGNED       | 0   | GEPT 口說程度等級（同上）                                    |
| read_level   | TINYINT | NN, UNSIGNED       | 0   | GEPT 閱讀程度等級（同上）                                    |
| write_level  | TINYINT | NN, UNSIGNED       | 0   | GEPT 寫作程度等級（同上）                                    |
| timecreated  | BIGINT  | NN                 | 0   | 建立時間（Unix timestamp，秒）                        |
| timemodified | BIGINT  | NN                 | 0   | 最後更新時間（Unix timestamp，秒）                      |

36 \. mdl_recommended_exposure(自訂TABLE)
--------------------------------
| 欄位名稱 | 型態 | Key/限制 | 預設值 | 說明 |
| :--- | :--- | :--- | :--- | :--- |
| id | BIGINT | PK, AUTO_INCREMENT | | 主鍵，自動遞增流水號 |
| recoid | BIGINT | UQ (唯一), NN | | 對應 `mdl_recommended_courses` 的 id |
| userid | BIGINT | MUL (索引), NN | | Moodle 使用者 ID (對應 `mdl_user.id`)，<br>冗餘存儲以提升查詢效能 |
| count | BIGINT | NN | 0 | 曝光次數 (Impressions) |
| timecreated | BIGINT | NN | 0 | 建立時間 (Unix timestamp，秒) |
| timemodified | BIGINT | NN | 0 | 最後更新時間 (Unix timestamp，秒) |


### 37. mdl_user_course_preference (自訂TABLE)

此表為推薦系統的 **Ground Truth (真值)** 核心來源。
採用 **「首次歸因 (First-touch Attribution)」** 邏輯：一旦使用者點擊過推薦，該課程後續的所有互動數據（時數、模組）皆歸類為推薦成果，給予較高權重。此表整合了點擊、觀看時數與模組完成度，並計算出最終的 `totalscore`。

| 欄位名稱 | 型態 | Key/限制 | 預設值 | 說明 |
| :--- | :--- | :--- | :--- | :--- |
| **id** | BIGINT | PK, AUTO_INCREMENT | | 主鍵，自動遞增流水號 |
| **user_id** | BIGINT | UQ (複合唯一), NN | | Moodle 使用者 ID (對應 `mdl_user.id`) |
| **course_id** | BIGINT | UQ (複合唯一), NN | | Moodle 課程 ID (對應 `mdl_course.id`) |
| **click_count** | INT | NN | 0 | **推薦卡片點擊次數**<br>上限 3 分。 |
| **first_reco_click_time** | BIGINT | NN | 0 | 首次在推薦系統點擊該課程的時間，0位代表未點擊|
| **view_seconds_organic** | INT | NN | 0 | **自然觀看秒數**|
| **view_seconds_reco** | INT | NN | 0 | **推薦轉化觀看秒數 (權重加倍)**|
| **module_organic** | INT | NN | 0 | **自然完成模組數**<br> |
| **module_reco** | INT | NN | 0 | **推薦轉化完成模組數 (權重加倍)**|
| **timemodified** | BIGINT | NN | 0 | 資料最後更新時間 (Unix Timestamp)。 |
| **totalscore** | DECIMAL/INT | NN | 0 | **總偏好分數 (Preference Score)**<br>根據演算法公式計算出的權重總分。<br> |
| **last_view_time** | BIGINT | | NULL | **最後觀看時間**<br>用於計算時間衰減 (Time Decay) 或判斷活躍度。 |
| **last_module_completion_time** | BIGINT | | NULL | **最後模組完成時間**<br>用於追蹤學習進度更新狀況。 |

---
### 🔗 modules的關聯圖（邏輯關係）

```
mdl_modules (活動類型, e.g. quiz)
      ↑
mdl_course_modules (課程中的一個實際活動, e.g. 第1週的小考)
      ↑
mdl_course_sections (課程章節, e.g. 第1週)
      ↑
mdl_course (課程本身, e.g. 資料庫概論)

mdl_course_modules_completion (紀錄使用者完成狀態，連結 user + coursemodule)
```

---

