データベーススキーマ
schema.xmlのためのスキーマは要求されるオプション属性を持つ要素をいくつか含みます。Propekジェネレータはschema.xmlドキュメントを検証するために使用されるDTD (source:trunk/generator/dtd/database.dtd) を含みます。また、SQLとOMをビルドするとき、Propelジェネレータは新しく、非常に詳細なXSD (source:trunk/generator/resources/xsd/database.xsd) を使用してあなたのschema.xmlファイルを自動的に検証します
一覧
要素の階層ツリー関係は次の通りです:
<database>
<external-schema />
<table>
<column>
<inheritance />
</column>
<foreign-key>
<reference />
</foreign-key>
<index>
<index-column />
</index>
<unique>
<unique-column />
</unique>
<id-method-parameter/>
</table>
</database>
詳細なリファレンス
このページはアッペンディクスBの代替的なレンダリング - ユーザガイドからのスキーマリファレンスです。 特定の詳細内容、それぞれの属性もしくは要素が所属している場所について詳しく説明しています。
最初にいくつかの仕様です:
- /で囲まれたテキストはあなたが提供をして言語で定義されていないテキストです。(すなわち、テーブル名はこの良い例です。)
- オプションの項目は[ と ]文字で囲まれます。
- 代替的な選択を持つ項目はそれらの間に|文字を持ちます(すなわちtrue|false)
- どこかで上書きされていないのであれば、これがデフォルトのオプションであることを示すために代替的な選択肢が{ と }で区切られることがあります。
- ... は以前の項目を繰り返すことを意味します。
<database>要素
<database>要素で始めます。利用できる属性と要素は以下の通りです:
<database
name="/DatabaseName/"
defaultIdMethod="native|none"
[package="/ProjectName/"]
[baseClass="/baseClassName/"]
[basePeer="/baseClassPeerName/"]
[defaultPhpNamingMethod="nochange|underscore|phpname"
[heavyIndexing="true|false"]
>
<external-schema>
<table>
...
</database>
package、baseClass、basePeer、defaultPhpNamingMethodとheavyIndexing属性は一般的にオプションです。 <database>要素は一つの<external-schema>要素、もしくは複数の<table>要素を含んでいることがあります。
<external-schema>要素
<external-schema>要素はとてもシンプルです。ファイルシステム上のどこかからかスキーマファイルをインクルードするだけです。形式は次の通りです:
<external-schema filename="/a path to a file/" />
<table> 要素
<table>要素は使う要素の中でもっとも複雑です。定義は次の通りです:
<table
name = "/TableName/"
[idMethod = "native|{none}"]
[phpName = "/PhpObjectName/"]
[skipSql = "true|false"]
[abstract = "true|false"]
[phpNamingMethod = "nochange|{underscore}|phpname"]
[baseClass = "/baseClassName/"]
[basePeer = "/baseClassPeerName/"]
[description="/A text description of the table/"]
[heavyIndexing = "true|false"]
[readOnly = "true|false"]
>
<column>
...
<foreign-key>
...
<index>
...
<unique>
...
<id-method-parameter>
...
</table>
スキーマによれば、nameは要求される属性のみです。また、idMethod、phpNamingMethod、baseClass、basePeer、とheavyIndexing属性すべては<database>要素で指定されたものへのデフォルトです。
<column> 要素
<column
name = "/ColumnName/"
[phpName = "/PHPColumnName/"]
[peerName = "/PEERNAME/"]
[primaryKey = "true|{false}"]
[required = "true|{false}"]
[type = "BOOLEAN|TINYINT|SMALLINT|INTEGER|BIGINT|DOUBLE|FLOAT|REAL|DECIMAL|CHAR|{VARCHAR}|LONGVARCHAR|DATE|TIME|TIMESTAMP|BLOB|CLOB"]
[size = "/NumericLengthOfColumn/"]
[scale = "/DigitsAfterDecimalPlace/"]
[default = "/AnyDefaultValueMatchingType/"]
[autoIncrement = "true|{false}"]
[description = "/Column Description/"]
[phpNamingMethod = "nochange|underscore|phpname"]
[inheritance = "single|{false}"]
[inputValidator = "NameOfInputValidatorClass"]
>
[<inheritance key="/KeyName/" class="/ClassName/" [extends="/BaseClassName/"] />]
</column>
<foreign-key> 要素
他のテーブルへのカラムをリンクするために次の構文を使用します:
<foreign-key
foreignTable = "/TheOtherTableName/"
[name = "/Name for this foreign key/"]
[onDelete = "cascade|setnull|{restrict}"]
>
<reference local="/LocalColumnName/" foreign="/ForeignColumnName/" />
</foreign-key>
<index> 要素
一つかそれ以上のカラム上でインデックスを作成するために、次の構文を使用します:
<index>
<index-column name="/ColumnName/" [size="/LengthOfIndexColumn/"] />
...
</index>
いくつかの場合によってRDBMSはインデックスサイズを要求することがあります。
<unique> 要素
一つもしくは複数のカラム上でユニークインデックスを作成するために、次の構文を使用します:
<unique>
<unique-column name="/ColumnName/" [size="/LengthOfIndexColumn/"] />
...
</unique>
いくつかの場合においてRDBMSがユニークインデックスのためにインデックスサイズを指定することを要求することがあります。
<id-method-parameter> 要素
オートインクリメントカラムのためにシーケンスを使用するデータベースを使用している場合(例えばPostgreSQLもしくはOracle)、<id-method-paramter/>タグを使用してシーケンスの名前をカスタマイズすることが出来ます:
<id-method-parameter value="my_custom_sequence_name"/>
