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