跳转到内容

设计原则

basedb 是依据一份架构文档设计的——共十六章,位于仓库的 docs/architecture 下。其第 00 章确定了二十五项决策;以下是它们的核心思想。

数据是数据表,而不是一种格式

Section titled “数据是数据表,而不是一种格式”

用户数据库是一个 PostgreSQL 模式(schema),数据表就是数据表,字段就是一个名称清晰可读的有类型列。没有 EAV(实体-属性-值),没有包罗万象的 JSON 文档,也没有晦涩难懂的名称。目录 _basedb 描述这些对象,但并不取代它们。

这是有意为之的结果:直接 SQL 是一种正当的用法。约束设置在数据库中,历史记录由触发器捕获——没有任何设计假定写入必须经过应用程序。

界面、REST API、MCP 服务器、共享表单、Webhook:一切都经过内核中同一个权限执行点。界面与其他 API 使用者没有区别——没有私有路由,也没有服务令牌。无法看到的资源,其响应与不存在的资源完全相同。

这是一个 TypeScript monorepo:@basedb/core 承载全部逻辑(目录、DDL 引擎、权限、记录、历史记录);apps/api(Hono)、apps/mcp 和 apps/web(Next.js)是互不调用的适配器。界面从不依赖内核:它只通过 HTTP 通信,仅此而已。

删除只是移到一旁,而不是销毁:已删除的数据表会保留其行,可以在移到一旁后的名称下通过 SQL 读取,并且可以恢复。重命名物理名称时,旧名称会通过别名继续提供。清除是一项管理决定,之前会先进行一次经过校验的导出。

PostgreSQL 16 或更高版本,没有任何必需的外部依赖:没有消息队列、没有缓存,也没有搜索引擎。Webhook 队列、历史记录的转存、速率限制,一切都在数据库或进程内完成。

章节主题
00结构性决策与错误代码注册表
01命名与 slug 化
02_basedb 目录,唯一可信来源
03DDL 引擎与迁移
04字段类型与 PostgreSQL 映射
05权限
06生命周期:重命名、删除、清除
07历史记录
08REST API 与 Webhook
09MCP 服务器
10软件架构
11界面
12AI 集成
13身份验证
14环境
15共享表单

basedb 是 AI 原生软件工作室 Eodia 出品的自由软件。