ARTICLE DETAIL

资讯详情

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

没有数据库也能做Notion风格表格:ZenNotes如何在纯.csv文件上实现Table与Board视图

没有数据库也能做Notion风格表格:ZenNotes如何在纯.csv文件上实现Table与Board视图 没有数据库也能做Notion风格表格ZenNotes如何在纯.csv文件上实现Table与Board视图【免费下载链接】zennotesKeyboard-first local Markdown notes with Vim motions, diagrams, and MCP integration.项目地址: https://gitcode.com/gh_mirrors/zenn/zennotesZenNotes 是一款键盘优先的本地 Markdown 笔记应用它最反直觉的设计之一是数据库功能完全不依赖数据库。一个 Notion 风格的 Databases表格数据库在磁盘上就是一个.base文件夹核心数据是一个纯.csv文件Table表格与 Board看板两种视图共享同一份数据。本文带你拆解这套文件即数据库的实现思路。磁盘结构一个 .base 文件夹三件套在 ZenNotes 中库里有个数据库 文件树里有个以.base结尾的文件夹。每个数据库文件夹包含三个固定成员文件作用data.csv数据本体。行是记录列是有类型的字段带一个隐藏的idUUID 列给每行一个跨外部编辑的稳定身份schema.json字段类型、select 选项、视图定义Table/Board、行→记录页笔记的映射——这些 CSV 存不下pages/记录页笔记每条记录一个.md按需创建这套目录约定定义在 packages/shared-domain/src/databases.ts 的注释中一眼可见。两个实用推论改名 文件夹改名删库/移动 文件夹移动不需要任何路径重写schema.json里的记录页路径都存相对路径所以整个数据库可以整体搬走。字段类型怎么猜schema.json 是关键打开一个光杆 CSV没有 schema.json 的普通.csv时ZenNotes 会自动推断结构采样前 50 行数据逐列判断类型数字 →numberISO 日期 →datetrue/false 系 →checkbox其余 →textselect / multiSelect 绝不自动推断——分组字段必须有用户意图需要你手动把某列提升为 select若已有全列唯一的id列则直接采用否则在表头前合成一个隐藏id列推断完成后schema.json 被落盘CSV 被规范化重写补上 id 列。推断逻辑在 packages/shared-domain/src/database-csv.ts这是一个零依赖模块手写了一个 RFC-4180 兼容的 CSV 解析/序列化器正确处理引号、内嵌逗号与换行——保证读进来再写出去逐字节一致。Table 视图对纯 CSV 的编辑体验Table 视图就是一个直接编辑data.csv的网格单元格在内存中始终是原始 CSV 字符串字段类型只在输入/比较/排序的边缘生效无损往返不强制转型每行按表头名字而非列序号匹配字段所以你在 Excel 里调整了列顺序重新打开依然对得上视图支持按字段过滤is / contains / before / checked 等操作符且支持 AND/OR 组合、多字段排序、列宽记忆——这些定义都写在 schema.json 的views数组里编辑器里的 Markdown 表格可以原地转换为数据库转换时复用同一套推断逻辑数字/复选框/日期列会带上正确类型连列宽都保留。字段与视图的类型契约DbField、DbView、DatabaseSidecar定义在 packages/bridge-contract/src/databases.ts桌面端与 Web 端共用同一份契约。Board 视图按 select 字段分组成看板Board 视图和 Table 共享同一份rows只是渲染方式不同指定一个select字段作为分组依据groupByFieldId该字段的每个选项就是一列空值自动归入 No xxx 列把一张卡片拖到另一列本质就是把该行 select 单元格的值改掉落盘的还是那个data.csv想加新列在 Board 里输入New column…等于新增一个 select 选项。Board 的列计算与拖拽回写在 packages/app-core/src/components/DatabaseBoardView.tsxTable 网格则在 packages/app-core/src/components/DatabaseTableView.tsx。因为视图只是 schema.json 里的一条 JSON 记录你可以同时保存按状态分组的 Board和按日期排序的 Table切换时数据零损耗。每条记录可以有一篇笔记页pages/目录是 Notion 式行即页面的落地给某行创建记录页后pages/下多一个以记录命名的.md路径映射记在 schema.json 的pages字段中。笔记之间可以用[[wiki链接]]指向这些记录页——在 ZenNotes 的编辑器 中已解析与未解析的 wiki 链接有不同样式Connections 面板也会列出指向.base数据库的链接为什么不用真数据库文件忠实设计取舍写在官方文档里docs/reference/vault-and-folder-model.md 开宗明义——ZenNotes does not store note content in a proprietary database。这条原则对数据库功能同样适用可迁移把.base文件夹拷走整个库数据结构记录页笔记一起走不依赖任何私有存储格式可外部编辑用任意表格软件改data.csv文件监听器会把改动同步进应用id列保证行身份不变传输无关所有数据库操作打开/写入/新建/改名被抽象为通用的文件 IO桌面端直接走本地文件系统Web 端走 HTTP 桥接两者复用同一套组合逻辑见 packages/shared-domain/src/database-ops.ts旧版松散.csv 同名 sidecar布局也仍被识别老库不受影响。小结ZenNotes 的 Databases 用三件极简材料还原了 Notion 表格体验一个.csv数据、一个schema.json结构与视图、一个pages/目录记录笔记。没有 SQL、没有专有二进制所有高级能力——字段类型推断、Table/Board 双视图、拖拽改分组、记录页笔记——都建立在这三者的约定之上。这种文件忠实的设计正是它本地优先哲学的直接延伸。【免费下载链接】zennotesKeyboard-first local Markdown notes with Vim motions, diagrams, and MCP integration.项目地址: https://gitcode.com/gh_mirrors/zenn/zennotes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表