スキーマでのキー管理 management-of-keys
データスキーマに関連付けられた各テーブルには、テーブル内のレコードを識別するためのキーが少なくとも 1 つ必要です。
キーがデータスキーマのメイン要素から宣言されます。
<key name="name_of_key">
<keyfield xpath="xpath_of_field1"/>
<keyfield xpath="xpath_of_field2"/>
...
</key>
キーがスキーマ内で最初に入力される場合や、「true」に設定された internal 属性を含む場合、そのキーは「プライマリキー」と呼ばれます。
キーには、次のルールが適用されます。
- キーは、テーブルの1つ以上のフィールドを参照できます
- 各キー定義に対して、一意のインデックスが暗黙的に宣言されます。 キーにインデックスを作成しないようにするには、
noDbIndex属性を「true」に設定します。
-
標準として、キーは、インデックスが定義された後にスキーマのメイン要素から宣言された要素です。
-
キーはテーブルマッピング(標準またはFDA)中に作成され、Adobe Campaignは一意のインデックスを見つけます。
例:
-
電子メールアドレスと都市にキーを追加する:
code language-sql <srcSchema name="recipient" namespace="cus"> <element name="recipient"> <key name="email"> <keyfield xpath="@email"/> <keyfield xpath="location/@city"/> </key> <attribute name="email" type="string" length="80" label="Email" desc="Email address of recipient"/> <element name="location" label="Location"> <attribute name="city" type="string" length="50" label="City" userEnum="city"/> </element> </element> </srcSchema>生成されたスキーマ:
code language-sql <schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema"> <element name="recipient" sqltable="CusRecipient"> <dbindex name="email" unique="true"> <keyfield xpath="@email"/> <keyfield xpath="location/@city"/> </dbindex> <key name="email"> <keyfield xpath="@email"/> <keyfield xpath="location/@city"/> </key> <attribute desc="Email address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/> <element label="Location" name="location"> <attribute label="City" length="50" name="city" sqlname="sCity" type="string" userEnum="city"/> </element> </element> </schema> -
「id」名フィールドへのプライマリキーまたは内部キーの追加:
code language-sql <srcSchema name="recipient" namespace="cus"> <element name="recipient"> <key name="id" internal="true"> <keyfield xpath="@id"/> </key> <key name="email" noDbIndex="true"> <keyfield xpath="@email"/> </key> <attribute name="id" type="long" label="Identifier"/> <attribute name="email" type="string" length="80" label="Email" desc="Email address of recipient"/> </element> </srcSchema>生成されたスキーマ:
code language-sql <schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema"> <element name="recipient" sqltable="CusRecipient"> <key name="email"> <keyfield xpath="@email"/> </key> <dbindex name="id" unique="true"> <keyfield xpath="@id"/> </dbindex> <key internal="true" name="id"> <keyfield xpath="@id"/> </key> <attribute label="Identifier" name="id" sqlname="iRecipientId" type="long"/> <attribute desc="Email address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/> </element> </schema>
自動インクリメンタルキー auto-incremental-key
ほとんどのAdobe Campaign テーブルの主キーは、データベースエンジンによって自動生成される32 ビットの長い整数です。 キー値の計算は、データベース全体で一意の数値を生成するシーケンス(デフォルトではXtkNewId SQL関数)によって異なります。 キーの内容は、レコードの挿入時に自動的に入力されます。
増分キーの利点は、テーブル間の結合に変更不可能なテクニカルキーを提供できることです。 さらに、このキーは2 バイトの整数を使用するため、メモリをあまり消費しません。
ソーススキーマで、pkSequence属性で使用するシーケンスの名前を指定できます。 この属性がソーススキーマで指定されていない場合、XtkNewIdのデフォルトシーケンスが使用されます。 このアプリケーションは、最も多くのレコードを含むテーブルであるため、nms:broadLogおよびnms:trackingLog スキーマ (NmsBroadLogIdおよびNmsTrackingLogId)に専用シーケンスを使用します。
ACC 18.10以降、XtkNewIdは、標準スキーマのシーケンスのデフォルト値ではなくなりました。 専用のシーケンスを使用して、スキーマを構築したり、既存のスキーマを拡張したりできるようになりました。
Adobe Campaign スキーマで参照されているシーケンス(NmsTrackingLogIdなど)は、パラメーター内のIDの数をコンマで区切って返すSQL関数に関連付ける必要があります。 この関数はGetNew XXX Idsと呼ぶ必要があります。ここで、XXXはシーケンスの名前です(GetNewNmsTrackingLogIds例)。 datakit/nms/eng/sql/ ディレクトリのアプリケーションに付属しているpostgres-nms.sql、mssql-nms.sqlまたはoracle-nms.sql ファイルを表示して、各データベースエンジンの「NmsTrackingLogId」シーケンス作成例を復元します。
一意のキーを宣言するには、データスキーマのメイン要素に autopk 属性(値「true」)を入力します。
例:
ソーススキーマでの増分キーの宣言:
<srcSchema name="recipient" namespace="cus">
<element name="recipient" autopk="true">
...
</element>
</srcSchema>
生成されたスキーマ:
<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
<element name="recipient" autopk="true" pkSequence="XtkNewId" sqltable="CusRecipient">
<dbindex name="id" unique="true">
<keyfield xpath="@id"/>
</dbindex>
<key internal="true" name="id">
<keyfield xpath="@id"/>
</key>
<attribute desc="Internal primary key" label="Primary key" name="id" sqlname="iRecipientId" type="long"/>
</element>
</schema>
キーとそのインデックスの定義に加えて、自動生成されたプライマリキーを格納するために、「id」という数値フィールドが拡張スキーマに追加されました。
詳細情報
詳細については、次のリンクを参照してください。