Show Menu
THEMEN×

Datenbank-Mapping

Die SQL-Zuordnung unseres Beispiels Schema enthält das folgende XML-Dokument:
<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
  <enumeration basetype="byte" name="gender">    
    <value label="Not specified" name="unknown" value="0"/>    
    <value label="Male" name="male" value="1"/>    
    <value label="Female" name="female" value="2"/> 
  </enumeration>  

  <element name="recipient" sqltable="CusRecipient">    
    <attribute desc="Recipient e-mail address" label="Email" length="80" name="email" sqlname="sEmail" type="string"/>    
    <attribute default="GetDate()" label="Date of creation" name="created" sqlname="tsCreated" type="datetime"/>    
    <attribute enum="gender" label="Gender" name="gender" sqlname="iGender" type="byte"/>    
    <element label="Location" name="location">      
      <attribute label="City" length="50" name="city" sqlname="sCity" type="string" userEnum="city"/>    
    </element>  
  </element>
</schema>

Beschreibung

Das Stammelement des Schemas ist nicht mehr <srcschema> sondern <schema> .
Dies führt uns zu einem anderen Dokument, das automatisch aus dem Quellcode-Schema generiert wird, das einfach als Schema bezeichnet wird. Dieses Schema wird von der Adobe Campaign-Anwendung verwendet.
Die SQL-Namen werden automatisch anhand des Elementnamens und des Elementtyps bestimmt.
Die SQL-Benennungsregeln lauten wie folgt:
  • Tabelle: Verkettung des Schema-Namensraums und -Namens
    In unserem Beispiel wird der Tabellenname über das Hauptelement des Schemas im Attribut " sqltable "eingegeben:
    <element name="recipient" sqltable="CusRecipient">
    
    
  • Feld: Name des Elements, dem ein Präfix vorangestellt wird, der nach Typ ('i' für Ganzzahl, 'd' für Dublette, 's' für Zeichenfolge, 'ts' für Datumsangaben usw.) definiert ist
    Der Feldname wird über das Attribut sqlname für jede Eingabe <attribute> und <element> :
    <attribute desc="E-mail address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/> 
    
    
SQL-Namen können aus dem Quellcode-Schema überladen werden. Füllen Sie dazu die Attribute "sqltable"oder "sqlname"für das betreffende Element aus.
Das SQL-Skript zum Erstellen der aus dem erweiterten Schema generierten Tabelle lautet wie folgt:
CREATE TABLE CusRecipient(
  iGender NUMERIC(3) NOT NULL Default 0,   
  sCity VARCHAR(50),   
  sEmail VARCHAR(80),
  tsCreated TIMESTAMP Default NULL);

Die SQL-Feldbeschränkungen lauten wie folgt:
  • keine Nullwerte in numerischen und Datumsfeldern,
  • Numerische Felder werden auf 0 initialisiert.

XML-Felder

Standardmäßig werden alle typisierten <attribute> und <element> eingegebenen Elemente einem SQL-Feld der Datentabelle zugeordnet. Sie können dieses Feld jedoch in XML anstatt in SQL referenzieren. Das bedeutet, dass die Daten in einem Memofeld ("mData") der Tabelle gespeichert werden, das die Werte aller XML-Felder enthält. Die Datenspeicherung dieser Daten ist ein XML-Dokument, das die Schema-Struktur einhält.
Um ein Feld in XML auszufüllen, müssen Sie dem betreffenden Element das XML -Attribut mit dem Wert "true"hinzufügen.
Beispiel : Es gibt zwei Beispiele für die Verwendung von XML-Feldern.
  • Mehrzeiliges Kommentarfeld:
    <element name="comment" xml="true" type="memo" label="Comment"/>
    
    
  • Beschreibung der Daten im HTML-Format:
    <element name="description" xml="true" type="html" label="Description"/>
    
    
    Mit dem "html"-Typ können Sie HTML-Inhalte in einem CDATA-Tag speichern und eine spezielle HTML-Bearbeitungsprüfung in der Adobe Campaign-Client-Oberfläche anzeigen.
