snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
---
title: 创建自定义字段
description: 逐步指南:向任何对象添加自定义字段。
---
使用自定义字段可捕获特定于您业务的信息。 可将其添加到任何对象——标准或自定义。
## 步骤
1. 进入 **设置 → 数据模型**
2. 选择要添加字段的对象
3. 点击 **+ 新字段**
4. 选择**字段类型**(所有类型请参见[字段](/l/zh/user-guide/data-model/capabilities/fields))
5. 输入**字段名称**和可选描述
6. 配置特定于该字段的设置(见下文)
7. 单击 **保存**
**快速方法:** 在任意表格视图的列标题末尾点击 **+** → **自定义字段**。
## 在视图中显示字段
新字段不会自动显示。 要显示:
1. 打开该对象的表格视图
2. 点击 **选项 → 字段**
3. 点击字段旁的 **眼睛图标** 以显示该字段
4. 拖动以重新排序
## 配置选项
### 用于选择/多选
1. 点击 **+ 添加选项** 以创建选项
2. 如有需要,设置**默认选项**
3. 拖动以重新排序选项
<Note>
**导入时请使用 API 名称。** 在设置中启用 **高级模式** 以查看 API 名称。 请参见[字段映射](/l/zh/user-guide/data-migration/capabilities/field-mapping)。
</Note>
### 适用于货币字段
设置**默认货币**(USD、EUR 等) 用于新记录。
### 适用于电话字段
设置**默认国家代码**,用于预填新的电话号码。
### 将字段设置为唯一
切换**唯一**选项,以防止各记录之间出现重复值。
<Note>
如果存在重复项(包括已删除记录中的重复项),将会出现错误。 请先清理重复项。
</Note>
### 设置默认值
对于选择字段,您可以选择新记录预先选中的选项。 对于复选框字段,设置默认是否选中。
## 停用字段
1. 进入 **设置 → 数据模型**
2. 找到该字段
3. 点击 **⋮ → 停用**
数据将被保留。 您可以稍后重新启用或永久删除。
## 相关内容
* [字段](/l/zh/user-guide/data-model/capabilities/fields) — 所有字段类型说明
* [数据模型常见问题解答](/l/zh/user-guide/data-model/how-tos/data-model-faq) — 常见问题

View File

@@ -0,0 +1,51 @@
---
title: 创建自定义对象
description: 在 Twenty 中创建自定义对象的分步指南。
---
自定义对象可用于存储您业务独有而标准对象未涵盖的信息。 例如:项目、产品、工单或列表项。
<Note>
**不确定该创建对象还是字段?** 请参阅[了解您的数据模型](/l/zh/user-guide/data-model/overview)以获取指导。
</Note>
## 步骤
1. 进入 **设置 → 数据模型**
2. 点击 **+ 添加对象**
3. 填写:
* **单数名称**(例如,"Listing")
* **复数名称**(例如,"Listings")
* **图标**
* **描述**(可选)
4. 单击 **保存**
您的对象会立即显示在侧边栏中。
## 下一步:添加字段
新建对象默认包含一些基础字段。 添加自定义字段以捕获所需数据:
1. 在 **设置 → 数据模型** 中,选择您的对象
2. 点击 **+ 新字段**
3. 选择字段类型,配置并保存
有关字段类型和配置的详细信息,请参阅[如何创建自定义字段](/l/zh/user-guide/data-model/how-tos/create-custom-fields)。
## 连接到其他对象
要将您的对象与人员、公司或其他对象关联,请创建关系字段。 请参阅[如何创建关系字段](/l/zh/user-guide/data-model/how-tos/create-relation-fields)。
## 停用对象
如果您不再需要某个对象:
1. 转到\*\*设置 -> 数据模型 → 您选择的对象 -> 设置 \*\*
2. 点击 **停用** 按钮
该对象会被隐藏,但数据会被保留。 您可以稍后重新启用或永久删除。
## 相关内容
* [对象](/l/zh/user-guide/data-model/capabilities/objects) — 标准对象与自定义对象
* [数据模型常见问题解答](/l/zh/user-guide/data-model/how-tos/data-model-faq) — 常见问题

View File

