[{"data":1,"prerenderedAt":275},["ShallowReactive",2],{"docs-doc-\u002Fdocs\u002Fmechanism\u002Fpublish":3,"docs-live-paths":224},{"id":4,"title":5,"body":6,"description":211,"extension":212,"meta":213,"navigation":219,"path":220,"seo":221,"stem":222,"__hash__":223},"content\u002Fdocs\u002Fmechanism\u002Fpublish.md","模型发布护栏：为什么发布才生效、删除为何不可恢复",{"type":7,"value":8,"toc":201},"minimark",[9,21,25,35,60,65,69,72,83,99,102,106,113,121,124,127,130,157,160,166,172,178,181],[10,11,12],"blockquote",{},[13,14,15,16,20],"p",{},"本文解决什么问题：用衍数搭系统时，改模型和「系统真的变了」之间隔着一道叫",[17,18,19],"strong",{},"发布","的门。很多人困惑「我明明保存了为什么没生效」「删个字段为什么系统拦我」。这篇把模型从定义到生效的完整路径和护栏讲清楚。",[22,23,24],"h2",{"id":24},"一句话机制",[13,26,27,28,31,32,34],{},"数据模型的一生走 ",[17,29,30],{},"草稿 → 预览 → 发布"," 三个阶段，只有",[17,33,19],{},"会让底层结构真正改变：",[36,37,38,45,55],"ul",{},[39,40,41,44],"li",{},[17,42,43],{},"草稿","：模型定义还没落库——改多少遍都不影响系统；",[39,46,47,50,51,54],{},[17,48,49],{},"预览","：提交前平台先生成一份「建表结构预览」，只读展示将要产生的结构，",[17,52,53],{},"这一步不落库、完全可逆","；",[39,56,57,59],{},[17,58,19],{},"：确认后真正落库，数据表、随之而来的接口与页面能力一并生效。",[10,61,62],{},[13,63,64],{},"所以「改了没生效」多半不是 bug，而是改动还停在草稿、没有发布。发布前的预览阶段，是您反复检查结构的窗口——越早发现要改的，代价越小。",[22,66,68],{"id":67},"为什么预览和发布必须分开","为什么「预览」和「发布」必须分开",[13,70,71],{},"传统开发里，改数据库结构往往是「直接执行」——错了就回滚或手工修，风险都压在一次操作上。",[13,73,74,75,78,79,82],{},"衍数把「",[17,76,77],{},"看清要变成什么样","」和「",[17,80,81],{},"真的变","」拆成两步，中间留一个人工确认闸：",[36,84,85,92],{},[39,86,87,88,91],{},"预览是",[17,89,90],{},"只读","的——它展示的是「如果发布会生成什么」，不碰任何真实数据，不满意直接返回改；",[39,93,94,95,98],{},"发布才是",[17,96,97],{},"分界点","——真正改变系统结构，需要管理员权限并二次确认。",[13,100,101],{},"对实施来说，预览这道闸最值钱：一份新模型或一次结构调整，先在预览里反复核对字段、类型、关联，比发布后发现问题再返工划算得多。",[22,103,105],{"id":104},"破坏性变更为什么删除字段不可恢复","破坏性变更：为什么删除字段不可恢复",[13,107,108,109,112],{},"发布并不都是「新增」，也可能是",[17,110,111],{},"删除字段 \u002F 修改字段类型","这类破坏性变更。这里有一条硬规则：",[10,114,115],{},[13,116,117,120],{},[17,118,119],{},"删除字段，会将该字段下的历史业务数据一并移除且不可恢复","——平台按字段真实删除，不留影子。",[13,122,123],{},"因此正式环境的删除类操作，会要求管理员权限并二次确认；动手前请先确认影响范围、做好备份。平台宁可让您多确认一次，也不让一次误删带走历史数据。测试\u002F演示环境则可放心操作——那里的数据可以重置。",[22,125,126],{"id":126},"发布后发生了什么",[13,128,129],{},"一次成功的发布，不止是「建了一张表」：",[36,131,132,145],{},[39,133,134,135,138,139,144],{},"模型的",[17,136,137],{},"列表、查询、表单、详情","基本自动可用（详见",[140,141,143],"a",{"href":142},"\u002Fdocs\u002Fguide\u002Fmodel-gen","从模型到页面","）；",[39,146,147,148,152,153,156],{},"数据在创建时被自动记录归属信息（由谁、在哪个部门创建）——这正是",[140,149,151],{"href":150},"\u002Fdocs\u002Fmechanism\u002Fpermission","权限体系","里「按部门\u002F按人过滤数据行」能零配置生效的基础：",[17,154,155],{},"发布一个模型，就等于同时为它备好了行级数据权限的依据","。",[22,158,159],{"id":159},"常见疑问",[13,161,162,165],{},[17,163,164],{},"在演示环境里删除字段，会不会影响正式系统？","\n不会。演示环境是独立的体验沙箱（数据可重置），操作不触碰正式系统的结构。正式环境里的结构变更始终需要确认。",[13,167,168,171],{},[17,169,170],{},"发布错了能回退吗？","\n新增类的发布相对安全；删除字段 \u002F 改类型这类破坏性变更不可自动恢复，所以依赖「预览反复看 + 二次确认 + 提前备份」这三件事在前置环节把关。涉及数据迁移的大改动，建议在测试环境完整演练后再上正式。",[13,173,174,177],{},[17,175,176],{},"是不是每个模型都一定要发布才能用？","\n是——发布才是模型对系统「可见」的分界。停留在草稿的模型不产生真实能力。",[22,179,180],{"id":180},"相关阅读",[36,182,183,189,196],{},[39,184,185,186],{},"从零建模型的完整步骤 → ",[140,187,188],{"href":142},"定义模型并生成页面",[39,190,191,192],{},"模型的定位与边界 → ",[140,193,195],{"href":194},"\u002Fdocs\u002Fconcepts\u002Fcore","动态数据模型 · 衍枢",[39,197,198,199],{},"数据行级权限怎么靠模型自动生效 → ",[140,200,151],{"href":150},{"title":202,"searchDepth":203,"depth":203,"links":204},"",2,[205,206,207,208,209,210],{"id":24,"depth":203,"text":24},{"id":67,"depth":203,"text":68},{"id":104,"depth":203,"text":105},{"id":126,"depth":203,"text":126},{"id":159,"depth":203,"text":159},{"id":180,"depth":203,"text":180},"「草稿 → 预览 → 发布」是平台对结构变更设的三道闸。本文讲发布为什么是分界点、预览先行在防什么、以及删除字段为何不可恢复。","md",{"audience":214,"type":215,"section":216,"pr_order":203,"role":217,"duration":218},"public","mechanism","框架机制与边界","实施搭建者 \u002F 系统管理员","约 4 分钟",true,"\u002Fdocs\u002Fmechanism\u002Fpublish",{"title":5,"description":211},"docs\u002Fmechanism\u002Fpublish","FNT7yJO087o5PqXN8XM7y13gcTunmjabGPz8GeVoEno",[225,227,229,230,232,234,236,238,240,242,244,246,248,250,251,253,255,257,259,261,263,265,266,267,269,271,273],{"path":226},"\u002Fdocs\u002Fconcepts\u002Fai",{"path":228},"\u002Fdocs\u002Fconcepts\u002Fai-team",{"path":194},{"path":231},"\u002Fdocs\u002Fconcepts\u002Fflux",{"path":233},"\u002Fdocs\u002Fconcepts\u002Fmetrics",{"path":235},"\u002Fdocs\u002Fconcepts\u002Fview",{"path":237},"\u002Fdocs\u002Fdemo-center",{"path":239},"\u002Fdocs\u002Fdeploy\u002Foverview",{"path":241},"\u002Fdocs\u002Ffaq",{"path":243},"\u002Fdocs\u002Fglossary",{"path":245},"\u002Fdocs\u002Fguide\u002Fai-kb",{"path":247},"\u002Fdocs\u002Fguide\u002Fcrud",{"path":249},"\u002Fdocs\u002Fguide\u002Fdb-connect",{"path":142},{"path":252},"\u002Fdocs\u002Fintro\u002Fframeworks",{"path":254},"\u002Fdocs\u002Fintro\u002Foverview",{"path":256},"\u002Fdocs\u002Fintro\u002Fvalue",{"path":258},"\u002Fdocs\u002Fintro\u002Fwhy",{"path":260},"\u002Fdocs\u002Fmechanism\u002Fai-employee-task",{"path":262},"\u002Fdocs\u002Fmechanism\u002Fdata-flux",{"path":264},"\u002Fdocs\u002Fmechanism\u002Fmetrics-contract",{"path":150},{"path":220},{"path":268},"\u002Fdocs\u002Fquickstart\u002Fclone-template",{"path":270},"\u002Fdocs\u002Fquickstart\u002Fdemo-30s",{"path":272},"\u002Fdocs\u002Fquickstart\u002Ffive-minutes",{"path":274},"\u002Fdocs\u002Fsystem\u002Foverview",1788586879703]