Core · 框架 · 数据库

数据库概览

@nocobase/db 提供逻辑数据模型、数据读写、结构演进与事务。方言包负责连接具体数据库,应用运行时负责配置、资源发现和生命周期。

从哪个入口开始

入口面向的问题
DatabaseManager / Connection默认连接、命名连接、资源释放与事务
CollectionBuilder表、字段、关系元数据、索引与结构变更
Repository按逻辑模型读写、关联、字段编解码与策略
Query面向表的查询、集合式回填和特殊报表
Collections / SchemaInspector逻辑模型解析与物理结构检查
Migrator / Seeder可追踪的结构历史与初始数据

业务代码通常从 Repository 开始。Migration 中用 Builder 演进结构、用 Query 做集合式回填。底层驱动提供的能力不自动成为各个方言都支持的公共能力。

在应用中取得数据库

TypeScript
import { databaseManagerToken } from '@nocobase/db';

// Inside a server route factory or ServiceProvider:
const database = app.container.resolve(databaseManagerToken);
const orders = database.repository('orders');

应用已配置数据库时复用现有服务。独立脚本和测试可以自行创建管理器,结束时必须销毁;详见连接与方言。

应用与插件的接入边界

应用提供连接配置,并在 database/<connection>/migrations/ 与 seeds/ 中维护自己的资源。插件通常在 database/migrations/ 与 seeds/ 中提供资源,通过 server/plugin.ts 声明资源路径,再由宿主发现和执行。两者都使用 defineMigration()、defineSeed() 及其 context;资源放在哪个目录,不改变数据库操作的语义。

业务服务复用宿主 DatabaseManager,按需显式选择命名连接。插件不要在请求中创建连接,也不要在自己的关闭逻辑中销毁共享管理器。多连接之间的查询和事务边界需要明确设计,不能假定一个事务覆盖所有数据库。数据库操作在服务端执行,客户端通过 API 访问。

落地步骤见建表与数据初始化、多个数据库连接和插件数据库资源。本专题继续解释模型、操作、事务和资源执行机制。

逻辑模型与物理结构

Collection 由物理数据库结构和补充元数据共同解析。逻辑名可能与物理表列名不同;Repository 使用逻辑名;Query 按物理表列名工作,不读取 Collection 的字段映射或表前缀,编写回填时应明确目标名称。

关系、标题和其他元数据不能代替物理约束。生成的 database/<connection>/collections/ 是模型快照,结构变更仍写 Migration。

本专题的示例

后续以订单为例:orders 包含 id、orderNo、title、status、amount 和 customerId;数据表与字段创建基础模型,关系与关联增加 customers 及双向关系。查询片段假设模型已经存在,且调用发生在完成授权的服务端代码中。

权限与演进

数据库服务不自动推断 HTTP 用户。数据策略从授权结果产生,再绑定到 Repository;查询筛选只能缩小请求范围,不能代替权限控制。

依次阅读结构、读写、关联、事务和迁移;精确签名见数据库 API 索引。数据库版本与方言条件见兼容性参考。

接口与实现

NocoBase 文档助手

关于 NocoBase,你想了解什么?

每次提问独立回答,不会参考之前的问答。请提供完整背景。