用 Object Property 建立对象间关系:自动双向链接
为什么需要对象关系
单独的对象没什么价值——价值来自连接。Task 对象链接到 Project 对象,表示"这个任务属于这个项目";Meeting 对象链接到 Person 对象,表示"这个人参加了这个会议"。
Anytype 用 Object 类型的 Property 来实现这些关系——这是对象数据库范式的核心。
创建 Object Property
步骤
- 进入 Type Settings(Channel Settings → Content Model → 目标 Type)
- 在 Properties 区域点击 + New
- 输入 Property 名称(比如 "所属项目"、"负责人")
- Property 类型选择 Object
- 选择可以引用哪些 Type:
- Any type → 可以引用任何类型的对象
- Restrict to one or more types → 只能引用指定 Type(更精确)
- 点击 Create
举例
- 在
TaskType 里加 Object Property "所属项目" → Restrict to →ProjectType - 在
TaskType 里加 Object Property "负责人" → Restrict to →PersonType
这样任务对象只能链接到项目和人员,不会误链接到书本或食谱。
双向链接(Backlink)
当你在 Task 里设置了"所属项目 = 网站改版",会自动发生两件事:
- Task 对象的 Header 里显示 "所属项目: 网站改版"(链接)
- Project 对象(网站改版)的 Property 面板里自动出现一条反向记录:"这个 Project 被 3 个 Task 引用"
这就是 backlink(反向链接)——不是手动创建的,是 Property 系统自动维护的。
怎么查看 backlink
打开任意对象,在 Property 面板(ⓘ图标)最下方有 Relations 区域:
- 列出所有引用了这个对象的其他对象
- 点击可以跳转到那些对象
- 这就是 Graph 图谱的数据来源
修改双向链接
- 在 Task 里把"所属项目"从 A 改成 B → A 的 backlink 减少一条,B 增加一条
- 删除 Task 对象 → Project 的 backlink 自动移除这条关系
所有关系由 Property 系统自动维护,不需要手动清理。
一对多 vs 多对多
一对多
一个 Project 可以有很多 Task,但一个 Task 只属于一个 Project:
- 在 Task Type 里建一个 Object Property "所属项目"
- 每个 Task 的"所属项目"指向 1 个 Project
- Project 端自动看到"我有多少个 Task"
多对多
一个 Person 可以参与很多 Project,一个 Project 也可以有很多 Person:
- 在 Person Type 里建 Object Property "参与项目"(Multi-select 或 Object 类型允许多个)
- 在 Project Type 里建 Object Property "团队成员"
- 两边互相指,自动形成双向关系
或者用一个中间 Type(比如
Team Member Role)来精确表达"张三在 A 项目是 PM,在 B 项目是开发"。
在视图里用关系
Object Property 在视图系统里特别好用:
Grid 视图里显示为一列
Grid(表格)视图的每一列可以是任何 Property——包括 Object 类型。在表格里:
- "负责人"列显示 Person 的头像和名字
- "所属项目"列显示 Project 的名称
- 点击单元格可以直接编辑(弹出对象搜索框)
按关系筛选
Filters 里可以按 Object Property 筛选:
"显示所有所属项目为'网站改版'的 Task"
按关系分组
Group By 可以按 Object Property 分组:
"按负责人分组所有 Task" → 每个负责人下面列出他所有的任务
关系 vs 手动链接
| 方式 | 自动双向 | 可筛选 | 可排序 | 适用场景 |
|---|---|---|---|---|
| Object Property | ✅ | ✅ | ✅ | 结构化关系(任务→项目→人) |
| 手动对象链接 | ❌ 单向 | ❌ | ❌ | 松散关联、正文里的临时引用 |
规则:结构化的"X 属于 Y"、"X 指向 Y"——永远用 Object Property。临时的、正文里的链接——用手动链接。