# Data schema descriptor

## Schema description

The schema must be expressed as an XML file. This file should be located at a core addon module and be named plugin-ddl.xml.

This DDL file can contain descriptions for tables, indexes and foreign keys.

## Tables

A table is composed of a &lt;table&gt; entity containing one or more &lt;column&gt; entities:

<div id="bkmrk-attributes-for-%3Ctabl"><table class="confluenceTable"><tbody><tr><td class="confluenceTd" colspan="2">Attributes for &lt;table&gt; entity

</td></tr><tr><td class="confluenceTd">name

</td><td class="confluenceTd">Table name

</td></tr></tbody></table>

</div><div id="bkmrk-attributes-for-%3Ccolu"><table class="confluenceTable"><colgroup><col></col><col></col></colgroup><tbody><tr><td class="confluenceTd" colspan="2">Attributes for &lt;column&gt; entity

</td></tr><tr><td class="confluenceTd">name

</td><td class="confluenceTd">Column name

</td></tr><tr><td class="confluenceTd">type

</td><td class="confluenceTd">It can have one of the following values, as stated at java.sql.Types class:

INTEGER

LONG

BOOLEAN / BIT

FLOAT

DOUBLE

VARCHAR

CHAR

DATE

CLOB

BLOB

</td></tr><tr><td class="confluenceTd">length

</td><td class="confluenceTd">Optional column size.

</td></tr><tr><td class="confluenceTd">notNull

</td><td class="confluenceTd">**true** if it cannot contain null values

</td></tr><tr><td class="confluenceTd">primaryKey

</td><td class="confluenceTd">**true** if it's part of the primary key.

The primary key will be composed of all attributes marked as primary key. The order of them will be the same as their appear order at XML fi

</td></tr></tbody></table>

</div>## Foreign keys

A foreign key is declared using the &lt;foreignKey&gt; entity. It will contain one or more &lt;column&gt; entities. Each columns identifies a member of the foreign key. It will also contain one or more &lt;foreignColumn&gt; entities. Each foreignColumn entity specifies the name of the corresponding column at the foreign table.

<div id="bkmrk-attributes-for-entit"><table class="confluenceTable"><tbody><tr><td class="confluenceTd" colspan="2">Attributes for entity &lt;foreignKey&gt;

</td></tr><tr><td class="confluenceTd">name

</td><td class="confluenceTd">Foreign key name

</td></tr><tr><td class="confluenceTd">tableName

</td><td class="confluenceTd">Table name

</td></tr><tr><td class="confluenceTd">foreignTableName

</td><td class="confluenceTd">Name of master table

</td></tr></tbody></table>

</div><div id="bkmrk-attributes-for-%3Ccolu-0"><table class="confluenceTable"><colgroup><col></col><col></col></colgroup><tbody><tr><td class="confluenceTd" colspan="2">Attributes for &lt;column&gt; entity

</td></tr><tr><td class="confluenceTd">name

</td><td class="confluenceTd">Column containing the foreign key

</td></tr></tbody></table>

</div><div id="bkmrk-attributes-for-%3Cfore"><table class="confluenceTable"><colgroup><col></col><col></col></colgroup><tbody><tr><td class="confluenceTd" colspan="2">Attributes for &lt;foreignColumn&gt; entity

</td></tr><tr><td class="confluenceTd">name

</td><td class="confluenceTd">Column containing the foreign key

</td></tr></tbody></table>

</div>## Indexes

An index is declared using the &lt;index&gt; entity. It will contain one or more &lt;column&gt; entities. Each column identifies a member of the index.

<div id="bkmrk-attributes-for-%3Cinde"><table class="confluenceTable"><colgroup><col></col><col></col></colgroup><tbody><tr><td class="confluenceTd" colspan="2">Attributes for &lt;index&gt; entity

</td></tr><tr><td class="confluenceTd">name

</td><td class="confluenceTd">Index name

</td></tr><tr><td class="confluenceTd">tableName

</td><td class="confluenceTd">Table name

</td></tr><tr><td class="confluenceTd" colspan="1">unique</td><td class="confluenceTd" colspan="1">**true** if no duplicated keys will be allowed</td></tr></tbody></table>

</div><div id="bkmrk-attributes-for-entit-0"><table class="confluenceTable"><colgroup><col></col><col></col></colgroup><tbody><tr><td class="confluenceTd" colspan="2">Attributes for entity &lt;column&gt;

</td></tr><tr><td class="confluenceTd">name

</td><td class="confluenceTd">Column to be indexed

</td></tr></tbody></table>

---

</div>## Sample plugin-ddl.xml

```XML
<?xml version="1.0" encoding="UTF-8"?>
<database>
    <table name="t1">
        <column name="id" type="LONG" notNull="true"
            autoIncrement="true" primaryKey="true"/>
        <column name="vc" type="VARCHAR" length="55"/>
        <column name="t1date" type="DATETIME" notNull="true"/>
        <column name="userid" type="LONG" />
    </table>
    <index name="i1" table="t1">
        <column name="vc"/>
    </index>
     
    <table name="t2">
        <column name="id" type="LONG" primaryKey="true"/>
    </table>
    <foreignKey name="t1_fk" table="t1" foreignTable="t2">
        <column name="userid"/>
        <foreignColumn name="id"/>
    </foreignKey>
</database>

```