本页尚未翻译,当前显示英文版本。
Schema 对象参考
最后更新:2026 年 7 月 16 日
本页讲解 PlayServ Backoffice 中用到的 Schema 核心概念。
当你需要某个 Schema 对象、字段种类或字段设置的明确定义,并想搞清楚它在整个数据模型中处于什么位置时,就来查这里。它要回答的是这类直白的问题:Entity 是什么,Relationship 和 Inclusion 差在哪,把一个对象标记为 Singleton 之后会怎样。
Schema 是一个 Project 数据结构的正式定义。它描述这个 Project 里有哪些对象、它们包含哪些字段、这些字段允许存放什么值,以及这些对象之间如何相互关联。
Entity、Entity Part 与 Enum
Schema 由三种核心对象类型构成 —— 它们在数据模型中各司其职。
独立对象
顶层的 Schema 对象,定义一个完整而独立的结构。Entity 是 Schema 的主要构成模块 —— 它们对应你游戏里的真实概念,比如 Player 档案、武器配置、商店道具或一局对战的记录。
每个 Entity 在 Data 视图中都有自己的 Record。它可以拥有自己的字段,可以被其他 Entity 通过 Relationship 字段引用,也可以通过 Inclusion 字段把 Entity Part 嵌进来。
可复用的片段
可复用的 Schema 对象,定义一段打算嵌进其他 Schema 对象里的结构。当同一组字段需要出现在多个地方,或者一个较大的对象更适合由若干个有名字的小块拼起来、而不是一口气定义完时,就用它。
Entity Part 在 Data 视图中没有自己的 Record —— 它们只作为包含它们的那些 Entity 的一部分而存在。属性块、配 置分组,或是隶属于某个更大对象的背包结构,都是很好的例子。
受控的取值集合
定义一组固定可选值的类型。当某个字段应当从一份受控清单中取值、而不是自由填写时,就用它。Enum 让数据保持一致,避免取值随时间越走越偏。
比如一个 TankStatus enum,取值为 Active、Destroyed 和 Respawning,就能保证不会存进任何意料之外的状态值。字段通过 Enum reference 这个 kind 来引用 Enum。

字段的种类
每个 Entity 和 Entity Part 都由字段构成。添加字段时,你要选择它的 Kind —— 这决定了这个字段存什么,以及它如何与 Schema 的其余部分相连。
字段有四种 kind:Primitive、Enum reference、Relationship → entity 和 Inclusion ↩ part。
Primitive
Primitive 字段直接存放一个标量值。当这个字段只需装一个不引用任何其他 Schema 对象的值时,就用它。

| 类型 | 存放 |
|---|---|
| Text | 短字符串 |
| Long text | 多行字符串 |
| Integer | 整数 |
| Number | 浮点数 / 小数 |
| Decimal | 定精度数 |
| Boolean | true / false |
| Date & time | ISO 时间戳 |
| Date | YYYY-MM-DD |
| UUID | 唯一标识符 |
| JSON | 结构化对象 |
| 经校验的邮箱 | |
| URL | 链接 |
当字段直接装一个值时就选 Primitive —— 一个名字、一个速度数值、一个开关、一个时间戳。典型 Schema 中的大多数字段都是 Primitive。
Enum reference
Enum reference 字段把取值限定为某个预定义 Enum 中的一个选项。

选定这个 kind 之后,再选择该字段要引用哪个 Enum。运行时,这个字段只能装那个 Enum 中定义过的值之一。
当 某个字段只应接受一组受控取值时,就用 Enum reference —— 比如一个 status 字段,只能是 Draft、Active 或 Archived。这样既挡住了自由填写的值进入数据,也让合法选项在 Schema 里一目了然。
Relationship → entity
Relationship 字段建立一个指向另一个 Entity 的外键。当当前对象应当指向一条独立存在的 Record、而不是把对方的结构嵌进来时,就用它。

添加 Relationship 字段时,选择目标 Entity 和基数:
- 1-to-1 —— 当前对象恰好指向目标 Entity 的一条 Record
- 1-to-many —— 当前对象指向目标 Entity 的多条 Record
当两个对象确实彼此独立、应当各自存在时,就用 Relationship。比如一个 Match entity 引用一组 Player entity —— Player 本就独立存在,还可能被多场对战引用。与 Inclusion 不同,Relationship 不会嵌入目标的结构,它只存一个指向对方的链接。
提示
当被关联的对象有自己的身份和生命周期时,用 Relationship。当那段结构本就属于父对象、不需要独立存在时,用 Inclusion。
Inclusion ↩ part
Inclusion 字段把一个 Entity Part 直接嵌进当前对象,成为它结构的一部分。当嵌套的这段结构本就属于父对象、不应作为一条独立的 Record 存在时,就用它。