Show Menu
화제×

데이터베이스 매핑

예제 스키마의 SQL 매핑은 다음 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>

설명

스키마의 루트 요소가 더 이상 <srcschema> ​아니라 <schema> .
이를 통해 소스 스키마에서 자동으로 생성되는 다른 유형의 문서를 스키마라고 합니다. 이 스키마는 Adobe Campaign 응용 프로그램에서 사용됩니다.
SQL 이름은 요소 이름과 유형에 따라 자동으로 결정됩니다.
SQL 이름 지정 규칙은 다음과 같습니다.
  • table:스키마 네임스페이스 및 이름 연결
    예제에서 테이블 이름은 sqltable 속성에서 스키마의 기본 요소를 통해 입력됩니다.
    <element name="recipient" sqltable="CusRecipient">
    
    
  • field:유형('i'(정수의 경우), 'd', 문자열의 경우 's', 날짜의 't')에 따라 정의된 접두사가 앞에 오는 요소의 이름
    필드 이름은 입력 및 입력 시 sqlname 속성을 통해 <attribute> 입력됩니다. <element>
    <attribute desc="E-mail address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/> 
    
    
소스 스키마에서 SQL 이름을 오버로드할 수 있습니다. 이렇게 하려면 관련 요소의 "sqltable" 또는 "sqlname" 속성을 채웁니다.
확장 스키마에서 생성된 테이블을 만드는 SQL 스크립트는 다음과 같습니다.
CREATE TABLE CusRecipient(
  iGender NUMERIC(3) NOT NULL Default 0,   
  sCity VARCHAR(50),   
  sEmail VARCHAR(80),
  tsCreated TIMESTAMP Default NULL);

SQL 필드 제한 조건은 다음과 같습니다.
  • 숫자 및 날짜 필드에 null 값이 없는 경우,
  • 숫자 필드가 0으로 초기화되었습니다.

XML 필드

기본적으로 모든 입력 <attribute> <element> 요소는 데이터 스키마 테이블의 SQL 필드에 매핑됩니다. 그러나 SQL 대신 XML에서 이 필드를 참조할 수 있습니다. 즉, 데이터는 모든 XML 필드의 값이 들어 있는 테이블의 메모 필드("mData")에 저장됩니다. 이러한 데이터의 저장은 스키마 구조를 준수하는 XML 문서입니다.
XML에서 필드를 채우려면 해당 요소에 xml 속성을 값 "true"로 추가해야 합니다.
:다음은 XML 필드 사용의 두 가지 예입니다.
  • 여러 줄 주석 필드:
    <element name="comment" xml="true" type="memo" label="Comment"/>
    
    
  • HTML 형식의 데이터에 대한 설명:
    <element name="description" xml="true" type="html" label="Description"/>
    
    
    "html" 유형을 사용하면 HTML 컨텐츠를 CDATA 태그로 저장하고 Adobe Campaign 클라이언트 인터페이스에 특수 HTML 편집 검사를 표시할 수 있습니다.
XML 필드를 사용하면 데이터베이스의 물리적 구조를 수정하지 않고도 필드를 추가할 수 있습니다. 다른 이점은 리소스(SQL 필드에 할당된 크기, 테이블당 필드 수에 제한 등)를 적게 사용하는 것입니다.
주요 단점은 XML 필드를 인덱싱하거나 필터링할 수 없다는 것입니다.

인덱스 필드

색인을 사용하면 응용 프로그램에 사용되는 SQL 쿼리의 성능을 최적화할 수 있습니다.
데이터 스키마의 기본 요소에서 인덱스가 선언됩니다.
<dbindex name="name_of_index" unique="true/false">
  <keyfield xpath="xpath_of_field1"/>
  <keyfield xpath="xpath_of_field2"/>
  ...
</key>

인덱스는 다음 규칙을 따릅니다.
  • 인덱스는 테이블에서 하나 이상의 필드를 참조할 수 있습니다.
  • 고유 속성에 값 "true"가 포함된 경우 모든 필드에서 고유한 인덱스(중복 제외)를 사용할 수 있습니다.
  • 인덱스의 SQL 이름은 테이블의 SQL 이름과 인덱스 이름으로 결정됩니다.
표준으로서 인덱스는 스키마의 주 요소에서 선언된 첫 번째 요소입니다.
색인은 테이블 매핑(표준 또는 FDA) 중에 자동으로 생성됩니다.
예제 :
  • 전자 메일 주소 및 도시에 색인 추가:
    <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>
    
    
  • "id" 이름 필드에 고유한 색인 추가:
    <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>
    
    

키 관리

테이블에 있는 레코드를 식별하는 키가 하나 이상 있어야 합니다.
키는 데이터 스키마의 기본 요소에서 선언됩니다.
<key name="name_of_key">
  <keyfield xpath="xpath_of_field1"/>
  <keyfield xpath="xpath_of_field2"/>
  ...
</key>

키는 다음 규칙에 따릅니다.
  • 키는 표에서 하나 이상의 필드를 참조할 수 있습니다.
  • 키가 채울 스키마의 첫 번째 키이거나 값이 "true"인 내부 특성이 포함된 경우 'primary'(또는 'priority')라고 합니다.
  • 고유 인덱스는 각 키 정의에 대해 암시적으로 선언됩니다. 값이 "true"인 noDbIndex 특성을 추가하여 키에 인덱스를 만들 수 없습니다.
표준으로서 키는 인덱스가 정의된 후 스키마의 기본 요소에서 선언된 요소입니다.
키는 테이블 매핑(표준 또는 FDA) 중에 만들어지며, Adobe Campaign은 고유한 색인을 찾습니다.
예제 :
  • 전자 메일 주소 및 구/군/시에 키 추가:
    <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>
    
    
    생성된 스키마:
    <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>
    
    
  • "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>
    
    
    생성된 스키마:
    <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>
    
    

자동 증분 키

대부분의 Adobe Campaign 테이블의 기본 키는 데이터베이스 엔진에서 자동으로 생성되는 32비트 길이의 정수입니다. 키 값의 계산은 전체 데이터베이스에서 고유한 숫자를 생성하는 시퀀스(기본적으로 XtkNewId SQL 함수)에 따라 다릅니다. 키의 내용은 레코드를 삽입할 때 자동으로 입력됩니다.
증분 키의 이점은 테이블 간의 조인에 대해 수정할 수 없는 기술 키를 제공한다는 것입니다. 또한 이 키는 2바이트 정수를 사용하므로 메모리를 많이 차지하지 않습니다.
소스 스키마에 pkSequence 속성과 함께 사용할 시퀀스의 이름을 지정할 수 있습니다 . 이 특성이 소스 스키마에 지정되지 않으면 XtkNewId 기본 시퀀스가 사용됩니다. 응용 프로그램은 nms:broadLog nms:trackingLog 스키마( NmsBroadLogId ​NmsTrackingLogIdId)에 대해 전용 시퀀스를 사용합니다. 이 테이블은 레코드가 가장 많이 들어 있는 테이블이기 때문입니다.
ACC 18.10에서 XtkNewId 는 더 이상 기본 스키마에서 시퀀스의 기본값이 아닙니다. 이제 스키마를 만들거나 전용 시퀀스로 기존 스키마를 확장할 수 있습니다.
새 스키마를 만들거나 스키마 확장 중에 전체 스키마에 대해 동일한 기본 키 시퀀스 값(@pkSequence)을 유지해야 합니다.
Adobe Campaign 스키마에서 참조되는 시퀀스( 예: NmsTrackingLogId )는 매개 변수의 ID 수를 쉼표로 구분하여 반환하는 SQL 함수와 연결해야 합니다. 이 함수를 GetNewXXXIds ​라고 해야 합니다. 여기서 XXX는 시퀀스 이름( 예: GetNewNmsTrackingLogIds )입니다. 각 데이터베이스 엔진에 대한 ' NmsTrackingLogId' 시퀀스 생성 ​의 예를 복구하기 위해 datakit/ms/eng/sql/sql/directory에서 응용 프로그램과 함께 제공된 postgres-nms.sql , mssql-nms.sql 또는 oracle-nms.sql 파일을 봅니다.
고유 키를 선언하려면 데이터 스키마의 주 요소에 자동 속성(값 "true"로)을 채웁니다.
예제 :
소스 스키마에서 증분 키 선언:
<srcSchema name="recipient" namespace="cus">
  <element name="recipient" autopk="true">
  ...
  </element>
</srcSchema>

생성된 스키마:
<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>

키 및 해당 인덱스의 정의 외에, 자동 생성된 기본 키를 포함하도록 "id"라는 숫자 필드가 확장 스키마에 추가되었습니다.
기본 키가 0으로 설정된 레코드는 테이블을 만들 때 자동으로 삽입됩니다. 이 레코드는 볼륨 테이블에 적용되지 않는 외부 조인을 피하는 데 사용됩니다. 기본적으로 모든 외래 키는 값 0으로 초기화되므로 데이터 항목이 채워지지 않을 때 조인에서 항상 결과를 반환할 수 있습니다.