设计原则
basedb 是依据一份架构文档设计的——共十六章,位于仓库的 docs/architecture 下。其第 00 章确定了二十五项决策;以下是它们的核心思想。
数据是数据表,而不是一种格式
Section titled “数据是数据表,而不是一种格式”用户数据库是一个 PostgreSQL 模式(schema),数据表就是数据表,字段就是一个名称清晰可读的有类型列。没有 EAV(实体-属性-值),没有包罗万象的 JSON 文档,也没有晦涩难懂的名称。目录 _basedb 描述这些对象,但并不取代它们。
这是有意为之的结果:直接 SQL 是一种正当的用法。约束设置在数据库中,历史记录由触发器捕获——没有任何设计假定写入必须经过应用程序。
唯一的权限决策点
Section titled “唯一的权限决策点”界面、REST API、MCP 服务器、共享表单、Webhook:一切都经过内核中同一个权限执行点。界面与其他 API 使用者没有区别——没有私有路由,也没有服务令牌。无法看到的资源,其响应与不存在的资源完全相同。
内核决策,适配器转换
Section titled “内核决策,适配器转换”这是一个 TypeScript monorepo:@basedb/core 承载全部逻辑(目录、DDL 引擎、权限、记录、历史记录);apps/api(Hono)、apps/mcp 和 apps/web(Next.js)是互不调用的适配器。界面从不依赖内核:它只通过 HTTP 通信,仅此而已。
未经决定,不会丢失任何内容
Section titled “未经决定,不会丢失任何内容”删除只是移到一旁,而不是销毁:已删除的数据表会保留其行,可以在移到一旁后的名称下通过 SQL 读取,并且可以恢复。重命名物理名称时,旧名称会通过别名继续提供。清除是一项管理决定,之前会先进行一次经过校验的导出。
PostgreSQL,别无其他
Section titled “PostgreSQL,别无其他”PostgreSQL 16 或更高版本,没有任何必需的外部依赖:没有消息队列、没有缓存,也没有搜索引擎。Webhook 队列、历史记录的转存、速率限制,一切都在数据库或进程内完成。
| 章节 | 主题 |
|---|---|
| 00 | 结构性决策与错误代码注册表 |
| 01 | 命名与 slug 化 |
| 02 | _basedb 目录,唯一可信来源 |
| 03 | DDL 引擎与迁移 |
| 04 | 字段类型与 PostgreSQL 映射 |
| 05 | 权限 |
| 06 | 生命周期:重命名、删除、清除 |
| 07 | 历史记录 |
| 08 | REST API 与 Webhook |
| 09 | MCP 服务器 |
| 10 | 软件架构 |
| 11 | 界面 |
| 12 | AI 集成 |
| 13 | 身份验证 |
| 14 | 环境 |
| 15 | 共享表单 |
basedb 是 AI 原生软件工作室 Eodia 出品的自由软件。