自动增量键
大多数Adobe Campaign表的主键是由数据库引擎自动生成的32位长整数。 键值的计算取决于序列(默认情况下,XtkNewId SQL函数),该序列生成的数字在整个数据库中是唯一的。 在插入记录时自动输入密钥的内容。
增量键的优点在于,它为表之间的连接提供了不可修改的技术键。 此外,此键不会占用太多内存,因为它使用双字节整数。
您可以在源架构中指定要与 pkSequence 属性一起使用的序列的名称。 如果源架构中未提供此属性,则将使用 XtkNewId 默认序列。 应用程序对 nms:broadLog 和 nms:trackingLog 架构使用专用序列(分别为 NmsBroadLogId 和 NmsTrackingLogId),因为这些是包含最多记录的表。
从ACC 18.10开始,XtkNewId 不再是现成架构中序列的默认值。 您现在可以使用专用序列构建模式或扩展现有模式。
在Adobe Campaign架构中引用的序列(例如 NmsTrackingLogId)必须与返回参数中ID数的SQL函数关联,并以逗号分隔。 此函数必须调用 GetNew XXX Ids,其中 XXX 是序列的名称(例如 GetNewNmsTrackingLogIds)。 查看 datakit/nms/eng/sql/ 目录中随应用程序提供的 postgres-nms.sql、mssql-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”的数字字段,以包含自动生成的主键。