La asignación SQL del esquema de ejemplo proporciona el siguiente documento XML:
<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>
El elemento raíz del esquema ya no es <srcschema>
, pero <schema>
.
Esto nos lleva a otro tipo de documento, que se genera automáticamente a partir del esquema de origen, simplemente denominado esquema. La aplicación Adobe Campaign utilizará este esquema.
Los nombres SQL se determinan automáticamente en función del nombre y el tipo del elemento.
Las reglas de nomenclatura SQL son las siguientes:
tabla: concatenación del área de nombres y el nombre del esquema.
En este ejemplo, el nombre de la tabla se introduce mediante el elemento principal del esquema en sqltable atributo:
<element name="recipient" sqltable="CusRecipient">
field: nombre del elemento precedido por un prefijo definido según el tipo ("i" para entero, "d" para doble, "s" para cadena, "ts" para fechas, etc.)
El nombre del campo se introduce mediante la variable sqlname para cada uno de los <attribute>
y <element>
:
<attribute desc="E-mail address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/>
Los nombres SQL se pueden sobrecargar desde el esquema de origen. Para ello, rellene los atributos "sqltable" o "sqlname" en el elemento correspondiente.
La secuencia de comandos SQL para crear la tabla generada a partir del esquema ampliado es la siguiente:
CREATE TABLE CusRecipient(
iGender NUMERIC(3) NOT NULL Default 0,
sCity VARCHAR(50),
sEmail VARCHAR(80),
tsCreated TIMESTAMP Default NULL);
Las restricciones de campo SQL son las siguientes:
De forma predeterminada, cualquier <attribute>
y <element>
se asigna a un campo SQL de la tabla de esquema de datos. Sin embargo, puede hacer referencia a este campo en XML en lugar de en SQL, lo que significa que los datos se almacenan en un campo memo ("mData") de la tabla que contiene los valores de todos los campos XML. El almacenamiento de estos datos es un documento XML que observa la estructura del esquema.
Para rellenar un campo en XML, debe añadir la variable xml con el valor "true" al elemento correspondiente.
Ejemplo: estos son dos ejemplos de uso de campos XML.
Campo de comentarios multilínea:
<element name="comment" xml="true" type="memo" label="Comment"/>
Descripción de los datos en formato HTML:
<element name="description" xml="true" type="html" label="Description"/>
El tipo "html" permite almacenar el contenido del HTML en una etiqueta CDATA y mostrar una comprobación especial de edición del HTML en la interfaz de cliente de Adobe Campaign.
El uso de campos XML permite añadir campos sin necesidad de modificar la estructura física de la base de datos. Otra ventaja es que utiliza menos recursos (tamaño asignado a campos SQL, límite en el número de campos por tabla, etc.).
Una tabla debe tener al menos una clave para identificar un registro de la tabla.
Se declara una clave a partir del elemento principal del esquema de datos.
<key name="name_of_key">
<keyfield xpath="xpath_of_field1"/>
<keyfield xpath="xpath_of_field2"/>
...
</key>
Las claves obedecen las siguientes reglas:
Ejemplo:
Añadir una clave a la dirección de correo electrónico y a la ciudad:
<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>
El esquema generado:
<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
<element name="recipient" sqltable="CusRecipient">
<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>
Adición de una clave principal o interna al campo de nombre "id":
<srcSchema name="recipient" namespace="cus">
<element name="recipient">
<key name="id" internal="true">
<keyfield xpath="@id"/>
</key>
<key name="email">
<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>
El esquema generado:
<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
<element name="recipient" sqltable="CusRecipient">
<key name="email">
<keyfield xpath="@email"/>
</key>
<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>
En el contexto de un Implementación empresarial (FDAC), la clave principal de las tablas de Adobe Campaign es una ID único universal (UUID) generado automáticamente por el motor de base de datos. El valor clave es único en toda la base de datos. El contenido de la clave se genera automáticamente al insertar el registro.
Por ejemplo
Declarar una clave incremental en el esquema de origen:
<srcSchema name="recipient" namespace="cus">
<element name="recipient" autopk="true" autouuid="true">
...
</element>
</srcSchema>
El esquema generado:
<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
<element name="recipient" autopk="true" autouuid="true" sqltable="CusRecipient">
<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>
Además de la definición de la clave, se ha añadido un campo numérico llamado "id" al esquema ampliado para contener la clave principal generada automáticamente.
Al crear la tabla, se inserta automáticamente un registro con una clave principal establecida en 0. Este registro se utiliza para evitar las uniones externas, que no son efectivas en las tablas de volumen. De forma predeterminada, todas las claves externas se inicializan con el valor 0, de modo que siempre se pueda devolver un resultado en la unión cuando el elemento de datos no se rellena.
Un vínculo describe la asociación entre una tabla y otra.
Los distintos tipos de asociaciones (conocidas como "cardinalidades") son los siguientes:
En la interfaz, puede distinguir los diferentes tipos de relaciones fácilmente gracias a sus iconos.
Para relaciones de unión con una tabla o base de datos de campaña:
Para relaciones de unión mediante el acceso a bases de datos federadas:
Para obtener más información sobre las tablas de FDA, consulte Acceso de datos federado.
Se debe declarar un vínculo en el esquema que contenga la clave externa de la tabla vinculada a través del elemento principal:
<element name="name_of_link" type="link" target="key_of_destination_schema">
<join xpath-dst="xpath_of_field1_destination_table" xpath-src="xpath_of_field1_source_table"/>
<join xpath-dst="xpath_of_field2_destination_table" xpath-src="xpath_of_field2_source_table"/>
...
</element>
Los vínculos obedecen las siguientes reglas:
La definición de un vínculo se introduce en una vincular-type <element>
con los atributos siguientes:
name: nombre del vínculo de la tabla de origen,
destino: nombre del esquema de destino,
etiqueta: etiqueta del vínculo,
revLink (opcional): nombre del vínculo inverso desde el esquema de destino (deducido automáticamente de forma predeterminada),
integridad (opcional): integridad referencial de la incidencia de la tabla de origen a la incidencia de la tabla de destino. Los valores posibles son los siguientes:
revIntegrity (opcional): integridad en el esquema de destino (opcional, "normal" de forma predeterminada),
revCardinality (opcional): con el valor "single" rellena la cardinalidad con tipo 1-1 (1-N de forma predeterminada).
externalJoin (opcional): fuerza la unión externa
revExternalJoin (opcional): fuerza la unión externa en el vínculo inverso
Un vínculo hace referencia a uno o varios campos de la tabla de origen a la tabla de destino. Los campos que componen la unión ( <join>
) no es necesario rellenarlos porque se deducen automáticamente de forma predeterminada mediante la clave interna del esquema de destinatario.
Un vínculo consta de dos semirvínculos, en los que el primero se declara desde el esquema de origen y el segundo se crea automáticamente en el esquema ampliado del esquema de destino.
Una unión puede ser una unión externa si la variable externalJoin se agrega el atributo, con el valor "true" (admitido en PostgreSQL).
Los vínculos son los elementos declarados al final del esquema.
Relación 1-N con la tabla de esquema "cus:company":
<srcSchema name="recipient" namespace="cus">
<element name="recipient">
...
<element label="Company" name="company" revIntegrity="define" revLabel="Contact" target="cus:company" type="link"/>
</element>
</srcSchema>
El esquema generado:
<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
<element name="recipient" sqltable="CusRecipient">
...
<element label="Company" name="company" revLink="recipient" target="cus:company" type="link">
<join xpath-dst="@id" xpath-src="@company-id"/>
</element>
<attribute advanced="true" label="Foreign key of 'Company' link (field 'id')" name="company-id" sqlname="iCompanyId" type="long"/>
</element>
</schema>
La definición del vínculo se complementa con los campos que conforman la unión, es decir, la clave principal con su XPath ("@id") en el esquema de destino y la clave externa con su XPath ("@company-id") en el esquema.
La clave externa se agrega automáticamente en un elemento que utiliza las mismas características que el campo asociado en la tabla de destino, con la siguiente convención de nombres: nombre del esquema de destino seguido del nombre del campo asociado ("company-id" en nuestro ejemplo).
Esquema extendido del destinatario ("cus:company"):
<schema mappingType="sql" name="company" namespace="cus" xtkschema="xtk:schema">
<element name="company" sqltable="CusCompany" autopk="true" autouuid="true">
<key internal="true" name="id">
<keyfield xpath="@id"/>
</key>
...
<attribute desc="Internal primary key" label="Primary key" name="id" sqlname="iCompanyId" type="long"/>
...
<element belongsTo="cus:recipient" integrity="define" label="Contact" name="recipient" revLink="company" target="nms:recipient" type="link" unbound="true">
<join xpath-dst="@company-id" xpath-src="@id"/>
</element>
</element>
</schema>
Se ha añadido un vínculo inverso a la tabla "cus:recipient" con los siguientes parámetros:
Tenga en cuenta que la variable autouuid="true"
El parámetro se aplica en el contexto de un Implementación empresarial (FDAC) solo.
En este ejemplo, declaramos un vínculo hacia la tabla de esquema "nms:address". La unión es una unión externa y se rellena explícitamente con la dirección de correo electrónico del destinatario y el campo "@address" de la tabla vinculada ("nms:address").
<srcSchema name="recipient" namespace="cus">
<element name="recipient">
...
<element integrity="neutral" label="Info about email" name="emailInfo" revIntegrity="neutral" revLink="recipient" target="nms:address" type="link" externalJoin="true">
<join xpath-dst="@address" xpath-src="@email"/>
</element>
</element>
</srcSchema>
Relación 1-1 con la tabla de esquema "cus:extension":
<element integrity="own" label="Extension" name="extension" revCardinality="single" revLink="recipient" target="cus:extension" type="link"/>
Vínculo a una carpeta (esquema "xtk:folder"):
<element default="DefaultFolder('nmsFolder')" label="Folder" name="folder" revDesc="Recipients in the folder" revIntegrity="own" revLabel="Recipients" target="xtk:folder" type="link"/>
El valor predeterminado devuelve el identificador del primer archivo de tipo de parámetro elegible introducido en la función "DefaultFolder('nmsFolder')".
En este ejemplo, deseamos crear una clave en un vínculo ("empresa" a "cus:empresa" esquema) con la variable xlink y un campo de la tabla ("correo electrónico"):
<srcSchema name="recipient" namespace="cus">
<element name="recipient">
<key name="companyEmail">
<keyfield xpath="@email"/>
<keyfield xlink="company"/>
</key>
<attribute name="email" type="string" length="80" label="Email" desc="Recipient email"/>
<element label="Company" name="company" revIntegrity="define" revLabel="Contact" target="cus:company" type="link"/>
</element>
</srcSchema>
El esquema generado:
<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
<element name="recipient" sqltable="CusRecipient">
<key name="companyEmail">
<keyfield xpath="@email"/>
<keyfield xpath="@company-id"/>
</key>
<attribute desc="E-mail address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/>
<element label="Company" name="company" revLink="recipient" target="sfa:company" type="link">
<join xpath-dst="@id" xpath-src="@company-id"/>
</element>
<attribute advanced="true" label="Foreign key of link 'Company' (field 'id')" name="company-id" sqlname="iCompanyId" type="long"/>
</element>
</schema>
La definición de la clave del nombre "companyEmail" se amplió con la clave externa del vínculo "company".