ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

NocoBase 主数据库(Main Data Source)完全指南:系统表存储、数据源管理、表结构与字段同步机制解析

NocoBase 主数据库(Main Data Source)完全指南:系统表存储、数据源管理、表结构与字段同步机制解析 NocoBase 主数据库Main Data Source完全指南系统表存储、数据源管理、表结构与字段同步机制解析【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase导读NocoBase 是一款开源的 AI 无代码业务系统构建平台其主数据库Main Data Source是部署时配置的核心数据库既承载系统表数据也支持存储用户业务数据。本文基于当前仓库中的 主数据库官方文档 与 plugin-data-source-main 插件源码 展开系统讲解主数据库的数据库兼容矩阵、插件安装方式、数据表管理能力、已有表同步、多类型表结构与字段级同步机制并结合MainDataSource、DatabaseIntrospector等源码揭示底层实现原理帮助你完整掌握 NocoBase 主数据源的管理与二次开发要点。主数据库是什么在 安装部署 NocoBase 时配置的数据库即为 NocoBase 的主数据库。它承担两类职责存储 NocoBase 的系统表数据如collections数据表元信息、fields字段元信息、collectionCategories表分类等这些元数据驱动着整个平台的建模与界面渲染支持存储用户业务表数据用户通过界面创建的业务数据表同样落在主数据库中与系统表共存。主数据库默认以固定 keymain注册。在 插件安装逻辑 中可以看到install()会在dataSources表中firstOrCreate一条key: main、type: main、fixed: true的记录fixed: true表示该数据源不可被移除是平台的常驻数据源。支持的数据库版本与商业版本数据库支持版本社区版标准版专业版企业版MySQL 8.0.17✅✅✅✅PostgreSQL 10✅✅✅✅MariaDB 10.9✅✅✅✅KingbaseESV9❌❌✅✅OceanBase4.3❌❌❌✅提示KingbaseES 只支持 PostgreSQL 兼容模式OceanBase 只支持 MySQL 兼容模式。也就是说社区版开箱即用支持 MySQL、PostgreSQL、MariaDB 三大主流数据库KingbaseES人大金仓需要专业版及以上授权OceanBase 需要企业版授权。插件安装不同数据库对应不同的接入插件安装方式如下数据库对应插件安装方式MySQL无内置插件无需单独安装。PostgreSQL无内置插件无需单独安装。MariaDB无内置插件无需单独安装。KingbaseESnocobase/plugin-data-source-kingbase需要商业授权安装后默认启用插件。OceanBasenocobase/plugin-data-source-oceanbase需要商业授权安装后默认启用插件。MySQL、PostgreSQL、MariaDB 作为内置能力直接可用而 KingbaseES、OceanBase 以独立插件形式存在仓库中可通过plugin-data-source-kingbase、plugin-data-source-oceanbase命名检索确认依赖商业授权安装后默认启用。访问主数据源在界面上访问主数据库的操作路径为点击系统功能中的数据源菜单进入数据源主页在数据源列表中选择Main数据源点击配置操作即可进入主数据库管理界面。主数据源的核心管理入口对应源码中的mainDataSource资源见 resourcers/main-data-source.ts它暴露了两个关键动作refresh当主数据源处于loaded状态时重新加载全部自定义集合loadCollectionssyncFields调用mainDataSource.syncFieldsFromDatabase(ctx, collections)将数据库中的字段结构同步进 NocoBase 管理模型。主数据源管理主数据库提供完整的数据表管理能力支持检索、创建、变更、删除数据表也支持同步数据库中已有数据表的字段同时支持数据表字段的创建、变更与删除。具体操作项包括筛选检索 NocoBase 主数据库管理的数据表创建数据表新增业务数据表编辑变更业务数据表删除删除业务数据表从数据库同步同步数据库中已有数据表的结构配置字段数据表字段的创建、变更、删除tab 页的用于对数据表进行分类管理支持分类的创建、变更与删除。从源码看元数据存储模型主数据库管理的数据表本质上是元数据记录。在 collections 集合定义 中可以看到collections表的字段设计keyUID 主键、name唯一、带t_前缀、title可翻译标题、inherit是否继承表、hidden、optionsJSON 扩展配置、description以及fields一对多与category多对多关联分类两个关系字段。理解这张元数据表有助于理解为什么 NocoBase 能做到界面改表结构、底层自动 DDL——所有变更都围绕collections/fields元数据驱动再通过 server.ts 中注册的大量beforeCreate/afterSave/beforeDestroy钩子同步执行数据库迁移model.migrate()、collection.sync()与集群消息广播sendSyncMessage。从数据库同步已有表主数据源的一个重要特性是可以将数据库中已经存在的表同步到 NocoBase 中进行管理。这意味着保护现有投资如果数据库中已有大量业务表无需重新创建可直接同步使用灵活集成可以将通过其他工具如 SQL 脚本、数据库管理工具等创建的表纳入 NocoBase 管理渐进式迁移支持逐步将现有系统迁移到 NocoBase而不是一次性重构。通过「从数据库加载」功能你可以浏览数据库中所有的表选择需要同步的表自动识别表结构和字段类型一键导入到 NocoBase 中进行管理。底层实现MainDataSource 与 DatabaseIntrospector「从数据库加载」在源码层面对应MainDataSource的一组方法见 main-data-source.tsreadTables()调用introspector.getTableList()获取数据库全部物理表与已管理的集合existsCollections做差集返回尚未纳管的表列表tables2Collections()对每个表调用introspector.getCollection({ tableInfo })生成对应的CollectionOptions含推断出的字段定义loadTables(ctx, tables)将tables2Collections的结果批量写入collections仓库并标记from: dbsync代表这批表来自数据库同步而非界面新建。类型推断的核心引擎是 DatabaseIntrospectorgetTableList()/getViewList()分别通过 Sequelize 的showAllTables()与listViews()枚举物理表与视图columnInfoToFieldOptions()将数据库列描述类型、可空、主键、自增、唯一索引、注释等转换为 NocoBase 字段选项inferFieldTypeByRawType()依据fieldTypeMap[sequelize.getDialect()]按方言区分的原始类型映射表将数据库类型映射为 NocoBase 字段类型无法识别的类型会被标记为supported: false并归入unsupportedFields通过日志记录不影响其余字段的同步getDefaultInterfaceByType()再结合 type-interface-map.ts 为字段类型赋予默认的界面组件配置如json类型默认使用Input.JSON组件、date默认使用DatePicker。此外DatabaseIntrospector会从表结构自动推导集合配置识别自增字段/主键/唯一字段作为filterTargetKey多列主键则生成数组并将timestamps、autoGenId置为false保证同步来的表不被 NocoBase 额外篡改结构。支持多种表结构类型NocoBase 支持创建和管理多种类型的数据表普通表内置了常用的系统字段继承表可以创建一个父表然后从该父表派生出子表子表会继承父表的结构同时还可以定义自己的列树表树结构表目前只支持邻接表设计日历表用于创建日历相关的事件表文件表用于文件存储的管理SQL 表并不是实际的数据库表而是将 SQL 查询快速、结构化地展示出来视图表连接已有的数据库视图。这些表类型在仓库中均有对应插件支撑例如plugin-collection-tree树表、plugin-collection-sqlSQL 表、plugin-calendar日历表、plugin-file-manager文件表等可结合 数据源插件目录 进一步查阅。其中继承表在元数据层通过collections表的inherit字段标记插件中InheritedCollection、inheritanceMap等机制负责父子表字段的继承与联动如删除父表字段时清理子表 override 字段见 server.ts。支持数据表的分类管理通过 tab 页的操作可以为数据表创建分类并支持分类的创建、变更与删除实现数据表的分组管理。底层对应collectionCategories元数据表collections通过belongsToMany关系关联分类through: collectionCategory见 collections.ts相关操作均有服务端测试覆盖见 collection-categories.test.ts。提供了丰富的字段类型主数据库支持丰富的字段类型覆盖文本、数值、日期时间、关系、JSON、文件、计算、加密等场景。字段的类型与界面组件interface解耦数据库底层存储类型不变界面表现可自由切换。灵活的字段类型转换NocoBase 支持在同种数据库类型基础上进行灵活的字段类型转换。示例String 类型字段的转换选项当数据库中的字段是 String 类型时可以在 NocoBase 中转换为以下任意形式基础类型单行文本、多行文本、手机号码、电子邮箱、URL、密码、颜色、图标选择类型下拉菜单单选、单选框富媒体类型Markdown、Markdown (Vditor)、富文本、附件URL日期时间类型日期时间含时区、日期时间不含时区高级类型自动编码、数据表选择器、加密。这种灵活的转换机制意味着无需修改数据库结构字段的底层存储类型保持不变只是在 NocoBase 中的表现形式发生改变适应业务变化随着业务需求的变化可以快速调整字段的展示和交互方式数据安全转换过程不会影响已有数据的完整性。从实现看同步/查询字段时服务端会通过possibleTypes由fieldTypeMap按方言映射得到的可选类型列表约束转换范围只有底层原始类型兼容的转换才被允许见 server.ts 中extractTypeFromDefinitionfieldTypes[mappedType]的逻辑。字段级别的灵活同步NocoBase 不仅可以同步整个表还支持字段级别的精细化同步管理字段同步的特点实时同步当数据库表结构发生变化时可以随时同步新增的字段选择性同步可以选择性地同步需要的字段而不是全部字段类型自动识别自动识别数据库字段类型并映射到 NocoBase 的字段类型保持数据完整性同步过程不会影响已有数据。使用场景数据库结构演进当业务需求变化需要在数据库中添加新字段时可以快速同步到 NocoBase团队协作当其他团队成员或 DBA 在数据库中添加了字段可以及时同步混合管理模式部分字段通过 NocoBase 管理部分字段通过传统方式管理灵活组合。字段级同步的源码实现字段级同步对应MainDataSource.syncFieldsFromDatabase(ctx, collectionNames?)见 main-data-source.ts根据传入的集合名可选过滤出已加载的集合及其字段含物理列名columnName通过 introspection 重新获取这些表的当前字段结构mergeWithLoadedCollections合并新旧结构找出已被删除的字段在数据库事务中先fields仓库销毁已删除字段再collections仓库update更新字段列表updateAssociationValues: [fields]同步过程中对schema public的默认 schema 做归一化处理避免跨 schema 差异。对应地mainDataSource资源的syncFields动作会在主数据源loaded状态下触发该流程而插件在集群场景下还会通过sendSyncMessage广播syncCollection/removeField/removeCollection消息保证多节点结构一致见 server.ts。小结主数据库是 NocoBase 的根基社区版即可使用 MySQL、PostgreSQL、MariaDB专业版/企业版可扩展 KingbaseES 与 OceanBase它既管理平台系统元数据也能托管业务数据表。借助「从数据库加载」与字段级同步主数据库能够无缝承接存量数据库资产实现渐进式迁移借助普通表、继承表、树表、日历表、文件表、SQL 表、视图表等丰富的表结构类型以及同类型内灵活的字段转换可以低成本响应业务变化。如果想继续深入推荐阅读数据表字段 / 概述字段类型与配置的完整说明plugin-data-source-main 服务端源码钩子、模型、资源与迁移的完整实现数据源管理文档理解多数据源架构下主数据源与外部数据源的关系MainDataSource 实现 与 DatabaseIntrospector 实现表结构与字段推断的底层原理。【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表