「XMLDBイントロダクション」の版間の差分

提供:MoodleDocs
移動先:案内検索
(同じ利用者による、間の45版が非表示)
1行目: 1行目:
__NOTOC__
__NOTOC__


作成中です - [[利用者:Mitsuhiro Yoshida|Mitsuhiro Yoshida]] ([[利用者・トーク:Mitsuhiro Yoshida|トーク]])
Moodle 1.7における新しい主要な機能は[[MySQL]]および[[PostgreSQL]]ですべてが正常に動作するよう管理されてきたのに対して、  さらにいつくかの[[wikipedia:RDBMS|RDBMS]] [[wikipedia:MSSQL|MSSQL]]および[[wikipedia:Oracle database|Oracle]]) でも動作するようになったことです。Moodleコアは内部的に[http://adodb.sourceforge.net/ ADOdb]を使用していたため、この機能は当初より存在していました。現在のプロジェクトの成熟度 (5歳です!) を考えた場合、すべてを整理する良い機会だと思います。


Moodle 1.7における新しい主要な機能は [[MySQL]] および [[PostgreSQL]] ですべてが正常に動作するよう管理されてきたのに対して、  さらにいつくかの [[wikipedia:RDBMS|RDBMS]] ([[wikipedia:MSSQL|MSSQL]] および [[wikipedia:Oracle database|Oracle]]) でも動作するようになったことです。Moodleコアは内部的に[http://adodb.sourceforge.net/ ADOdb]を使用していたため、この機能は当初より存在していました。現在のプロジェクトの成熟度 (5歳です!) を考えて、すべてを整理する良い機会だと思います。
当初、私たちのすべてのテストおよび事前作業は内部的には[http://adodb.sourceforge.net/ ADOdb]がどのように動作するのか、SQLに方言を持つ4種類のRDBMSをどのように統合できるか、そして残りのMoodle内でどのように使用されるか調査するためのものでした。すべてのSQLは極めて類似していますが、私たちの現在のデータベースコード (以前は「datalib.php」) を変更せざるを得ない異なる部分および独自性がありました。


I当初、私たちのすべてのテストおよび事前作業は内部的には[http://adodb.sourceforge.net/ ADOdb]がどのように動作するのか、そして、SQLに方言を持つ4種類のRDBMSをどのように統合できるか、そして残りのMoodle内でどのように使用されるか調査するためのものでした。SQLはすべて極めて類似していますが、私たちの現在のデータベースコード (以前は「datalib.php」) を変更せざるを得ない異なる部分および独自性がありました。
実施されるすべての変更の第一の目的はMoodleがさらなるRDBMSでも動作可能にすることにあります。また、その変更は以下の非機能的要求を満たす必要があります:


実施されるすべての変更の第一の目的はMoodleがさらなるRDBMSで動作可能にすることにあります。その変更は以下の非機能的要求を満たす必要があります:
* '''1DB作成/アップグレードあたり1レイヤを提供する''' ([[wikipedia:Data_Definition_Language|DDL]]): これにより開発者は各RDBMSで使用される厳密な実装から独立した中立的な形で自分の構造を作成できます。


* '''1DB作成/アップグレードあたり1レイヤを提供する''' ([[wikipedia:Data_Definition_Language|DDL]]): これにより、開発者は各RDBMSで使用される厳密な実装から独立した中立的な形で自分の構造を作成できます。
* '''DBハンドリングに1レイヤ (既存) を提供する''' ([[wikipedia:Data_Manipulation_Language|DML]]): これにより開発者は中立的および独立した形で使用されるRDBMSの情報をリクエスト/保存できます。
 
* '''DBハンドリングに1レイヤ (既存) を提供する''' ([[wikipedia:Data_Manipulation_Language|DML]]): これにより、開発者は中立的および独立した形で使用されるRDBMSの情報をリクエスト/保存できます。


* '''前のバージョンからの簡単な移行手順''': 現在のインストレーション/アップグレードシステムは少なくともサードパーティの開発者が新しいシステムに移行可能なMoodle 2.0までは動作します。
* '''前のバージョンからの簡単な移行手順''': 現在のインストレーション/アップグレードシステムは少なくともサードパーティの開発者が新しいシステムに移行可能なMoodle 2.0までは動作します。


* '''単純、便利、効果的''': 最初からMoodleのアップグレード方法は極めて洗練されて素晴らしく動作していました。しかし、これは開発者にモジュールおよびプラグインに関して2つのインストールおよびアップグレードスクリプトのメンテナンスを強制するものでした。新しい代替手段ではインストールおよびアップグレードに1つずつファイルを持つため (モジュール/プラグインに関しても)、ミスの発生する可能性を劇的に減らせました。
* '''単純、便利、効果的''': Moodleのアップグレード方法は最初から極めて洗練され素晴らしく動作していました。しかし、これは開発者にモジュールおよびプラグインに関して2つのインストールおよびアップグレードスクリプトのメンテナンスを強制するものでした。新しい代替手段ではインストールおよびアップグレードに1つずつファイルを持つことを起因とする (モジュール/プラグインに関しても) ミスの発生する可能性を劇的に減らせました。


* '''条件付きコードの使用は最小限にすべき''': データベースライブラリは潜在的なSQL文を99%受け入れるため、RDBMSで適切に動作するよう必要に応じてSQL文を構築および変換してください。データベースごとのカスタムコードを使用する場所は最小限にしてください。
* '''条件付きコードの使用は最小限にすべき''': データベースライブラリは潜在的なSQL文を99%受け入れるため、RDBMSで適切に動作するよう必要に応じてSQL文を構築および変換してください。データベースごとのカスタムコードを使用する場所は最小限にしてください。


* '''十分なドキュメント''': すべての定義済み関数はDMLおよびDDLレベルで十分にドキュメントを作成してください。ドキュメントにより開発者が様々な場面で正しい関数を探して使用できるようにします。
* '''十分なドキュメント''': すべての定義済み関数はDMLおよびDDLレベルで十分にドキュメントを作成してください。ドキュメントにより開発者が様々な場面で正しい関数を探して使えるようにします。
 
== スタック The Stack ==
 
次のスタックはMoodle 1.7のコードがどのように実装されているRDBMSと相互作用するのか表示します。これは私たちが試そうとしていることに対する理解を少しだけ手助けします。また、ロードマップ (以下のページ) の一部を説明します。
 
[[Image:MoodleDBStack.png|center]]


Moodleコードはデータベース操作を実行するため2つの「言語」を使用します:
== スタック ==


* '''XMLDB neutral description files''': To create, modify and delete database objects (DDL: create/alter/drop tables, fields, indexes, constraints...). It consists of a collection of validated, standard, XML files. They will be used to define all the DB objects. New for 1.7.
次のスタックはMoodle 1.7のコードが実装されているRDBMSとどのように相互作用するのか示します。これは私たちが試そうとしていることに対する理解を少しだけ手助けします。また、ロードマップ (以下のページ) の一部を説明します。
* '''XMLDB中間説明ファイル''': データベースオブジェクトを作成、修正および削除するため (DDL: テーブル、フィールド、インデックス、制約等の作成/変更/ドロップ)。これは有効な標準XMLファイルで構成されます。また、すべてのデータベースオブジェクトの定義に使用されます。Moodle 1.7の新機能です。
* '''Moodle SQL neutral statements''': To add, modify, delete and select database information (DML: insert/update/delete/select records). To modify for 1.7.
* '''Moodle SQL中間説明ファイル''': データベース情報を追加、修正削除および選択するため (DML: レコードの追加/更新/削除/選択)。Moodle 1.7で更新されます。To add, modify, delete and select database information (DML: insert/update/delete/select records). To modify for 1.7.


Please note the '''neutral''' keyword used in the expressions above. It means that both '''languages''' will be 100% the same, independent of the underlying RDBMS being used. And this must be particularly true for the XMLDB part.
Moodleコードはデータベース操作を実行するために2つの「言語」を使用します:


Obviously it's possible that in the SQL part we find some specialised queries (using complex joins, regular expressions...) that will force us to do some '''Exceptions'''. Well, they can exist (in fact, they exist), but we always must try to provide an alternate path to minimise them using neutral statements and standard libraries.
* '''XMLDB中間説明ファイル''': データベースオブジェクトを作成、修正および削除するため使用されます (DDL: テーブル、フィールド、インデックス、制約等の作成/変更/ドロップ)。これは有効な標準XMLファイルで構成されます。また、すべてのデータベースオブジェクトの定義に使用されます。Moodle 1.7の新機能です。
* '''Moodle SQL中間説明ファイル''': データベース情報を追加、修正削除および選択するため使用されます  (DML: レコードの追加/更新/削除/選択)。Moodle 1.7で更新されます。


Each one of the '''languages''' above will use its own library to do the work:
上で使用されているキーワード「中間」に留意してください。基本的なデータベース使用の独立性に関して両「言語」は100%同じ意味です。そして、特にXMLDBの部分に関して明確に同じ意味です。


* '''Moodle DDL Library''' ([[DDL functions|ddllib.php]]): Where all the functions needed to handle DB objects will exist. This library is new for 1.7 and will provide developers with a high level of abstraction. As input it will accept some well defined objects and actions and it will execute the proper commands for the RDBMS being used.
明らかにSQLの部分において私たちは何らかの「例外」を強制するための特別なクエリ (複雑なJOIN、正規表現等) を見つけることができます。確かに特別クエリは存在できますが (実際に存在しますが)、私たちは常に中間説明および標準ライブラリを使用して特別クエリを最小化するための代替パスを提供すべきです。
* '''Moodle DML Library''' ([[DML functions|dmllib.php]]): Where all the functions needed to handle DB contents will exist. This library is new for 1.7, although its contents are, basically, functions currently present in '''datalib.php''' (moved from there). All those DML functions will offer cross-db support for insert/update/delete/select statements using a common behaviour.


Also note that '''datalib.php''' is still present in the schema above. It will contain all the functions that haven't been moved to the new '''ddllib.php''' and '''dmllib.php''' libraries. Only some common functions will remain there, and these will disappear (it's considered a legacy library) in upcoming '''Moodle''' releases (after 1.7) by moving all those functions to their proper library (course/lib.php, user/lib.php....).
上の各「言語」は動作するため独自ライブラリを使用します:


Both of these libraries (plus the small '''Exceptions''' bar) will perform all their actions using the '''ADOdb Database Abstraction Library for PHP''' that will receive all the requests from them, communicate with the DB ('''MySQL''', '''PostgreSQL''', '''Oracle''' or '''SQL*Server'''), retrieve results and forward them back to originator library.
* '''Moodle DDLライブラリ''' ([[DDL functions|ddllib.php]]): DBオブジェクトの処理に必要な関数すべてを含みます。このライブラリはMoodle 1.7の新しい機能であり、開発者に高いレベルの抽象化が提供されます。ライブラリは入力として正しく定義されたオブジェクトおよび操作を受け入れます。また、RDBMSで使用される適切なコマンドを実行します。
* '''Moodle DMLライブラリ''' ([[DML functions|dmllib.php]]):DBコンテンツの処理に必要な関数すべてを含みます。現在、コンテンツは基本的に'''datalib.php''に存在する関数ですが、このライブラリはMoodle 1.7の新しい機能です ('''datalib.php'''から移動)。これらすべてのDML関数はデータベース間でのinsert/update/delete/selectの一般的な構文を使用した命令文を提供します。


== プロセス The process ==
'''datalib.php'''は上のスキーマに存在したままであることに留意してください。これには新しい'''ddllib.php'''および'''dmllib.php'''ライブラリに移行されていない関数すべてを含みます。そこにはいくつかの一般的な関数のみ残されます。そして、次の'''Moodle'''リリース (1.7以降) でこれらの関数すべては適切なライブラリ (course/lib.php, user/lib.php....) に移行された後に消滅します。


This section points to the main areas of information about the '''process of design and implementation''' of the new XMLDB layer:
これら両ライブラリ (および小さな'''例外'''バー) は'''PHPのADOdbデータベース抽出ライブラリ'''を使用してすべての操作を実行します。'''PHPのADOdbデータベース抽出ライブラリ'''はすべてのリクエストを受け付けてデータベース  ('''MySQL''', '''PostgreSQL''', '''Oracle''' または '''SQL*Server''') との連携および結果を検索した後、オリジナルのライブラリに戻します。


* [[XMLDB Roadmap|Roadmap]]: Where the whole process is defined. It has been split into small chunks to be performed and tested easily. Also, such documents should be used to track what's done and what's pending, while using easy nomenclature.
== 手順 ==


* [[XMLDB Problems|Problems]]: A comprehensive list of issues that need to be determined/solved prior to incorporating them into the [[XMLDB Roadmap|roadmap]].
このセクションでは新しいXMLDBレイヤの「設計および実装の手順」に関する情報の主要部分に焦点を当てます。


== ドキュメンテーション The documentation ==
* [[XMLDBロードマップ|ロードマップ]]: 全体の手順が定義されています。手順は小さな部分に分けられているため、簡単に実行およびテストできます。また、このようなドキュメントでは簡単な用語を使用しているため、何を完了して、何を完了していないか追跡するためにも使用できます。
* [[XMLDB問題|問題]]: [[XMLDBロードマップ|ロードマップ]]に取り込む前に決断または解決すべき問題の総合一覧です。


This section points to the '''main documentation index''' about the implemented XMLDB:
== ドキュメンテーション ==
このセクションでは実装済みXMLDBに関する「主ドキュメンテーションインデックス」に焦点を当てます:


* [[XMLDB Documentation|Documentation]]: Where you'll find quick links to different parts of the XMLDB documentation.
* [[XMLDBドキュメンテーション|ドキュメンテーション]]: XMLDBドキュメンテーションの異なる部分へのクイックリンク集です。


==関連情報==
==関連情報==
65行目: 57行目:
=== XMLDB関連===
=== XMLDB関連===


* [[XMLDB preliminary links|XMLDB preliminary links]] - A collection of links about general info, searched and analysed at the initial stages of the project
* [[XMLDB準備リンク|XMLDB準備リンク]] - プロジェクトの初期段階における一般情報、検索および分析に関するリンク集です。
* [[XMLDB preliminary notes|XMLDB preliminary notes]] - A collection of notes collected in the early stages of this project, pointing both to some changes required and some problems to solve.
* [[XMLDB準備ノート|XMLDB準備ノート]] - プロジェクトの初期段階における必要な修正および問題解決に関するノート集です。


=== データベース関連 ===
=== データベース関連 ===


* [[DDL functions|DDL functions]] - Documentation for all the Data Definition Language (DDL) functions available inside Moodle.
* [[DDL関数|DDL関数]] - Moodle内で利用可能なすべてのデータ定義言語 (Data Definition Language - DDL) のドキュメンテーションです。
* [[DML functions|DML functions]] - Documentation for all the Data Manipulation Language (DML) functions available inside Moodle.
* [[DML関数|DML関数]] - Moodle内で利用可能なすべてのデータ操作言語 (Data Manipulation Language - DML) のドキュメンテーションです。


[[Category:XMLDB]]
[[Category:XMLDB]]


[[en:Development:XMLDB_introduction]]
[[en:Development:XMLDB_introduction]]

2020年8月17日 (月) 11:37時点における版


Moodle 1.7における新しい主要な機能はMySQLおよびPostgreSQLですべてが正常に動作するよう管理されてきたのに対して、 さらにいつくかのRDBMS MSSQLおよびOracle) でも動作するようになったことです。Moodleコアは内部的にADOdbを使用していたため、この機能は当初より存在していました。現在のプロジェクトの成熟度 (5歳です!) を考えた場合、すべてを整理する良い機会だと思います。

当初、私たちのすべてのテストおよび事前作業は内部的にはADOdbがどのように動作するのか、SQLに方言を持つ4種類のRDBMSをどのように統合できるか、そして残りのMoodle内でどのように使用されるか調査するためのものでした。すべてのSQLは極めて類似していますが、私たちの現在のデータベースコード (以前は「datalib.php」) を変更せざるを得ない異なる部分および独自性がありました。

実施されるすべての変更の第一の目的はMoodleがさらなるRDBMSでも動作可能にすることにあります。また、その変更は以下の非機能的要求を満たす必要があります:

  • 1DB作成/アップグレードあたり1レイヤを提供する (DDL): これにより開発者は各RDBMSで使用される厳密な実装から独立した中立的な形で自分の構造を作成できます。
  • DBハンドリングに1レイヤ (既存) を提供する (DML): これにより開発者は中立的および独立した形で使用されるRDBMSの情報をリクエスト/保存できます。
  • 前のバージョンからの簡単な移行手順: 現在のインストレーション/アップグレードシステムは少なくともサードパーティの開発者が新しいシステムに移行可能なMoodle 2.0までは動作します。
  • 単純、便利、効果的: Moodleのアップグレード方法は最初から極めて洗練され素晴らしく動作していました。しかし、これは開発者にモジュールおよびプラグインに関して2つのインストールおよびアップグレードスクリプトのメンテナンスを強制するものでした。新しい代替手段ではインストールおよびアップグレードに1つずつファイルを持つことを起因とする (モジュール/プラグインに関しても) ミスの発生する可能性を劇的に減らせました。
  • 条件付きコードの使用は最小限にすべき: データベースライブラリは潜在的なSQL文を99%受け入れるため、RDBMSで適切に動作するよう必要に応じてSQL文を構築および変換してください。データベースごとのカスタムコードを使用する場所は最小限にしてください。
  • 十分なドキュメント: すべての定義済み関数はDMLおよびDDLレベルで十分にドキュメントを作成してください。ドキュメントにより開発者が様々な場面で正しい関数を探して使えるようにします。

スタック

次のスタックはMoodle 1.7のコードが実装されているRDBMSとどのように相互作用するのか示します。これは私たちが試そうとしていることに対する理解を少しだけ手助けします。また、ロードマップ (以下のページ) の一部を説明します。

Moodleコードはデータベース操作を実行するために2つの「言語」を使用します:

  • XMLDB中間説明ファイル: データベースオブジェクトを作成、修正および削除するため使用されます (DDL: テーブル、フィールド、インデックス、制約等の作成/変更/ドロップ)。これは有効な標準XMLファイルで構成されます。また、すべてのデータベースオブジェクトの定義に使用されます。Moodle 1.7の新機能です。
  • Moodle SQL中間説明ファイル: データベース情報を追加、修正削除および選択するため使用されます (DML: レコードの追加/更新/削除/選択)。Moodle 1.7で更新されます。

上で使用されているキーワード「中間」に留意してください。基本的なデータベース使用の独立性に関して両「言語」は100%同じ意味です。そして、特にXMLDBの部分に関して明確に同じ意味です。

明らかにSQLの部分において私たちは何らかの「例外」を強制するための特別なクエリ (複雑なJOIN、正規表現等) を見つけることができます。確かに特別クエリは存在できますが (実際に存在しますが)、私たちは常に中間説明および標準ライブラリを使用して特別クエリを最小化するための代替パスを提供すべきです。

上の各「言語」は動作するため独自ライブラリを使用します:

  • Moodle DDLライブラリ (ddllib.php): DBオブジェクトの処理に必要な関数すべてを含みます。このライブラリはMoodle 1.7の新しい機能であり、開発者に高いレベルの抽象化が提供されます。ライブラリは入力として正しく定義されたオブジェクトおよび操作を受け入れます。また、RDBMSで使用される適切なコマンドを実行します。
  • Moodle DMLライブラリ (dmllib.php):DBコンテンツの処理に必要な関数すべてを含みます。現在、コンテンツは基本的にdatalib.phpに存在する関数ですが、このライブラリはMoodle 1.7の新しい機能です ('datalib.phpから移動)。これらすべてのDML関数はデータベース間でのinsert/update/delete/selectの一般的な構文を使用した命令文を提供します。

datalib.phpは上のスキーマに存在したままであることに留意してください。これには新しいddllib.phpおよびdmllib.phpライブラリに移行されていない関数すべてを含みます。そこにはいくつかの一般的な関数のみ残されます。そして、次のMoodleリリース (1.7以降) でこれらの関数すべては適切なライブラリ (course/lib.php, user/lib.php....) に移行された後に消滅します。

これら両ライブラリ (および小さな例外バー) はPHPのADOdbデータベース抽出ライブラリを使用してすべての操作を実行します。PHPのADOdbデータベース抽出ライブラリはすべてのリクエストを受け付けてデータベース (MySQL, PostgreSQL, Oracle または SQL*Server) との連携および結果を検索した後、オリジナルのライブラリに戻します。

手順

このセクションでは新しいXMLDBレイヤの「設計および実装の手順」に関する情報の主要部分に焦点を当てます。

  • ロードマップ: 全体の手順が定義されています。手順は小さな部分に分けられているため、簡単に実行およびテストできます。また、このようなドキュメントでは簡単な用語を使用しているため、何を完了して、何を完了していないか追跡するためにも使用できます。
  • 問題: ロードマップに取り込む前に決断または解決すべき問題の総合一覧です。

ドキュメンテーション

このセクションでは実装済みXMLDBに関する「主ドキュメンテーションインデックス」に焦点を当てます:

関連情報

XMLDB関連

  • XMLDB準備リンク - プロジェクトの初期段階における一般情報、検索および分析に関するリンク集です。
  • XMLDB準備ノート - プロジェクトの初期段階における必要な修正および問題解決に関するノート集です。

データベース関連

  • DDL関数 - Moodle内で利用可能なすべてのデータ定義言語 (Data Definition Language - DDL) のドキュメンテーションです。
  • DML関数 - Moodle内で利用可能なすべてのデータ操作言語 (Data Manipulation Language - DML) のドキュメンテーションです。