本文檔描述Moodle(魔燈)數(shù)據(jù)庫結構開發(fā)規(guī)范。
為了幫助您創(chuàng)建符合這些規(guī)范的數(shù)據(jù)表,建議您使用內置的數(shù)據(jù)庫定義(XMLDB)編輯器。
1 每個表都必須有一個自動遞增的id字段(INT10)作為主鍵。
2 包含每個模塊【module】實例【instances】的主表必須與模塊(例如小部件【widget】)具有相同的名稱,并且至少包含以下字段:
id -如上所述
course -模塊實例所屬課程的id
name -模塊實例的全名
3與包含“things”信息的模塊相關聯(lián)的其他表應命名為widget_things(注意復數(shù)形式)。
4一般來說,核心表的表名應該使用一個非復數(shù)單詞,而兩個單詞的表名只能是最后一個單詞采用復數(shù),例如course、course_categories。只有保留字【reserved words】例外,例如files。(由于歷史原因,目前有些表名不遵守這種規(guī)范,但這種情況后續(xù)會改變)
5 表名和列名應避免在任何數(shù)據(jù)庫中使用的保留字【reserved words】。請在創(chuàng)建之前檢查它們。表名最多可包含28個字符,列名最多可包含30個字符。
6 列名應該始終是小寫、簡單和簡短的,遵循與變量名相同的規(guī)則。
7 在可能的情況下,包含對另一個表(例如小部件【widget】)的id字段的引用的列應該稱為widgetid。(請注意,此約定是新的,在一些舊表中沒有遵循)
8布爾字段應實現(xiàn)為包含0或1的小整數(shù)字段(例如INT4),以便以后在必要時擴展值。
9大多數(shù)表都應該有一個timemodified字段(INT10),該字段用PHP的time() 函數(shù)獲得的當前時間戳更新字段值。
10始終為每個字段定義一個默認值(并使其合理)
11每個表名都應該以數(shù)據(jù)庫前綴($CFG->prefix)開頭。在很多情況下,這會自動為您解決。此外,在Postgres下,每個索引的名稱也必須以前綴開頭。
12為了保證跨數(shù)據(jù)庫的兼容性,請遵循以下關于AS關鍵字使用的簡單規(guī)則(當然,只有在需要在sql語句中為表、字段指定別名的時候):
- 不要對表的別名使用AS關鍵字。
- 不要在刪除語句中對表使用別名(Mysql不喜歡)。
- 對字段別名使用AS關鍵字。
13絕對不要創(chuàng)建唯一鍵【UNIQUE KEYs】約束。而是使用唯一索引【UNIQUE INDEXes.】。將來,如果官方?jīng)Q定向Moodle添加引用完整性,需要的話會使用唯一鍵【UNIQUE KEYs】,但現(xiàn)在不會。請注意,XMLDB編輯器允許您同時指定XMLDB-only UNIQUE和FOREIGN約束(有利于更好地定義XML),但只會在底層生成索引。
14僅當字段將成為某些(XMLDB-only)外鍵的引用目標的時候,才為這些字段定義XMLDB-only UNIQUE KEYs,否則,定義為簡單的唯一索引【UNIQUE INDEXes】。
15與版塊【block】相關聯(lián)的表的名稱必須遵循如下約定:$CFG->prefix + “block_” + name_of_the_block + 其他內容。例如,假設$CFG->prefix是’mdl_’,塊“rss_client”的所有表都必須以’mdl_block_rss_client’開頭(可以在末尾添加更多單詞,例如’mdl_block_rss_client_anothertable’ 等等)。
16不要在穩(wěn)定的分支中更改數(shù)據(jù)庫。如果這樣做,那么當用戶從一個穩(wěn)定版本升級到下一個穩(wěn)定版本時,將發(fā)生重復更改數(shù)據(jù)庫,這可能會導致嚴重錯誤。
17在SQL查詢中引用整型變量時,不要將值括在引號中。例如,下面的語句是正確的
get_records_select( 'question', 'category=$catid' )
下面的語句是錯誤的:
get_records_select('question', “category='$catid’” )
它隱藏未定義$catid的bug。(如果加了引號,當$catid沒有值時,sql語句也不會報錯)
18在SQL查詢語句中,不要對變量的值使用雙引號(例如SELECT*FROM{user}WHERE username=“someuser” )。雖然在MySQL中,這樣的SQL語句沒有問題,但這不符合ANSI數(shù)據(jù)庫標準,比如Postgresql就會將雙引號的變量值視為系統(tǒng)標識符(例如字段名)。
19 Moodle不支持數(shù)據(jù)庫“視圖”【view】,不要使用視圖。如果數(shù)據(jù)庫存在視圖、不符合規(guī)范的表,在數(shù)據(jù)庫轉換、遷移、備份、恢復、升級等操作中,可能會出現(xiàn)錯誤。