@@ -0,0 +1,175 @@
---
title: 创建多对多关系
description: 当双方都有多个条目时,使用连接对象将记录相互关联。
---
多对多关系使您能够在关系双方连接多个记录。 例如:许多 People 可以参与许多 Projects,并且每个 Project 可以包含许多 People。
<Warning>
**Beta 功能**:连接关系目前处于 Beta 阶段。 在按照本指南操作之前,请先在 **Settings → Community → Features** 中启用它们。
</Warning>
<Note>
此功能还需要启用 **Advanced mode**(在 Settings 左下角切换)。
</Note>
## 何时使用多对多
当关系双方都可能存在多个关联时,请使用多对多:
| 关系 | 示例 |
| ----------------- | -------------------------- |
| People ↔ Projects | 一个人参与多个项目;一个项目包含多名团队成员 |
| Companies ↔ Tags | 一个公司可以拥有多个标签;一个标签可以应用于多家公司 |
| Products ↔ Orders | 一个产品可以出现在多个订单中;一个订单包含多个产品 |
## 工作原理
Twenty 在多对多关系中使用 **连接对象** 模式。 连接对象位于两个对象之间,并存储它们之间的关联:
```
People ←→ Project Assignments ←→ Projects
```
该 **Project Assignments** 对象(连接对象)具有:
* 到 People 的关系(多对一)
* 到 Projects 的关系(多对一)
启用连接关系开关后,Twenty 将直接显示已关联的记录,而不再展示中间的连接对象记录。
## 先决条件
1. **在 Beta 功能中启用连接关系**:前往 **Settings → Community → Features** 并启用 **Junction Relations**
2. **启用 Advanced mode**:在 Settings 侧边栏左下角开启 **Advanced mode**
3. 规划您的数据模型:
* 您要连接哪两个对象?
* 连接对象应如何命名?
## 步骤 1:创建连接对象
首先,创建用于保存关联的中间对象。
1. 进入 **设置 → 数据模型**
2. 点击 **+ 添加对象**
3. 使用描述性名称(例如,"Project Assignment"、"Team Member"、"Product Order")
4. 将“跳过创建名称字段”切换为开启
<img src="/images/user-guide/fields/new-pivot-object.png" alt="新建连接对象" />
5. 单击 **保存**
<Tip>
**命名约定**:使用能描述关系的名称,例如 "Project Assignment" 或 "Team Membership"。 这会让数据模型更易理解。
</Tip>
## 第 2 步:在对象与连接对象之间创建关系
从您的两个对象分别向连接对象添加关系字段。
### 第一条关系(对象 A → 连接对象)
1. 在 **Settings → Data Model** 中选择您的第一个对象
2. 单击 **+ 添加关系**
3. 选择连接对象(例如,"Project Assignments")
4. 将关系类型设置为 **One-To-Many**(一个人可以关联到多个分配)
5. 为这些字段命名:
* People 上的字段:例如,"Project Assignments"
* 连接对象上的字段:例如,"Person"
6. 单击 **保存**
### 第二条关系(对象 B → 连接对象)
1. 在 **Settings → Data Model** 中选择您的第二个对象
2. 单击 **+ 添加关系**
3. 选择连接对象(例如,"Project Assignments")
4. 将关系类型设置为 **One-To-Many**(一个项目可以关联到多个分配)
5. 启用 **"This is a relation to a Junction Object"**
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
6. 为这些字段命名:
* 连接对象上的字段:例如,"Project"
* Projects 上的字段:例如,"Team Members"
7. 单击 **保存**
## 步骤 3:配置连接关系的显示方式
现在配置源对象以直接显示已关联的记录,跳过中间的连接对象。
1. 进入 **设置 → 数据模型**
2. 选择第一个对象(例如,"People")
3. 找到指向连接对象的关系字段(例如,"Project Assignments")
4. 点击以编辑该字段
5. 启用 **"This is a relation to a Junction Object"**
6. 选择 **Target relation**(例如,"Project" —— 连接对象上指向另一侧的字段)
7. 单击 **保存**
## 结果
配置完成后:
* 在 **Person** 记录中,"Project Assignments" 字段将直接显示 **Projects**(而非分配记录)
* 在 **Project** 记录中,"Team Members" 字段将直接显示 **People**
连接对象仍然存在并存储关联,但 UI 呈现的是更简洁的多对多视图。
## 示例:People ↔ Projects
以下是完整的操作演示:
### 创建连接对象
* 名称:**Project Assignment**
* 描述:"将人员与其参与的项目关联起来"
### 添加关系
1. **People → Project Assignment**
* 类型:One-to-Many
* People 上的字段:"Project Assignments"
* Assignment 上的字段:"Person"
2. **Projects → Project Assignment**
* 类型:One-to-Many
* Projects 上的字段:"Team Members"
* Assignment 上的字段:"Project"
### 配置连接关系显示
1. 在 **People** 对象上:
* 编辑 "Project Assignments" 字段
* 启用连接关系开关
* 目标:"Project"
2. 在 **Projects** 对象上:
* 编辑 "Team Members" 字段
* 启用连接关系开关
* 目标:"Person"
### 开始使用
* 打开某个 Person 记录 → 直接查看其 Projects
* 打开某个 Project 记录 → 直接查看其团队成员
* 可从任一侧创建新的关联
## 为关联添加额外数据
由于连接对象是一个真实对象,您可以添加自定义字段来存储关系相关的信息:
* **角色**:"Developer"、"Designer"、"Manager"
* **开始日期**:当人加入项目时
* **分配时长**:每周在该项目上的工时
要访问这些数据,请直接导航到连接对象,或通过 API 查询。
## 限制
* **CSV 导入/导出**:不支持直接导入多对多关系。 请改为将记录导入连接对象。
* **筛选器**:按多对多关系进行筛选的选项可能有限。
## 相关内容
* [关系字段](/l/zh/user-guide/data-model/capabilities/relation-fields) — 关系类型说明
* [创建自定义对象](/l/zh/user-guide/data-model/how-tos/create-custom-objects) — 如何创建对象
* [创建关系字段](/l/zh/user-guide/data-model/how-tos/create-relation-fields) — 基本关系设置

