Manual:コーディング規約/データベース

This page is a translated version of the page Manual:Coding conventions/Database and the translation is 100% complete.
Other languages:
English • ‎français • ‎日本語
ショートカット: CC/DB

このページでは、MediaWiki コードベースの、データベースで使用するために作成されたファイル内で使用されるコーディング規約を説明します。 データベースを含むすべてのプログラム言語に適用される全般的な規約も参照してください。 コミットの確認に役立つ短いチェックリストが必要な場合は、Pre-commit checklist を使用してみてください。

MySQL/MariaDB

MySQL/MariaDB キーワードには大文字を使用し、型などには小文字を使用します。 数値型の長さは指定しないでください。varchar() および varbinary() の型には指定してください。 タイムスタンプにはすべて varbinary(14) を使用し、$dbw->timestamp( $ts ) を使用してそれらを標準形式に構文解析します。timestamp フィールド型は使用しないでください。

テーブル名の直前に /*_*/ コメントを必ず含めてください。これは、必要に応じてウィキのデータベース接頭辞に置換されるため、省略すると破損の原因になります。 同様に、テーブル宣言の後に /*$wgDBTableOptions*/ コメントを、インデックス名の直前に /*i*/ を含めます。

インデックスの作成は個別のステートメントとして記述し、テーブル作成クエリに含めないでください。個別の構文がより明確になり、一意のインデックスと一意ではないインデックスの違いを簡単に確認できます。 インデックスの作成には ALTER TABLE ... ADD INDEX ... を使用せず、代わりに常に CREATE INDEX ... ON ... を使用してください。

--
-- Track page-to-page hyperlinks within the wiki.
--
CREATE TABLE /*_*/pagelinks (
  -- Key to the page_id of the page containing the link.
  pl_from int unsigned NOT NULL default 0,

  -- Key to page_namespace/page_title of the target page.
  -- The target page may or may not exist, and due to renames
  -- and deletions may refer to different page records as time
  -- goes by.
  pl_namespace int NOT NULL default 0,
  pl_title varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;

CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);

すべての新しいテーブルには PRIMARY KEY が必要で、できれば単一の AUTO_INCREMENT ID が必要です。

SQLite

SQLite は MySQL/MariaDB と同じ SQL を使用するため、SQL は両方と互換性がある必要があります。 通常、これは Manual:データベース アクセス#SQLite の互換性に記載されているいくつかの単純なルールで実現できます。

テーブルの命名

  • テーブル名は単数名詞でなければなりません: user, page, revision など いくつかの歴史的な例外があります: pagelinks, categorylinks
  • カラム名には、テーブル名から派生した接頭辞が付けられます。短い場合はテーブル名そのもの、または省略形です:
    • pagepage_id, page_namespace, page_title
    • categorylinkscl_from, cl_namespace

スキーマの変更

開発ポリシー#データベース パッチ、特に Special:Diff/537762/prev を参照してください。

拡張機能のスキーマを更新する際は、元のスキーマ ファイルを更新することと、以前のバージョンから更新するパッチ ファイルを作成することの両方をお勧めします。