有条件的结论是:只要每个栏目都只保存指向同一份内容的引用,而不是各自复制一份正文,单一来源就能在多个栏目入口下维持。这个结论在样本量小、栏目关系简单时几乎总成立,但一旦栏目对字段、排序或权限提出不同要求,它就会失效,此时应改为“一份主内容加多个视图”,而不是继续强行共用同一条记录。
多栏目挂载的常见做法有两种。第一种是内容只存一次,栏目通过关联表引用它,栏目页只负责决定显示哪些条目、以什么顺序显示。第二种是每个栏目各存一份,靠人工同步。第一种在数量少时维护成本低,但它的前提是各栏目对这份内容的要求一致:标题、摘要、正文、发布时间、状态字段都相同。
判断是否满足前提,可以看三个信号:各栏目是否使用同一套字段;同一内容在不同栏目是否需要不同标题或摘要;编辑是否能在一个栏目改动后接受其他栏目同步变化。三者都成立,引用式单一来源可行;任意一项不成立,就该考虑视图方案。
假设站点有“行业资讯”和“案例库”两个栏目,早期都引用同一份内容记录,运行正常。后来案例库需要为该内容补充客户所属行业、项目周期、适用规模等字段,而行业资讯不需要这些字段,也不应显示它们。如果继续共用同一条记录,就会出现两种坏结果:要么案例库字段被塞进主内容,污染资讯栏目的展示;要么编辑在案例库填写的字段无处存放,只能另建一条记录,单一来源名存实亡。
这个反例说明,单一来源的边界不是“内容是否相同”,而是“各栏目对这份内容的结构化要求是否相同”。当栏目开始承担不同的信息职责,共用一条记录就从省事变成长久负担。
可行的下一步动作是:保留一份主内容,存放所有栏目共有的字段;为有额外要求的栏目建立视图层,只存该栏目特有的字段和排序规则,通过内容标识关联主内容。执行时先做一次字段盘点,把共有字段和栏目专有字段分列,再决定哪些栏目继续直接引用、哪些改走视图。
这个动作的结果会直接影响后续维护方式:共有字段只需改一次,栏目专有字段各自维护,编辑不再需要跨栏目复制正文。代价是查询和渲染逻辑变复杂,栏目页需要多一层关联读取。若站点规模很小、栏目字段完全一致,直接引用仍更省事;一旦出现第二个有专有字段的栏目,视图方案通常更稳。
这三个条件中任意一个不满足,先不要迁移,否则只是把复制粘贴的问题换成了关联错乱的问题。
可以用一个假设例子做检查:取一条同时出现在三个栏目的内容,修改主内容中的一个共有字段,观察三个栏目入口是否都反映该变化;再修改某栏目专有字段,确认其他栏目不受影响。若第一次修改只在一个入口生效,说明仍有副本存在;若第二次修改影响了其他栏目,说明专有字段被错误地放进了共有层。
这个检查不依赖具体工具,只依赖字段归属是否清晰。它给出的下一步是:把检查中暴露的越界字段重新归类,再决定是并入主内容还是移入视图。单一来源能否长期维持,取决于这次归类是否被当作规则固定下来,而不是一次性清理。