Orisumi

Entity

实体的身份与引用

实体是 Orisumi 中有稳定身份的一项数据,例如用户本人、VS Code 这个本机应用、14:00 开始的那段前台时段,或者晚上的一份推断。实体只提供身份,内容保存在它的版本中。

Observation、EntitySchema 和 InputSet 是 Core 类型,其余实体都是业务实体,类型由 EntitySchema 定义。

身份

ENTITY-1 EntityId 不变

执行方:后端

每个实体有一个 EntityId,生成后不再改变。一个 EntityId 只属于一个实体,实体删除后仍然占用。什么算同一个实体由业务规则决定,见 Identity。

ENTITY-2 EntityId 由写入方生成

执行方:写入方、后端

EntityId 是写入方生成的 UUIDv7。

ENTITY-3 类型不变

执行方:后端

实体的类型在创建后不再改变:Core 类型实体的后续版本,category 与首版相同;业务实体的后续版本必须引用同一个 EntitySchema 的 Schema 版本,可以是其中任何一版,比前一版更旧的也可以。每个版本都按自己引用的 Schema 版本解释,见 SCHEMA-17。

引用

ENTITY-4 引用指向版本

定义

引用的值是目标版本的 VersionId,所以沿引用读到的始终是这一版。例如推断引用了 14:00 那一版前台时段,时段后来延长到 16:00,追溯推断时读到的仍是 14:00 那一版。

引用方要跟上目标的新内容,就形成自己的新版本,改为引用目标的新版本。

ENTITY-5 引用的位置

定义

一个版本的引用,是 Core 或它的 Schema 版本声明为引用的全部位置:

  • 版本的 previousVersionId 和 schemaVersionId;
  • Core 类型声明的引用成员,例如 Observation 的 observerVersionId;
  • 业务字段中 type 为 reference 的值,包括对象成员和数组元素,见 SCHEMA-9。

枚举引用时,保留每个引用所在的位置:前一版本、Schema 版本、Observer、观测内容和输入是不同的关系。

ENTITY-6 只引用已保存的版本

执行方:后端

新版本引用的每个目标版本,都必须已保存且未被删除。同一次提交中的多个版本按依赖顺序逐个保存(见 VERSION-13),所以版本不能引用自己,同一次提交中的两个新版本也不能互相引用。

实体之间仍然可以互相关联:A 的第二版引用 B 的第一版,B 的第一版引用 A 的第一版。

目标保存后又被删除时,已有的引用保留,见 HISTORY-8。

ENTITY-7 按实体归集

执行方:读取方

查找与某个实体相关的数据时,按目标版本所属的实体归集。例如两份观测分别引用了用户的第一版和第二版,它们都是关于这个用户的。

ENTITY-8 引用存在引用方

定义

引用只保存在引用方的版本中。要找出引用某个实体的版本,就查询引用方的数据。

关系与操作

ENTITY-9 关系实体

执行方:写入方

一种关系需要被观测、需要时间边界或需要属性时,为它定义一种业务类型,这种业务实体叫关系实体。其他关系直接用引用表达。

ENTITY-10 统一的操作

执行方:后端

所有类型的实体使用同一组操作:形成新版本、读取和删除。

贡献者

页面历史