Mapeamento de banco de dados database-mapping
O mapeamento SQL do esquema de exemplo descrito nesta página gera o seguinte 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 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>
O elemento raiz do esquema foi alterado para <srcschema>
para <schema>
.
Esse outro tipo de documento é gerado automaticamente a partir do schema de origem e chamado simplesmente de schema.
Os nomes SQL são determinados automaticamente com base no nome e no tipo do elemento.
As regras de nomenclatura SQL são as seguintes:
-
tabela: concatenação do nome e do namespace do esquema
Em nosso exemplo, o nome da tabela é inserido por meio do elemento principal do esquema no atributo sqltable:
code language-sql <element name="recipient" sqltable="CusRecipient">
-
campo: nome do elemento precedido por um prefixo definido de acordo com o tipo: 'i' para inteiro, 'd' para duplo, 's' para cadeia de caracteres, 'ts' para datas, etc.
O nome do campo é inserido por meio do atributo sqlname para cada
<attribute>
e<element>
digitados:code language-sql <attribute desc="Email address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/>
O script SQL para criar a tabela gerada a partir do schema estendido é o seguinte:
CREATE TABLE CusRecipient(
iGender NUMERIC(3) NOT NULL Default 0,
sCity VARCHAR(50),
sEmail VARCHAR(80),
tsCreated TIMESTAMP Default NULL);
As restrições do campo SQL são as seguintes:
- nenhum valor nulo em campos numéricos e de data
- campos numéricos são inicializados como 0
Campos XML xml-fields
Por padrão, qualquer elemento do tipo <attribute>
e <element>
é mapeado em um campo SQL da tabela de esquema de dados. No entanto, você pode fazer referência a esse campo em XML, em vez de SQL, o que significa que os dados são armazenados em um campo de memorando ("mData") da tabela que contém os valores de todos os campos XML. O armazenamento desses dados é um documento XML que observa a estrutura do schema.
Para preencher um campo em XML, você deve adicionar o atributo xml com o valor "true" ao elemento relacionado.
Exemplo: aqui estão dois exemplos de uso de campo XML.
-
Campo de comentário multilinha:
code language-sql <element name="comment" xml="true" type="memo" label="Comment"/>
-
Descrição dos dados em formato HTML:
code language-sql <element name="description" xml="true" type="html" label="Description"/>
O tipo "html" permite armazenar o conteúdo do HTML em uma tag CDATA e exibir uma verificação de edição de HTML especial na interface do cliente do Adobe Campaign.
Use campos XML para adicionar novos campos sem modificar a estrutura física do banco de dados. Outra vantagem é que você usa menos recursos (tamanho alocado para campos SQL, limite do número de campos por tabela etc.). No entanto, observe que não é possível indexar ou filtrar um campo XML.
Campos indexados indexed-fields
Os índices permitem otimizar o desempenho das consultas SQL usadas na aplicação.
Um índice é declarado pelo elemento principal do schema de dados.
<dbindex name="name_of_index" unique="true/false">
<keyfield xpath="xpath_of_field1"/>
<keyfield xpath="xpath_of_field2"/>
...
</key>
Os índices obedecem às seguintes regras:
- Um índice pode fazer referência a um ou mais campos na tabela
- Um índice pode ser exclusivo (para evitar duplicatas) em todos os campos se o atributo unique contiver o valor "true"
- O nome SQL do índice é determinado pelo nome SQL da tabela e pelo nome do índice
-
Como padrão, os índices são os primeiros elementos declarados do elemento principal do esquema.
-
Os índices são criados automaticamente durante o mapeamento de tabela (padrão ou FDA).
Exemplo:
-
Adicionar um índice ao endereço de email e à cidade:
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>
-
Adicionar um índice exclusivo ao campo de nome "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>
Saiba mais
Navegue pelos links a seguir para saber mais: