「XMLDBのキーおよびインデックスの命名 (Dev docs)」の版間の差分

提供:MoodleDocs
移動先:案内検索
編集の要約なし
編集の要約なし
 
(同じ利用者による、間の9版が非表示)
1行目: 1行目:
[[XMLDBドキュメンテーション|XMLDB ドキュメンテーション]] > XMLDBのキーおよびインデックスの命名
[[XMLDBドキュメンテーション (Dev docs)|XMLDB ドキュメンテーション]] > XMLDBのキーおよびインデックスの命名
----
----
DB 内のオブジェクトにはそれぞれ名前がついています。テーブル名やフィールド名はわかりやすいですが、キー、インデックス、シーケンスなど、わかりにくい名前で作成されているものもあります。このページでは、これらのオブジェクトが XMLDB ジェネレータによって圧縮された方法で命名される方法を少し説明しようと思います。
DB 内のオブジェクトにはそれぞれ名前がついています。テーブル名やフィールド名はわかりやすいですが、キー、インデックス、シーケンスなど、わかりにくい名前で作成されているものもあります。このページでは、これらのオブジェクトが XMLDB ジェネレータによって圧縮された方法で命名される方法を少し説明しようと思います。
26行目: 26行目:
<font color="blue">[$CFG->prefix]</font><font color="green">tablename_abbreviated</font>_<font color="blue">columnames_abbreviated</font>_<font color="green">object_type</font>
<font color="blue">[$CFG->prefix]</font><font color="green">tablename_abbreviated</font>_<font color="blue">columnames_abbreviated</font>_<font color="green">object_type</font>


Where:
場所:


