结论先说:如果同一篇内容要同时出现在多个栏目,维护单一来源的可行做法是“一个主记录 + 多个展示位置”,而不是在每个栏目各存一份正文。主记录负责标题、正文、图片和更新时间,栏目只保存引用关系与排序信息。这样改一次正文,所有栏目同步变化;代价是栏目编辑不能单独改标题或正文,只能改摘要、排序和栏目内标签。若你的编辑流程要求不同栏目使用不同标题、不同正文或不同审核状态,这个结论就会失效,应改用“主记录 + 派生副本”,并明确副本的回写规则。
很多维护问题不是技术问题,而是把三种情况混在一起:
判断标准很简单:如果两个栏目里的正文需要独立修改,且修改后不要求另一边同步,那它就不是单一来源问题,而是内容复用问题。反过来,只要正文必须一致,就应把正文抽出主记录。
在通化网站制作的实际项目中,常见结构可以拆成三层:
这样做之后,一个实际动作是:编辑在后台修改主记录正文并保存,系统按引用关系更新所有栏目入口。结果是栏目页摘要可能仍是旧摘要,因为摘要属于引用层字段。下一步应检查摘要是否也需要同步,若需要,就把摘要也纳入主记录,或设置“摘要为空时自动截取正文”。这个检查会直接影响你后续要不要为每个栏目单独维护摘要。
假设“新闻”栏目要求先审后发,“知识库”栏目允许编辑直接发布。如果两者共用一条主记录和一个发布状态,那么知识库编辑一发布,新闻栏目也会跟着可见,审核就失去意义。这就是单一来源失效的典型条件。
此时不要硬把发布状态合并,而应把状态拆到引用层:主记录保存内容版本,引用关系保存“该栏目是否已审核、是否可见”。编辑修改主记录后,两个栏目的引用都标记为“待确认”,但只有新闻栏目需要审核才能重新可见,知识库可以按自己的规则放行。代价是维护复杂度上升,你需要能查看“哪些栏目引用了这条记录、各自处于什么状态”。
遇到“改了正文但某个栏目还是旧内容”,不要直接归因于缓存。可以按下面顺序收集证据:
如果主记录已更新、栏目仍显示旧正文,通常是独立副本;如果正文已更新、列表页摘要仍旧,通常是引用层摘要未同步;如果正文和摘要都新、但栏目入口不可见,通常是栏目可见状态未放行。这三种原因对应三种下一步动作,不能都用“清缓存”处理。请求量或抓取量暂时归零,也不能单独证明同步成功,它还可能来自访问波动、抓取调度变化或页面暂时不可达。
一个可执行的假设例子:某通化网站制作项目有“新闻”和“案例”两个栏目,同一篇客户故事要同时出现。若规则是“正文必须一致,标题可以不同”,那么主记录保存正文和主标题,引用层保存栏目展示标题与排序。编辑改正文后,两个栏目正文同步,标题各自保留。若规则是“正文可以不同”,则不应共用主记录,而应建立关联字段,把两篇内容标记为同一主题,避免误删或重复维护。
下一步动作很具体:列出所有会重复出现的栏目,逐条标注“正文是否必须一致、标题是否必须一致、发布状态是否必须一致”。三项都一致的,合并为主记录加引用;任意一项不一致的,拆出引用层字段或派生副本。这个清单完成后,再决定后台表单和权限,否则先做界面很容易把独立字段藏进正文里,后面仍然要返工。