Databasmappning database-mapping
SQL-mappningen för exempelschemat som beskrivs på den här sidan genererar följande 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 email 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>
Schemats rotelement har ändrats till <srcschema>
till <schema>
.
Den andra typen av dokument genereras automatiskt från källschemat och kallas helt enkelt för schema.
SQL-namnen bestäms automatiskt utifrån elementnamn och typ.
Namnreglerna för SQL är följande:
-
table: sammanfogning av schemanamnrymden och namnet
I vårt exempel anges namnet på tabellen via huvudelementet i schemat i attributet sqltable:
code language-sql <element name="recipient" sqltable="CusRecipient">
-
field: namnet på elementet föregås av ett prefix som definierats enligt typen: 'i' för heltal, 'd' för double, 's' för sträng, 'ts' för datum, osv.
Fältnamnet anges via attributet sqlname för varje typ
<attribute>
och<element>
:code language-sql <attribute desc="Email address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/>
SQL-skriptet som skapar tabellen som genereras från det utökade schemat är följande:
CREATE TABLE CusRecipient(
iGender NUMERIC(3) NOT NULL Default 0,
sCity VARCHAR(50),
sEmail VARCHAR(80),
tsCreated TIMESTAMP Default NULL);
SQL-fältbegränsningarna är följande:
- inga null-värden i numeriska fält och datumfält
- numeriska fält initieras till 0
XML-fält xml-fields
Som standard mappas alla element av typen <attribute>
och <element>
till ett SQL-fält i databchematabellen. Du kan emellertid referera till det här fältet i XML i stället för SQL, vilket betyder att data lagras i ett PM-fält ("mData") i tabellen som innehåller värdena för alla XML-fält. Lagringen av dessa data är ett XML-dokument som observerar schemastrukturen.
Om du vill fylla i ett fält i XML måste du lägga till attributet xml med värdet "true" till det aktuella elementet.
Exempel: Här är två exempel på hur XML-fält används.
-
Flerradskommentarfält:
code language-sql <element name="comment" xml="true" type="memo" label="Comment"/>
-
Databeskrivning i HTML-format:
code language-sql <element name="description" xml="true" type="html" label="Description"/>
Med typen html kan du lagra HTML-innehåll i en CDATA-tagg och visa en speciell HTML edit check i Adobe Campaign klientgränssnitt.
Använd XML-fält för att lägga till nya fält utan att ändra databasens fysiska struktur. En annan fördel är att du använder mindre resurser (storlek som tilldelas SQL-fält, gräns för antalet fält per tabell osv.). Observera dock att du inte kan indexera eller filtrera ett XML-fält.
Indexerade fält indexed-fields
Med index kan du optimera prestanda för de SQL-frågor som används i programmet.
Ett index deklareras från huvudelementet i dataschemat.
<dbindex name="name_of_index" unique="true/false">
<keyfield xpath="xpath_of_field1"/>
<keyfield xpath="xpath_of_field2"/>
...
</key>
Indexen följer följande regler:
- Ett index kan referera till ett eller flera fält i tabellen
- Ett index kan vara unikt (för att undvika dubbletter) i alla fält om attributet unique innehåller värdet "true"
- Indexets SQL-namn bestäms av tabellens SQL-namn och indexets namn
-
Som standard är index de första elementen som deklareras från schemats huvudelement.
-
Index skapas automatiskt vid tabellmappning (standard eller FDA).
Exempel:
-
Lägga till ett index till e-postadressen och staden:
code language-sql <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="Email address of recipient"/> <element name="location" label="Location"> <attribute name="city" type="string" length="50" label="City" userEnum="city"/> </element> </element> </srcSchema>
-
Lägga till ett unikt index i namnfältet"id":
code language-sql <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="Email address of recipient"/> </element> </srcSchema>
Läs mer
Klicka på följande länkar om du vill veta mer: