自动增量键

大多数Adobe Campaign表的主键是由数据库引擎自动生成的32位长整数。 键值的计算取决于序列(默认情况下,XtkNewId SQL函数),该序列生成的数字在整个数据库中是唯一的。 在插入记录时自动输入密钥的内容。

增量键的优点在于,它为表之间的连接提供了不可修改的技术键。 此外,此键不会占用太多内存,因为它使用双字节整数。

您可以在源架构中指定要与​ pkSequence ​属性一起使用的序列的名称。 如果源架构中未提供此属性,则将使用​ XtkNewId ​默认序列。 应用程序对​ nms:broadLog ​和​ nms:trackingLog ​架构使用专用序列(分别为​ NmsBroadLogId ​和​ NmsTrackingLogId),因为这些是包含最多记录的表。

从ACC 18.10开始,XtkNewId ​不再是现成架构中序列的默认值。 您现在可以使用专用序列构建模式或扩展现有模式。

IMPORTANT
创建新架构或在架构扩展期间,您需要为整个架构保留相同的主键序列值(@pkSequence)。

在Adobe Campaign架构中引用的序列(例如​ NmsTrackingLogId)必须与返回参数中ID数的SQL函数关联,并以逗号分隔。 此函数必须调用​ GetNew XXX Ids,其中​ XXX ​是序列的名称(例如​ GetNewNmsTrackingLogIds)。 查看​ datakit/nms/eng/sql/ ​目录中随应用程序提供的​ postgres-nms.sqlmssql-nms.sql ​或​ oracle-nms.sql ​文件,以恢复为每个数据库引擎创建“NmsTrackingLogId”序列的示例。

要声明唯一键,请在数据架构的主元素中填充​ autopk ​属性(值为“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”的数字字段,以包含自动生成的主键。

IMPORTANT
创建表时,主键设置为0的记录会自动插入。 此记录用于避免外部联接,这对于卷表无效。 默认情况下,所有外键都使用值0进行初始化,这样,当数据项未填充时,就始终可以在连接上返回结果。