1

使用“创建对象”操作时,是否可以配置递增主键?即每个新对象的主键都是最近创建的对象的主键+1。

4

1 回答 1

1

可以根据在现有对象中找到的当前最高值配置递增数字。但是,我不建议使用递增整数作为对象的主键。

生成一个自增整数

有两种方法可以生成自动递增的数字。两者都涉及编写自定义函数以在操作中创建对象。在函数中,您可以:

  1. 有一个“计数”对象的实例,其中包含您正在创建的对象类型的最高已知 id 的值。读取最大值,加 1,将此最大值设置为新对象的值,然后更新基础“计数”对象的值。
  2. 对您的对象类型执行聚合以找到最大值,加 1,然后在新对象上设置该值。

这是在许多工作流(例如票务应用程序)中利用的有用模式。

选择主键

作为最佳实践,主键不应与对象的语义上有意义的信息耦合。您的主键不应包含与用户工作流程相关的信息。例如,在票务工作流程中,票号格式可能会发生变化。更新主键的值是不必要的工作量,而更新典型的字符串或整数列的值是可行的。

因此,建议主键是唯一生成的 UUID,存储在字符串列(例如:)中ticket_id,而自动递增的数字存储在以数字代表的名称命名的列中(例如:)ticket_number

生成 UUID

通过 Actions 创建新对象时生成主键的最佳做法是创建 UUID 字符串。

在 Action 内部使用 Create Object 规则时,您可以actions::generate_uuid在参数上指定 typeclass 以在每次提交 Action 时生成一个随机 UUID。

要在函数支持的操作中执行此操作,您可以按照函数文档添加依赖项。对于 uuid 包,这意味着将以下内容添加到您的 package.json 中:

 "dependencies": {
    "uuid": "^3.4.0"
  },
  "devDependencies": {
    "@types/uuid": "^3.4.9"
  }

如果您使用较新版本的 uuid 包,它将无法在 Functions 中执行,因为此处的库中删除了一项功能。

完成此操作后,请确保单击 package.json 编辑器窗口中的小横幅,该窗口允许您从公共 npm 获取包。默认情况下,这是禁用的。

然后在您的代码中,您可以添加如下内容:

import { v4 as uuidv4 } from "uuid";
...
@OntologyEditFunction()
public createObject(): void {
    var newObject = Objects.create().myObjectType(uuidv4());
}
于 2021-09-18T00:06:42.950 回答