Mithilfe von XML-Feldern können Sie Felder hinzufügen, ohne die physische Struktur der Datenbank ändern zu müssen. Ein weiterer Vorteil besteht darin, dass Sie weniger Ressourcen verwenden (Größe den SQL-Feldern zugeordnet, Anzahl der Felder pro Tabelle usw.).
Der Hauptnachteil ist, dass es unmöglich ist, ein XML-Feld zu indizieren oder zu filtern.

Indexierte Felder

Mithilfe von Indizes können Sie die Leistung der in der Anwendung verwendeten SQL-Abfragen optimieren.
Ein Index wird aus dem Hauptelement des data-Schemas deklariert.
<dbindex name="name_of_index" unique="true/false">
  <keyfield xpath="xpath_of_field1"/>
  <keyfield xpath="xpath_of_field2"/>
  ...
</key>

Indizes folgen den folgenden Regeln:
  • Ein Index kann auf ein oder mehrere Felder in der Tabelle verweisen.
  • Ein Index kann in allen Feldern eindeutig sein (um Duplikat zu vermeiden), wenn das Attribut unique den Wert "true"enthält.
  • Der SQL-Name des Indexes wird anhand des SQL-Namens der Tabelle und des Indexnamens bestimmt.
Standardmäßig sind Indizes die ersten Elemente, die aus dem Hauptelement des Schemas deklariert wurden.
Indizes werden während der Tabellenzuordnung (Standard oder FDA) automatisch erstellt.
Beispiel :
  • Hinzufügen eines Index zur E-Mail-Adresse und zum Ort:
    <srcSchema name="recipient" namespace="cus">
      <element name="recipient">
        <dbindex name="email">
          <keyfield xpath="@email"/> 
          <keyfield xpath="location/@city"/> 
        </dbindex>
    
        <attribute name="email" type="string" length="80" label="Email" desc="E-mail address of recipient"/>
        <element name="location" label="Location">
          <attribute name="city" type="string" length="50" label="City" userEnum="city"/>
        </element>
      </element>
    </srcSchema>
    
    
  • Hinzufügen eines eindeutigen Indexes zum Feld "id"-Name:
    <srcSchema name="recipient" namespace="cus">
      <element name="recipient">
        <dbindex name="id" unique="true">
          <keyfield xpath="@id"/> 
        </dbindex>
    
        <dbindex name="email">
          <keyfield xpath="@email"/> 
        </dbindex>
    
        <attribute name="id" type="long" label="Identifier"/>
        <attribute name="email" type="string" length="80" label="Email" desc="E-mail address of recipient"/>
      </element>
    </srcSchema>
    
    

Verwaltung von Schlüsseln

Eine Tabelle muss über mindestens einen Schlüssel zur Identifizierung eines Datensatzes in der Tabelle verfügen.
Ein Schlüssel wird aus dem Hauptelement des data-Schemas deklariert.
<key name="name_of_key">
  <keyfield xpath="xpath_of_field1"/>
  <keyfield xpath="xpath_of_field2"/>
  ...
</key>

Schlüssel beachten die folgenden Regeln:
  • Ein Schlüssel kann auf ein oder mehrere Felder in der Tabelle verweisen.
  • Ein Schlüssel wird als "primär"(oder "Priorität") bezeichnet, wenn er der erste im auszufüllenden Schema ist oder wenn er das interne Attribut mit dem Wert "true"enthält.
  • Für jede Schlüsseldefinition wird implizit ein eindeutiger Index deklariert. Die Erstellung eines Indexes auf dem Schlüssel kann verhindert werden, indem das Attribut noDbIndex mit dem Wert "true"hinzugefügt wird.
Standardmäßig sind Schlüssel die Elemente, die aus dem Hauptelement des Schemas deklariert wurden, nachdem Indizes definiert wurden.
Tasten werden während der Tabellenzuordnung (Standard oder FDA) erstellt, Adobe Campaign findet eindeutige Indizes.
Beispiel :
  • Hinzufügen eines Schlüssels zur E-Mail-Adresse und zum Ort:
    <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="E-mail address of recipient"/>
        <element name="location" label="Location">
          <attribute name="city" type="string" length="50" label="City" userEnum="city"/>
        </element>
      </element>
    </srcSchema>
    
    
    Das generierte Schema:
    <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="E-mail 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>
    
    
  • Hinzufügen eines primären oder internen Schlüssels zum Namensfeld "id":
    <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="E-mail address of recipient"/>
      </element>
    </srcSchema>
    
    
    Das generierte Schema:
    <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="E-mail address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/>  
      </element>
    </schema>
    
    

