本文说明 Ceum 的各个部分如何彼此关联,让你在整个应用中看到的连接与筛选变得合理。这幅图景刻意保持精简:少数几种核心条目类型、一张松散的连接网(客户、项目与任务各自都能关联到其他许多条目;发票、交易、订阅、时间记录与文档则挂在它们之下),再加上一层你可以自行定义的连接。
核心条目类型
- 客户 ——你为其工作的个人或组织。
- 项目 ——成批的工作,每个可附加到任意数量的客户,或保持未附加。
- 任务 ——工作的单位,每个可附加到任意数量的项目,或保持未附加。一个任务也可以是另一个任务的子任务。
- 发票 ——单一客户所欠的金额;可选择性地绑定到一个项目。
- 交易 ——单笔收入与支出条目;可选择性地绑定到一个客户、项目和/或任务。
- 订阅 ——周期性支出;它们各自独立。
- 时间记录 ——跟踪的工作时间,每笔可附加到任意数量的任务,或保持独立。
- 文档 ——Markdown 笔记,每份可附加到任意数量的客户与项目,或保持未附加。
条目之间如何链接
数个核心连接让一个条目能够一次关联到许多其他条目,因此你可以为真实的自由职业工作建模——同一份工作会服务于不止一个地方:
- 一个项目可以同时属于数个客户——例如两个客户共同分摊的共享聘约——或不属于任何客户(一个浮动、与客户无关的项目)。
- 一个任务可以同时属于数个项目——当一份工作同时供给不止一个合作案时很有用——或不属于任何项目(一个浮动、一次性的待办事项)。
- 一笔时间记录可以同时计入数个任务,或独立存在而不属于任何任务。
- 一份文档可以同时连接到数个客户与数个项目,或不连接到任何项目。
这些之中的每一项都是一组连接,而非单一插槽:按需要添加任意多个、移除其中任何一个,且顺序不拘。在整个应用中,这些集合会以表单上可移除的标签片,以及表格中可点击的列表(含“+N”溢出)的形式出现。
少数连接刻意保持单一,因为现实世界中的关系是一对一的:一张发票只开给确切一个客户(并可选择性地对应一个项目),而一笔交易最多连接到一个客户、一个项目与一个任务。
各部分如何连接
这张网之所以松散,是因为几乎每个连接都是选填的:
- 一个项目可以没有客户——适用于内部工作。
- 一个任务可以没有项目——适用于一次性的待办事项。
- 一笔时间记录可以没有任务——适用于未绑定到特定工作的时间。
- 一张发票或一笔交易可以没有项目,或完全没有客户。
当你确实设定了连接时,删除事物会遵循合理的规则。由于项目、任务与时间记录现在以多对多方式连接,删除连接的一端只会移除该连接,而不会移除另一端的事物:
- 删除一个客户会把该客户从它所在的任何项目中移除;项目本身保留(连接到其他客户的项目会保留那些客户;剩下没有客户的项目则变为浮动)。它也会解除任何指向该客户的发票、交易与文档的连接。
- 删除一个项目会把该项目从它所在的任何任务中移除;任务本身保留(连接到其他项目的任务会保留那些项目;剩下没有项目的任务则变为浮动)。它也会解除任何指向该项目的发票、文档与交易的连接。
- 删除一个任务会把该任务从它所在的任何时间记录中移除;时间记录本身保留,且你的跟踪时间总计不受影响(见下文)。它也会解除任何指向该任务的交易的连接。
为什么把一条时间记录关联到多个任务不会虚增总计
由于一笔时间记录可以计入数个任务,这点值得明确说明:你的跟踪时间总计绝不会重复计算。 一笔时间记录永远是一笔、一段时长的记录。各项总计——“今日总计”、报告上某个任务的跟踪时间——都只计算每笔记录确切一次,无论它连接到多少个任务。
数字唯一能合理地加总超过总计的地方,是按任务或项目的明细:一笔连接到两个任务的记录,会将其完整时长计入每个任务的分桶,因此这些分桶的加总可能高于整体总计。这是刻意设计的——明细回答的是“有多少时间触及了每个任务”,而非“这些切片如何划分总计”。
这会出现在哪里
- 每个列表页面上的筛选让你按这些连接缩小范围——按项目筛选任务、按客户筛选交易,依此类推。一个属于数个项目的任务,会符合其中任一个项目的筛选。请参阅筛选与排序。
- 详情页面会并列显示相关项目。客户的页面会列出其项目;项目的页面会列出其任务;发票会显示它所属的客户。
- 表格会内嵌显示连接的实体。当一个条目可以有数个连接时——项目的客户、任务的项目、时间记录的任务——该列会将每一个列为可点击的标签片,并收起成可点击以查看其余的“+N”。
- 批量编辑使用相同的连接——一次重新指派交易的客户、项目或任务。
你可以扩展的部分:明确关系
在内置层级之外,Ceum 让你定义自己的、介于两个同种条目之间的有向连接:项目对项目,以及任务对任务。你可通过实体关系管理这些连接,并在关系类型之下选择可用的连接种类。
这种明确连接仅适用于项目与任务,且与上述内置的多对多连接是分开的:它连接两个同种条目(项目↔项目、任务↔任务),而内置连接连接的是不同种类(项目↔客户、任务↔项目、时间记录↔任务)。
显示 ID
每个条目都会获得一个像 C-7、P-12 或 T-205 的 ID。你可以在常规设置之下更改字母前缀。这些 ID 是稳定的、绝不重复使用,且永远按数字顺序排序。
提示与边界情况
- 未附加的条目是一等公民。 Ceum 绝不强制你把项目附加到客户,或把任务附加到项目。列表与筛选都支持“无项目”/“无客户”/“无任务”选项。
- 多对多不会重复计算时间。 将一笔时间记录连接到数个任务绝不会夸大你的总计;只有按任务或按项目的明细才可能加总得更高,而那是刻意设计的。
- 一个连接或多个连接——由你决定。 多对多连接在只有确切一个条目时也运作良好(只有单一客户的项目,行为就跟以前一样)。当你需要更多时,容纳更多的能力随时可用。
- 没有共享工作区。 Ceum 只属于你;请参阅工作区与用户。
- 同种连接使用关系类型。 若要连接两个项目或两个任务,请在它们之间定义一个关系;内置的多对多连接是用来连接不同种类的(任务连到它的项目、项目连到它的客户)。