Entity
实体的身份与引用
实体是 Orisumi 中有稳定身份的一项数据,例如用户本人、VS Code 这个本机应用、14:00 开始的那段前台时段,或者晚上的一份推断。实体只提供身份,内容保存在它的版本中。
Observation、EntitySchema 和 InputSet 是 Core 类型,其余实体都是业务实体,类型由 EntitySchema 定义。
- 身份:
EntityId - 决策:ADR · 实体模型
身份
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 统一的操作
执行方:后端
所有类型的实体使用同一组操作:形成新版本、读取和删除。