Auto-Inkrementalschlüssel

Der Hauptschlüssel der meisten Adobe Campaign-Tabellen ist eine 32-Bit-Ganzzahl, die automatisch von der Datenbank-Engine generiert wird. Die Berechnung des Schlüsselwerts hängt von einer Sequenz ab (standardmäßig die SQL-Funktion XtkNewId ), die eine eindeutige Zahl in der gesamten Datenbank generiert. Der Inhalt des Schlüssels wird beim Einfügen des Datensatzes automatisch eingegeben.
Der Vorteil eines inkrementellen Schlüssels besteht darin, dass er einen nicht-modifizierbaren technischen Schlüssel für die Verbindungen zwischen Tabellen bereitstellt. Darüber hinaus belegt dieser Schlüssel nicht viel Arbeitsspeicher, da er eine Dublette-Byte-Ganzzahl verwendet.
Sie können im Quellattribut den Namen der Sequenz angeben, die mit dem pkSequence -Attribut verwendet werden soll. Wenn dieses Attribut nicht im source-Schema angegeben ist, wird die XtkNewId -Standardsequenz verwendet. Die Anwendung verwendet dedizierte Sequenzen für die nms:wideLog - und nms:trackingLog -Schema ( NmsBroadLogId bzw. NmsTrackingLogId ), da diese Tabellen die meisten Datensätze enthalten.
Ab ACC 18.10 ist XtkNewId nicht mehr der Standardwert für die Sequenz in den vordefinierten Schemas. Sie können jetzt Schema erstellen oder bestehende Schemas mit einer eigenen Sequenz erweitern.
Beim Anlegen eines neuen Schemas oder bei einer Schema-Erweiterung müssen Sie für das gesamte Schema den gleichen Wert für die Primärschlüsselfolge (@pkSequence) beibehalten.
Eine Sequenz, auf die in einem Adobe Campaign-Schema verwiesen wird (z. B. NmsTrackingLogId ), muss mit einer SQL-Funktion verknüpft sein, die die Anzahl der IDs in den Parametern zurückgibt (durch Kommas getrennt). Diese Funktion muss GetNewXXXIds heißen, wobei XXX der Name der Sequenz ist (z. B. GetNewNmsTrackingLogIds ). Ansicht der Dateien "postgres-nms.sql ", " mssql-nms.sql "oder " oracle-nms.sql ", die mit der Anwendung im Ordner " datakit/nms/eng/sql/ "bereitgestellt werden, um das Beispiel einer "NmsTrackingLogId"-Sequenzerstellung für jede Datenbank-Engine wiederherzustellen.
Um einen eindeutigen Schlüssel zu deklarieren, füllen Sie das autopk -Attribut (mit dem Wert "true") im Hauptelement des data-Schemas aus.
Beispiel :
Deklarieren eines inkrementellen Schlüssels im Quell-Schema:
<srcSchema name="recipient" namespace="cus">
  <element name="recipient" autopk="true">
  ...
  </element>
</srcSchema>

Das generierte Schema:
<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>

Zusätzlich zur Definition des Schlüssels und seines Indexes wurde dem erweiterten Schema ein numerisches Feld namens "id"hinzugefügt, um den automatisch generierten Primärschlüssel zu enthalten.
Ein Datensatz mit einem Primärschlüssel auf 0 wird bei der Tabellenerstellung automatisch eingefügt. Dieser Datensatz wird verwendet, um äußere Verbindungen zu vermeiden, die bei Volumentabellen nicht wirksam sind. Standardmäßig werden alle Fremdschlüssel mit dem Wert 0 initialisiert, sodass ein Ergebnis immer bei der Verknüpfung zurückgegeben werden kann, wenn das Datenelement nicht gefüllt wird.