* '''[$CFG->prefix]''' は、すべてのオブジェクトに付加するプレフィックスになりますが、Oracle については [[XMLDBの問題 (Dev docs)#Naming conventions II|"Naming conventions II]] を参照してください (30cc という制限に配慮して、このプレフィックスが 4cc より長くならないようにします) 。
* '''[$CFG->prefix]''' は、すべてのオブジェクトに付加するプレフィックスになりますが、Oracle については [[XMLDBの問題 (Dev docs)#命名規則 II|命名規則 II]] を参照してください (30cc という制限に配慮して、このプレフィックスが 4cc より長くならないようにします) 。
* '''tablename_abbreviated''' will be an abbreviated representation of the table name, automatically generated by spliting the table name is its words and getting the first '''4''' character of each word. For example, the table "<font color="red">glos</font>sary_<font color="red">entr</font>ies_<font color="red">cate</font>gories" will converted to the "<font color="red">glosentrcate</font>" abbreviation.
* '''tablename_abbreviated''' はテーブル名の省略形になります。テーブル名を単語に分割し、それぞれの単語の最初の '''4''' 文字を取得して自動的に生成されます。例えば、テーブル "<font color="red">glos</font>sary_<font color="red">entr</font>ies_<font color="red">cate</font>gories" "<font color="red">glosentrcate</font>" の略号に変換されます。
* '''columnames_abbreviated''' will be an abbreviated representation of the columns used by the object (index, key, sequence) generated by the concatenation of the first '''3''' chars of each field. For example, one index over the "<font color="red">nam</font>e, <font color="red">lev</font>el, <font color="red">con</font>text" fields be converted to the "<font color="red">namlevcon</font>" abbreviation.
* '''columnames_abbreviated''' は、各フィールドの最初の '''3''' 文字を連結した、オブジェクトが使用する列 (インデックス、キー、シーケンス) の省略表現になります。例えば、"<font color="red">nam</font>e, <font color="red">lev</font>el, <font color="red">con</font>text" フィールドの上の1インデックスは "<font color="red">namlevcon</font>" 略号に変換されます。
* ''''object_type''' will declare de type of object we are creating. It will be one of these:
* '''object_type''' は、作成するオブジェクトのタイプを宣言します。これらのいずれかになります:
** '''pk''': For Primary Keys
** '''pk''': プライマリキーの場合
** '''uk''': For Unique Keys
** '''uk''': ユニークキーの場合
** '''fk''': For Foreign Keys
** '''fk''': 外部キーの場合
** '''ck''': For Check Constraints
** '''ck''': チェックコンストレインツの場合
** '''ix''': For Indexes
** '''ix''': インデックスの場合
** '''uix''': For Unique Indexes
** '''uix''': ユニークインデックスの場合
** '''seq''': For Sequences
** '''seq''': シーケンスの場合
** '''trg''': For Triggers
** '''trg''': トリガーの場合


The method responsible to calculate this names will be shared by all the different XMLDB generators, so all objects will be uniformly named. If any of the calculated names excess the infamous 30cc. the name will be reduced by removing characters from the "columnames_abbreviated" part until if fits completely.
この名前を計算するメソッドは、すべての XMLDB ジェネレータで共有されるため、すべてのオブジェクトは統一された名前になります。計算された名前が悪名高い 30cc を超えた場合、"columnames_abbreviated" の部分から文字を削除し、完全に収まるまで名前を減らします。


Names generated automatically by RDBMS won't be specified at all. They are:
RDBMS が自動的に生成する名前は一切指定しません。それらは:
* '''sequences''': for PostgreSQL, the SERIAL keyword generates one sequence with a different name schema than the specified above.
* '''sequences''': PostgreSQL の場合、SERIAL キーワードは上で指定したものとは異なる名前のスキーマを持つシーケンスを1つ生成します。
* '''primary''': for MySQL, the PRIMARY KEY must be named (or is named by default) "primary".
* '''primary''': MySQLの場合、PRIMARY KEYの名前は "primary" でなければなりません (または、デフォルトで名付けられています) 。


Also, don't forget that you '''never''' will have to create/modify these names by hand. The XMLDB layer will generate them automatically and they are pretty different from the [[XMLDB Defining one XML structure#Conventions|conventions used]] to name elements in the XMLDB Editor.
また、これらの名前を手動で 作成/変更 する '''必要がない''' ことも忘れてはいけません。XMLDB レイヤが自動的に生成し、XMLDB エディタで要素に名前を付けるための [[XMLDB XML構造の定義 (Dev docs)#規約|慣例]] とはかなり異なるものとなっています。


[[カテゴリ:XMLDB]]
[[カテゴリ:XMLDB]]
[[en:development:XMLDB key and index naming]]
[[en:development:XMLDB key and index naming]]

2023年1月26日 (木) 01:09時点における最新版

XMLDB ドキュメンテーション > XMLDBのキーおよびインデックスの命名


DB 内のオブジェクトにはそれぞれ名前がついています。テーブル名やフィールド名はわかりやすいですが、キー、インデックス、シーケンスなど、わかりにくい名前で作成されているものもあります。このページでは、これらのオブジェクトが XMLDB ジェネレータによって圧縮された方法で命名される方法を少し説明しようと思います。

まず知っておいていただきたいのは、XMLDB スキーマファイル のもとでは、主にいくつかの 厳密な規則 に従って、すべてが簡単に命名されていることです。基本的に、すべてのキーとインデックスには、オブジェクト内のすべてのフィールド名を "-" で区切って連結した1つの文字列の名前が付けられます。つまり、フィールド "fieldA" と "fieldB" に対して1つのインデックスがある場合、XMLDB ファイル内のインデックスは "fieldA-fieldB" という名前になるのです。簡単ですね!

しかし、これらの結果の名前は、XMLDB ジェネレータが DB 構造を作成するために使用される最終的な名前にはなりません。そこで、多くの DB アプリケーションで広く使われている、ある命名法に従います:

  1. 標準的な命名規則が1つ。
  2. ある キー/インデックス が何らかのエラーを投げているときに、何が問題なのかを知ることができること。
  3. 同じ DB で複数の Moodle サーバを動作させることができること。

また、これらのルールはすべて XMLDB ジェネレータによって自動的に適用されるため、オブジェクトは正しい名前で作成され、そのような名前を直接使用する必要はありませんが、いくつかの特殊な状況下では、そのような名前に注意する必要があります。

また、RDBMS はそれぞれ名前の最大長に制限を設けています。それらは:

  • MySQL: 64 cc.
  • PostgreSQL: 64 cc.
  • Oracle: 30 cc.
  • MSSQL: 128 cc.

そのため、最小の数字が決めるように、30cc 以下ですべての名前を付けられるようにしなければなりません。

XMLDB コンストラクタ (XMLDB 形式を実際の RDBMS 文に変換できる関数) に実装する形式は、この形式に従うことを提案しています:

[$CFG->prefix]tablename_abbreviated_columnames_abbreviated_object_type

場所:

  • [$CFG->prefix] は、すべてのオブジェクトに付加するプレフィックスになりますが、Oracle については 命名規則 II を参照してください (30cc という制限に配慮して、このプレフィックスが 4cc より長くならないようにします) 。
  • tablename_abbreviated はテーブル名の省略形になります。テーブル名を単語に分割し、それぞれの単語の最初の 4 文字を取得して自動的に生成されます。例えば、テーブル "glossary_entries_categories" は "glosentrcate" の略号に変換されます。
  • columnames_abbreviated は、各フィールドの最初の 3 文字を連結した、オブジェクトが使用する列 (インデックス、キー、シーケンス) の省略表現になります。例えば、"name, level, context" フィールドの上の1インデックスは "namlevcon" 略号に変換されます。
  • object_type は、作成するオブジェクトのタイプを宣言します。これらのいずれかになります:
    • pk: プライマリキーの場合
    • uk: ユニークキーの場合
    • fk: 外部キーの場合
    • ck: チェックコンストレインツの場合
    • ix: インデックスの場合
    • uix: ユニークインデックスの場合
    • seq: シーケンスの場合
    • trg: トリガーの場合

この名前を計算するメソッドは、すべての XMLDB ジェネレータで共有されるため、すべてのオブジェクトは統一された名前になります。計算された名前が悪名高い 30cc を超えた場合、"columnames_abbreviated" の部分から文字を削除し、完全に収まるまで名前を減らします。

RDBMS が自動的に生成する名前は一切指定しません。それらは:

  • sequences: PostgreSQL の場合、SERIAL キーワードは上で指定したものとは異なる名前のスキーマを持つシーケンスを1つ生成します。
  • primary: MySQLの場合、PRIMARY KEYの名前は "primary" でなければなりません (または、デフォルトで名付けられています) 。

また、これらの名前を手動で 作成/変更 する 必要がない ことも忘れてはいけません。XMLDB レイヤが自動的に生成し、XMLDB エディタで要素に名前を付けるための 慣例 とはかなり異なるものとなっています。