Recommendation 資料庫表格說明
==============
以下依序列出各資料表的**用途**,並以表格方式說明各欄位的**欄位名稱**與**欄位意義**。
---
# ER-D

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)
```
---