データベース (Dev docs)
提供:MoodleDocs
データベースの構造
これらのガイドラインに沿ったテーブルを作成するために、内蔵の データベース定義 (XMLDB) エディタ を使用することをお勧めします。
Moodleコアの version.php ファイルにどのような数字を使用するかのルール があります。
- すべてのテーブルは、主キーとして自動インクリメントの id フィールド (INT10) を持つ必要があります。 (IdColumnReasons (Dev docs) を参照してください)
- 各モジュールのインスタンスを含むメインテーブルは、モジュールと同じ名前 (例: widget) を持ち、以下の最小限のフィールドを含む必要があります:
- id - 前述のとおり
- course - 各インスタンスが所属するコースの id
- name - 各モジュールのインスタンスのフルネーム
- 'things' に関する情報を含むモジュールに関連する他のテーブルは、widget_things (複数形に注意) という名前にする必要があります。
- 一般的にコア・テーブルは、一語の名前は複数形でなく、二語の名前は最後の単語だけ複数形にします (例: 'course', 'course_categories') 。唯一の例外は、予約語(例: 'files')であることです。歴史的な理由で今はこのパターンに当てはまらないテーブルもありますが、これはいずれ変更されるでしょう。
- テーブル名、カラム名にはあらゆるデータベースにおける予約語を使用しないようにします。作成前にご確認ください。テーブル名は28文字まで、カラム名は30文字まで使用可能です。
- カラム名は常に小文字で、シンプルかつ短く、変数名と同じルールに従わなければなりません。
- 可能であれば、他のテーブルの id フィールドへの参照を含むカラム (例: widget) は widgetid と呼ばれるべきです。(この規約は新しいもので、古いテーブルでは守られていないものがあることに注意してください。)
- ブール値フィールドは、0 または 1 を含む小さな整数フィールド (例: INT4) として実装し、必要に応じて後で値を拡張できるようにする必要があります。
- ほとんどのテーブルは timemodified フィールド (INT10) を持っているはずで、これは PHP の time() 関数で取得した現在のタイムスタンプで更新されます。
- 各フィールドのデフォルト値を常に定義します(そして、それを賢明なものにします)。
- 各テーブル名は、データベースのプレフィックス ($CFG->prefix) で始まる必要があります。多くの場合、これは自動的に処理されます。また、Postgresでは、すべてのインデックスの名前もプレフィックスで始まる必要があります。
- クロスDBの互換性 を保証するために、AS キーワードの使用に関する以下の簡単なルールに従ってください (もちろん、テーブルやカラムのエイリアスを必要とする場合のみです) :
- テーブルエイリアス に AS キーワードを 使わないでください 。
- DELETE ステートメントに テーブルエイリアス を 使わないでください (Mysql はそれを好みません) 。
- 列のエイリアス には AS キーワードを 使用します 。
- 絶対に UNIQUE KEY (制約) を作らないでください。代わりに UNIQUE INDEX を使用します。将来、私たちが Moodle に参照整合性を追加することを決定し、UNIQUE KEY が必要になった場合、それらは使用されるでしょうが、今はそうではありません。XMLDB エディタでは、XMLDB のみの UNIQUE 制約と FOREIGN 制約の両方を指定できますが (XML をきちんと定義するためには、これは良いことです)、基礎となる INDEX のみが生成されることに注意してください。
- XMLDB のみの UNIQUE KEY (前項を参照) は、(XMLDB のみの) FOREIGN KEY の 対象となるフィールドがある場合 にのみ定義する必要があります。そうでなければ、単純な UNIQUE INDEX として作成します。
- 1つのブロックに関連付けられたテーブルの名前は、次の規則に従わなければなりません: $CFG->prefix + "block_" + ブロックの名前 + その他 例えば、$CFG->prefix が 'mdl_' であると仮定すると、ブロック "rss_client" のすべてのテーブルは 'mdl_block_rss_client' で始まる必要があります (最後に 'mdl_block_rss_client_anothertable' など、さらに言葉を加えることが可能です...) 。このルールは Moodle 2.0 で100%実施される予定で、それまでは開発者に時間を与えることになります。これについては、タスク 6786を参照してください。
- 決して STABLE ブランチでデータベースの変更を行ってはいけません。そうすると、ある安定版から次の安定版にアップグレードする際に、重複した変更が発生し、重大なエラーを引き起こす可能性があります。
- SQL クエリで整数型変数を参照する場合、値を引用符で囲まないでください。例えば、get_records_select('question', "category=$catid") は正しいです。get_records_select('question', "category='$catid'") は間違っています。それは $catid が未定義であるバグを隠します。 (このスレッドで解説しています。)
- SQLクエリの変数値には、決してダブルクォートを使用しないでください (例:
'SELECT * FROM {user} WHERE username = "someuser"') 。 データベースの ANSI 規格に準拠していない MySQL では問題ありませんが、Postgresql は二重引用符で囲まれたこの変数をシステム識別子 (フィールド名など) として扱います。 - Moodleはデータベースの "ビュー" をサポートしていません、使用しないでください。この件に関する詳細は、タスク 25407の Petr のコメントをご覧ください。