View File

@@ -0,0 +1,70 @@
---
title: 创建关系字段
description: 通过关系字段逐步将对象连接起来。
---
关系字段可连接不同对象的记录——例如,将人员链接到公司。
<Note>
**关系名称在创建后无法更改**(它们会影响 API)。 请谨慎规划名称。
</Note>
## 开始之前
请确定:
* 要连接哪些对象? (例如,人员 → 公司)
* 哪一方是“一”端? (例如,公司)
* 哪一方是“多”端? (例如,人员—许多人在同一家公司工作)
* 两端的字段应如何命名?
请参阅[关系字段](/l/zh/user-guide/data-model/capabilities/relation-fields),了解关系类型的说明。
## 步骤
1. 进入 **设置 → 数据模型**
2. 选择要创建关系的对象(通常为“多”端)
3. 点击 **+ 新建字段**
4. 将字段类型选择为 **关系**
5. 选择**目标对象**
6. 选择 **一对多** 或 **多对一**
7. 为关系的**两端**输入字段名称
8. 单击 **保存**
## 示例:人员 → 公司
* 进入 **设置 → 数据模型 → 人员**
* 添加关系字段
* 目标:**公司**
* 类型:**多对一**
* 人员中的字段:**公司**
* 公司中的字段:**员工**
现在,每个人员都可以关联到一家公司,每家公司都会显示其人员。
## 停用关系
1. 进入 **设置 → 数据模型 → 所选对象**
2. 找到该关系字段并点击它
3. 点击 **停用** 按钮
关联会被保留但隐藏。 重新启用即可恢复。
<Note>
**停用关系不会删除记录。** 只会移除它们之间的关联。
</Note>
## 删除关系
1. 进入 **设置 → 数据模型 → 所选对象**
2. 找到该关系字段并点击它
3. 点击 **删除** 按钮
<Note>
仅适用于自定义关系。 标准关系只能被停用。
</Note>
## 相关内容
* [关系字段](/l/zh/user-guide/data-model/capabilities/relation-fields) — 类型和限制
* [如何导入关系](/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — 批量导入关联记录

View File

@@ -0,0 +1,22 @@
---
title: 自定义您的数据模型
description: 数据模型自定义选项概览。
---
Twenty 的数据模型完全可自定义。 创建对象、字段和关系,以符合您的业务。
## 快速链接
| 我想要... | 指南 |
| ------- | ----------------------------------------------------------------- |
| 创建新对象 | [如何创建自定义对象](/l/zh/user-guide/data-model/how-tos/create-custom-objects) |
| 为对象添加字段 | [如何创建自定义字段](/l/zh/user-guide/data-model/how-tos/create-custom-fields) |
| 将对象关联起来 | [如何创建关联字段](/l/zh/user-guide/data-model/how-tos/create-relation-fields) |
## 了解更多
* [理解您的数据模型](/l/zh/user-guide/data-model/overview) — 关键概念与规划建议
* [对象](/l/zh/user-guide/data-model/capabilities/objects) — 标准对象与自定义对象
* [字段](/l/zh/user-guide/data-model/capabilities/fields) — 所有字段类型
* [关联字段](/l/zh/user-guide/data-model/capabilities/relation-fields) — 连接对象
* [数据模型常见问题](/l/zh/user-guide/data-model/how-tos/data-model-faq) — 常见问题

View File

@@ -0,0 +1,157 @@
---
title: 数据模型常见问题解答
description: 关于 Twenty 数据模型的常见问题。
---
## 对象管理
<AccordionGroup>
<Accordion title="我可以删除自定义对象吗?">
是的,可以删除自定义对象。 您也可以先将其停用,这会在界面中隐藏该对象及其数据,同时保留这些数据。
</Accordion>
<Accordion title="我可以删除标准对象(人员、公司等)吗?">
不可以,标准对象无法删除。 您只能将其停用,这会在界面中将其隐藏,但会保留数据。
</Accordion>
<Accordion title="我可以创建多少个自定义对象?">
您可以根据需要创建任意多的自定义对象和字段 — 价格不会变。
</Accordion>
<Accordion title="我可以重命名标准对象吗?">
您可以重命名标准对象的标签(People、Companies、Opportunities),但不能更改其 API 名称。 为了在所有 Twenty 工作区中保持一致性,API 名称是固定的。
</Accordion>
<Accordion title="我可以更改对象的图标吗?">
可以,您可以在 **设置 → 数据模型** 中更改标准对象和自定义对象的图标。
</Accordion>
<Accordion title="我可以在左侧导航栏中重新排列对象吗?">
还不可以。 导航中的对象排序目前是固定的,但该功能计划于未来发布。
</Accordion>
<Accordion title="我可以隐藏左侧导航栏中的对象吗?">
所有活动对象都将出现在导航中。 您可以在 **设置 → 数据模型** 下停用不需要的对象。
</Accordion>
</AccordionGroup>
## 字段功能
<AccordionGroup>
<Accordion title="创建后我可以更改字段类型吗?">
不可以,字段类型在创建后无法更改。 如果您需要其他类型,请创建一个具有正确类型的新字段,迁移您的数据,然后停用旧字段。
</Accordion>
<Accordion title="为什么我需要不同的单复数名称?">
我们的 GraphQL API 针对不同操作使用单复数形式:
* `createPerson`(单数)用于单个记录操作
* `createPeople`(复数)用于批量操作
当单复数形式相同时,这会产生限制,但它改善了开发者的体验。
</Accordion>
<Accordion title="为什么某些字段名称是受保护的?">
某些字段名称如 `Type` 或 `Application` 被保留用于系统使用。 请选择其他名称,如 `Category` 或 `Classification`。
</Accordion>
<Accordion title="停用字段会发生什么?">
* 该字段会在界面中被隐藏
* 现有数据将被保留
* 您仍可通过 API 访问该字段
* 现有关联将保留,但您无法创建新的关联
* 您可以稍后重新启用该字段
</Accordion>
<Accordion title="我可以将字段设为必填吗?">
目前,您无法将自定义字段设为必填。 所有字段都接受空值。 您可以使用工作流在字段为空时发送警报或阻止操作,以强制执行必填字段。
</Accordion>
<Accordion title="唯一与必填有什么区别?">
* **唯一**:任意两条记录在该字段中的值不能相同
* **必填**:该字段必须有值(目前不支持自定义字段)
</Accordion>
<Accordion title="我可以创建公式字段吗?">
公式字段在 **H2 2026** 中。 同时,您可以使用工作流程来自动计算和更新字段值。
</Accordion>
<Accordion title="我可以在我的对象中使用嵌套字段吗?">
嵌套字段将于 **H2 2026**。 目前,您可以使用工作流程从相关对象中获取字段值。 例如,要在人员记录上显示公司的行业信息,可以在人员自定义字段中创建一个自定义字段,并使用工作流程来同步该值。
</Accordion>
<Accordion title="我可以在对象中重新排序字段吗?">
是的,前往设置 -> 数据模型 → 您选择的对象-> 布局,并点击 **自定义记录页面**。 如果此按钮被禁用,您必须创建记录。
</Accordion>
</AccordionGroup>
## 关系
<AccordionGroup>
<Accordion title="我可以创建指向同一对象的关系吗?">
是! 支持自引用关系,并建议在账户层级等用例中使用。 例如,从"公司"到"公司"创建关系,以跟踪父/子账户。
</Accordion>
<Accordion title="我可以创建多对多关系吗?">
多对多的关系出现在 **H2 2026**。 目前,可以创建一个中间对象,建立两个一对多关系作为替代方案。
例如,要关联人员和项目(多对多),请创建一个 "项目分配" 对象,其中包含:
* 到人员的关系(多个分配 → 一名人员)
* 到项目的关系(多个分配 → 一个项目)
</Accordion>
<Accordion title="什么是指向多个对象类型的关系(Morph 关系)?">
这使单个对象能够通过一个字段关联到多种不同的对象类型。 例如,备注可以同时附加到人员、公司和商机。
每条备注同时关联到一名人员、一家公司和一个商机。
在 [关系字段](/l/zh/user-guide/data-model/capabilities/relation-fields) 中了解更多。
</Accordion>
<Accordion title="同一对对象之间可以有多个关系吗?">
可以,您可以在同一对对象之间创建多个关系。 例如,一个公司可以同时与人员建立 "主要联系人" 和 "账单联系人" 两个关系。
</Accordion>
<Accordion title="当我删除一条记录时,关系会发生什么变化?">
当您删除记录时,相关记录中的关系链接会被移除。 相关记录本身不会被删除。
</Accordion>
<Accordion title="我可以创建循环关系吗?">
尽管在技术上可行,循环关系(A → B → C → A)应尽量避免,因为它们可能导致混淆并带来潜在的性能问题。
</Accordion>
</AccordionGroup>
## 访问权限
<AccordionGroup>
<Accordion title="我在哪里可以查看和编辑我的数据模型?">
前往 **设置 → 数据模型** 查看并编辑您的所有对象和字段。
</Accordion>
<Accordion title="为什么我在设置中看不到数据模型?">
请联系您的工作区管理员。 数据模型访问通常仅限于管理员。
</Accordion>
</AccordionGroup>
## 数据管理
<AccordionGroup>
<Accordion title="记录数量是否有限制?">
记录数量没有硬性上限。 但是,非常大的数据集可能会影响某些视图中的性能。 使用筛选器和视图高效管理大型数据集。
</Accordion>
<Accordion title="我可以将数据导入自定义对象吗?">
是的,您可以将 CSV 数据导入任何对象,包括自定义对象。 导入过程支持自定义字段的映射。 参见 [如何准备 CSV 文件](/l/zh/user-guide/data-migration/how-tos/prepare-your-csv-files)。
</Accordion>
<Accordion title="我可以导出我的数据模型配置吗?">
目前,数据模型配置没有内置导出功能。 如果您需要在工作区之间迁移数据模型,请联系支持团队。
</Accordion>
<Accordion title="单个对象可以有多少字段?">
单个对象可以拥有的最大字段数为 1600个字段,按Postgres 限制, 包括现有字段和删除字段。 请注意,如果达到1600个字段的上限,那么20个不会修复您的工作空间,因为它属于我们的公平使用政策。
</Accordion>
</AccordionGroup>
## 需要更多帮助吗?
查看我们的 [实施服务](/l/zh/user-guide/getting-started/capabilities/implementation-services) 以获取复杂数据模型设计方面的帮助。