[{"data":1,"prerenderedAt":259},["ShallowReactive",2],{"docs-doc-\u002Fdocs\u002Fconcepts\u002Fcore":3,"docs-live-paths":208},{"id":4,"title":5,"body":6,"description":195,"extension":196,"meta":197,"navigation":203,"path":204,"seo":205,"stem":206,"__hash__":207},"content\u002Fdocs\u002Fconcepts\u002Fcore.md","动态数据模型 · 衍枢",{"type":7,"value":8,"toc":182},"minimark",[9,16,20,31,34,37,48,51,55,58,80,84,87,107,116,119,122,142,145,151,163,166],[10,11,12],"blockquote",{},[13,14,15],"p",{},"本文解决什么问题：传统上，一个业务模块需要经历建表、写接口、做页面、配权限四道工序——每增加一个需求就伴随一次开发周期。衍枢将「定义一份数据模型」作为单一输入，后续工序尽量自动完成：交付更快、重复更少，实施成本随之降低。",[17,18,19],"h2",{"id":19},"一句话定义",[13,21,22,26,27,30],{},[23,24,25],"strong",{},"衍枢（Derive-Core）"," 是衍数的后台服务基座。它最核心的能力是",[23,28,29],{},"动态模型","：定义一份数据模型，平台据此生成建表结构、读写接口与管理页面，并统一承担鉴权、限流、路由等公共能力。",[17,32,33],{"id":33},"它想解决什么问题",[13,35,36],{},"传统开发里，一个业务模块要经历：建表 → 写接口 → 写管理页面 → 配权限 → 联调。五个环节大多是重复劳动。衍枢把「数据定义」作为单一输入，后续环节尽可能自动化：",[38,39,44],"pre",{"className":40,"code":42,"language":43},[41],"language-text","定义模型（字段 \u002F 类型 \u002F 关系 \u002F 校验）\n   └─ 生成建表结构（先给预览，确认才建）\n       ├─ 生成读写接口\n       ├─ 生成管理页面（列表 \u002F 表单 \u002F 详情）\n       └─ 纳入统一鉴权 \u002F 限流 \u002F 审计\n","text",[45,46,42],"code",{"__ignoreMap":47},"",[17,49,50],{"id":50},"关键概念",[52,53,54],"h3",{"id":54},"模型与字段",[13,56,57],{},"模型描述一类业务数据。每个字段有名字、类型与约束：",[59,60,61,68,74],"ul",{},[62,63,64,67],"li",{},[23,65,66],{},"字段类型","：文本、数字、日期、下拉（枚举）、关联引用、金额等。",[62,69,70,73],{},[23,71,72],{},"关联","：一条记录可以引用另一条数据（例如「订单」引用「客户」），界面上会显示被引用的名称而非一串 ID。",[62,75,76,79],{},[23,77,78],{},"校验","：哪些字段必填、格式如何，在模型层就定义好，前端与后端共用同一套规则。",[52,81,83],{"id":82},"ddl-预览与发布","DDL 预览与发布",[13,85,86],{},"衍枢对「真正改变数据结构」的操作特别谨慎：",[59,88,89,96],{},[62,90,91,92,95],{},"定义模型时先生成",[23,93,94],{},"建表结构预览","（只读，不落库）——先看要建的表长什么样。",[62,97,98,99,102,103,106],{},"确认无误后",[23,100,101],{},"发布","才真正落库。发布会直接变更底层数据结构——尤其是",[23,104,105],{},"删除字段 \u002F 修改字段类型","这类破坏性变更，请先在预览里充分验证；正式发布需要管理员权限并二次确认。",[10,108,109],{},[13,110,111,112,115],{},"⚠️ 破坏性变更：",[23,113,114],{},"删除字段","会将该字段下的历史业务数据一并移除且不可恢复（平台按字段真实删除）。正式环境执行删除类操作前，请先确认影响范围并做好备份。",[13,117,118],{},"在测试\u002F演示环境可放心操作（该环境数据可重置）；正式系统上的「发布」始终需要确认。",[52,120,121],{"id":121},"统一底座",[59,123,124,130,136],{},[62,125,126,129],{},[23,127,128],{},"鉴权与权限","：谁能看\u002F改哪些数据，按角色与按钮粒度控制，全平台一致。",[62,131,132,135],{},[23,133,134],{},"限流与审计","：接口有统一的限流保护；关键操作留审计记录，可回溯「谁在何时做了什么」。",[62,137,138,141],{},[23,139,140],{},"路由","：服务不直接对外，统一经网关接入。",[17,143,144],{"id":144},"常见疑问",[13,146,147,150],{},[23,148,149],{},"是不是所有功能都只靠「定义模型」？","\n不是。模型的自动化覆盖「数据层的常规读写与页面」，复杂业务（状态流转、金额对账、跨系统集成）仍然需要在其上按平台提供的扩展方式实现——但它不再需要从建表和 CRUD 开始。",[13,152,153,156,157,162],{},[23,154,155],{},"模型和视图是什么关系？","\n模型是「数据长什么样」，视图是「界面长什么样」。一个模型可以有不同的视图服务于不同角色与场景。想了解视图侧，见",[158,159,161],"a",{"href":160},"\u002Fdocs\u002Fconcepts\u002Fview","核心概念 · 衍景","。",[17,164,165],{"id":165},"相关阅读",[59,167,168,175],{},[62,169,170,171],{},"想看懂整体主线 → ",[158,172,174],{"href":173},"\u002Fdocs\u002Fquickstart\u002Ffive-minutes","五分钟快速上手",[62,176,177,178],{},"想动手配一个管理列表 → ",[158,179,181],{"href":180},"\u002Fdocs\u002Fguide\u002Fcrud","使用指南 · 配置通用管理列表",{"title":47,"searchDepth":183,"depth":183,"links":184},2,[185,186,187,193,194],{"id":19,"depth":183,"text":19},{"id":33,"depth":183,"text":33},{"id":50,"depth":183,"text":50,"children":188},[189,191,192],{"id":54,"depth":190,"text":54},3,{"id":82,"depth":190,"text":83},{"id":121,"depth":190,"text":121},{"id":144,"depth":183,"text":144},{"id":165,"depth":183,"text":165},"「定义模型，接口与页面自动生成」是怎么回事——动态模型引擎、DDL 预览、发布与它背后的边界。","md",{"audience":198,"type":199,"section":200,"pr_order":183,"role":201,"duration":202},"public","concept","核心概念","实施搭建者","约 4 分钟",true,"\u002Fdocs\u002Fconcepts\u002Fcore",{"title":5,"description":195},"docs\u002Fconcepts\u002Fcore","Ezdvk3XP_GCwkIKeGjtkFr9gDeKNR3Vdye1FYw6B88w",[209,211,213,214,216,218,219,221,223,225,227,229,230,232,234,236,238,240,242,244,246,248,250,252,254,256,257],{"path":210},"\u002Fdocs\u002Fconcepts\u002Fai",{"path":212},"\u002Fdocs\u002Fconcepts\u002Fai-team",{"path":204},{"path":215},"\u002Fdocs\u002Fconcepts\u002Fflux",{"path":217},"\u002Fdocs\u002Fconcepts\u002Fmetrics",{"path":160},{"path":220},"\u002Fdocs\u002Fdemo-center",{"path":222},"\u002Fdocs\u002Fdeploy\u002Foverview",{"path":224},"\u002Fdocs\u002Ffaq",{"path":226},"\u002Fdocs\u002Fglossary",{"path":228},"\u002Fdocs\u002Fguide\u002Fai-kb",{"path":180},{"path":231},"\u002Fdocs\u002Fguide\u002Fdb-connect",{"path":233},"\u002Fdocs\u002Fguide\u002Fmodel-gen",{"path":235},"\u002Fdocs\u002Fintro\u002Fframeworks",{"path":237},"\u002Fdocs\u002Fintro\u002Foverview",{"path":239},"\u002Fdocs\u002Fintro\u002Fvalue",{"path":241},"\u002Fdocs\u002Fintro\u002Fwhy",{"path":243},"\u002Fdocs\u002Fmechanism\u002Fai-employee-task",{"path":245},"\u002Fdocs\u002Fmechanism\u002Fdata-flux",{"path":247},"\u002Fdocs\u002Fmechanism\u002Fmetrics-contract",{"path":249},"\u002Fdocs\u002Fmechanism\u002Fpermission",{"path":251},"\u002Fdocs\u002Fmechanism\u002Fpublish",{"path":253},"\u002Fdocs\u002Fquickstart\u002Fclone-template",{"path":255},"\u002Fdocs\u002Fquickstart\u002Fdemo-30s",{"path":173},{"path":258},"\u002Fdocs\u002Fsystem\u002Foverview",1788586879698]