有条件的结论是:只要这些栏目共用同一个内容实体,并且各栏目只通过引用关系读取它,就可以维护单一来源;一旦某个栏目需要独立排序、独立权限或独立生命周期,强行单一来源反而会让维护更复杂。判断的关键不是栏目数量,而是这条内容是否真的只有一个生命周期。
同一内容进入多个栏目,常见两种情况。第一种是内容实体只有一个,比如一篇政策解读同时出现在“政策法规”和“企业服务”两个栏目,标题、正文、附件都相同,只是展示位置不同。第二种是同一份素材被拆成多条记录,比如同一场活动在“新闻动态”里是报道,在“活动预告”里是报名信息,字段、排序依据和过期时间都不一样。
第一种适合单一来源,做法是保留一条主记录,其他栏目只存引用标识,不复制正文。第二种不适合硬合并,因为两条记录的服务对象不同,合并后反而要在一个页面里塞进两套逻辑。你可以用一个简单问题区分:如果主记录被删除,另一个栏目是否还应该继续存在?答案是“不应该”,说明它只是引用;答案是“应该”,说明它是独立内容。
假设一个湛江本地企业的站点,把“行业资讯”和“解决方案”两个栏目都指向同一批文章。维护单一来源时,实际动作是:在内容模型里保留一个主表,记录标题、正文、发布时间和状态;栏目关系表只存主记录 ID 和栏目 ID。编辑修改主记录后,两个栏目同时更新;下架主记录时,两个栏目同时消失。
这个动作会直接影响下一步:如果两个栏目对排序要求不同,你需要在栏目关系表里增加“栏目内排序”字段,而不是复制正文。如果两个栏目对摘要长度要求不同,摘要也应放在关系表里,正文继续共用。这样做的结果是,正文只维护一处,展示差异被限制在关系层,后续排查问题时可以快速判断是内容错了还是展示规则错了。
反过来,如果发现修改主记录后某个栏目没有同步变化,先检查该栏目是否真的在读主记录,而不是在发布时把正文复制进了自己的表。复制正文的栏目越多,单一来源越难维持,因为每次修改都要逐个栏目核对。
一个反例是:两个栏目虽然展示同一篇内容,但其中一个栏目需要独立的历史版本。比如“最新公告”只展示当前有效版本,“历史公告”需要保留每次修改前的正文。这时如果只保留一条主记录,历史栏目就无法还原旧版本。合理的做法是主记录保留当前版本,另建版本表记录每次变更,历史栏目引用版本记录,而不是引用主记录。
另一个失效条件是权限分离。如果“内部参考”栏目只对登录用户可见,而“公开资讯”栏目对所有人可见,同一篇内容在两个栏目里的可见范围不同。此时单一来源仍然可行,但权限判断必须放在读取环节,不能靠复制内容到不同表来隔离。如果系统不支持读取时鉴权,复制反而更直接,但你要接受维护成本上升。
旧内容、旧系统或旧合作关系需要退出时,不要直接删除主记录。先列出该内容还被哪些栏目引用,再判断每个引用是“仍然需要展示”还是“只是历史留痕”。仍然需要展示的,保留引用并确认主记录状态正常;只是历史留痕的,可以把引用转为归档状态,页面不再出现在栏目列表,但直接链接仍可访问。
如果某个栏目整体要退出,但其中部分内容仍有价值,动作是先把这些内容的主记录迁移到新栏目关系,再停用旧栏目。迁移后检查新栏目里的排序、摘要和权限是否符合预期。这样做的结果是,旧栏目可以安全下线,有价值的内容不会因为栏目退出而丢失,也不会在多个地方留下无人维护的副本。
下一步动作不是马上改系统,而是导出当前所有栏目的内容引用关系,标出哪些是主记录、哪些是复制记录、哪些是独立记录。盘点完成后,你会得到一张迁移优先级清单:复制记录最多、修改最频繁的内容优先合并;独立生命周期明确的内容保持分开;旧栏目中仍有价值的内容先迁移再停用。这个顺序会影响后续开发排期,也能避免在合并过程中把本来独立的内容强行塞进同一来源。