结论是有条件的:只有当每个栏目都只是同一份主记录的“视图”,而不是各自保存一份副本时,单一来源才成立。若某个栏目需要独立排序、独立权限或独立发布节奏,强行共用一条记录反而会制造新的冲突,这时更合理的做法是拆成主记录加派生记录,并用明确规则绑定二者。
把同一篇内容放进新闻、专题、作者页或标签页,表面上是“多处展示”,实际可能对应两类需求。第一类是纯展示:标题、摘要、正文、发布时间完全一致,差别只在列表的筛选条件和排列顺序。第二类是运营需求:某个栏目要改标题措辞、换头图、设置不同的发布时间,甚至只对部分用户可见。
第一类适合单一来源。做法是让栏目只保存引用关系,例如用内容ID关联,列表渲染时读取主记录字段。这样修改正文只需改一处,所有引用位置同步变化。第二类不适合共用同一份字段,因为任何一次局部修改都会污染其他栏目,最终没人说得清哪个版本才是准的。
判断依据可以看三个信号:同一内容在不同栏目是否出现过不一致的标题或摘要;编辑是否要求“只改这个栏目”;下架某个栏目时是否希望其他栏目继续展示。只要有一个答案是肯定的,就说明这份内容已经承担了多个独立角色,不能再当作单一来源处理。
小样本阶段,手动把内容挂到几个栏目下通常不会出问题。内容量上来之后,常见做法是让标签页或专题页自动聚合:只要内容带有某个标签,就自动出现在对应列表里。这时“单一来源”的假设开始失效。
假设一个站点规定:主记录只保留一个主栏目,标签由编辑手动添加。初期几十篇内容时,编辑能记住哪些标签该加、哪些不该加。内容到几百篇后,会出现同一主题被拆成多个近义标签、旧标签无人清理、某篇内容因标签误加而进入不相关列表等情况。此时问题不在正文副本,而在归类关系本身失去了唯一入口。
这个反例说明:单一来源不只针对正文字段,也针对分类和标签关系。如果分类关系可以绕过主记录被任意添加,那么即使正文只有一份,聚合结果仍会分叉。反过来,如果业务确实需要多套并行的归类体系,就不应假装它们共用一个来源,而应给每套体系指定各自的维护责任人和更新规则。
下一步动作不是立刻改数据库,而是先导出一张映射表,列出每条内容当前出现在哪些栏目、由谁维护、各栏目的标题和摘要是否一致。映射表可以用表格工具完成,字段至少包括内容标识、栏目标识、展示标题、展示摘要、最后修改时间和修改人。
导出后按内容标识分组。同一标识下如果展示标题和摘要完全一致,且修改人相同,这组可以优先合并为引用关系;如果字段存在差异,先记录差异原因,再判断是保留派生记录还是统一到主记录。映射表本身不解决冲突,但它把“哪些地方已经分叉”变成可核对的清单,后续合并或拆分才有依据。
完成映射后,选一组差异最小的内容做试点:把栏目改为只读引用,观察列表页、详情页和站内搜索是否仍能取到正确字段。若试点期间出现某栏目无法单独调整标题的情况,说明该栏目需要派生记录,应在规则中明确哪些字段允许覆盖、覆盖后以哪个版本为准。这个结果会直接决定下一步是扩大合并范围,还是保留双轨结构。
这些条件的作用是让“单一来源”有明确适用范围:公共字段共用一份,栏目差异显式声明。只要差异没有被记录,它就会以不一致的形式重新出现,届时再靠人工比对成本更高。