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"/>
    
NOTE
Os nomes SQL podem ser sobrecarregados do esquema de origem. Para fazer isso, preencha os atributos "sqltable" ou "sqlname" no elemento relacionado.

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
NOTE
  • 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:

recommendation-more-help
601d79c3-e613-4db3-889a-ae959cd9e3e1