上次尝试了一下实现一个 SuperRef 之后 ld246.com/article/1739206311467 很快意识到了一个问题,所谓 SuperRef 的核心算子是就两个:
- 反链查询(包括重定向操作)
- 根据搜索的内容更新数据库的行
反链查询的目的只是为了得到要加入数据库的块,所以可以不局限于反链,而是通过各种查询动态地构建数据库。
不过反链查询毕竟有特殊的含义,所以为了和 SuperRef 区别,把这个功能称为 Dynamic Database。他和 SuperRef 的本质其实是一样,小区别在于:SuperRef 是把数据库绑定一个文档,而 Dynamic Database 则只针对数据库本身。
现在使用 fmisc 5.6.0 版本之后,点击数据库旁边的按钮可以把它设置为一个「动态数据库」。
在里面放一些查询语句,这里的案例是收集所有有 TODO 和 DOING tag 的条目。
点击一下「更新数据库」按钮,就自动创建条目了。
由于我查询的是标签,所以在数据库中增加一个模板列,把块中的标签信息提取出来。
.action{ $blocks := queryBlocks "select * from blocks where id='?'" .id} .action{ if not (empty $blocks) } .action{ $tag := (first $blocks).Tag | replace "#" "" } <span data-type="tag">.action{ $tag }</span> .action{ end }
大致效果是这样的:
可以用以下的 SQL 查询所有绑定了动态构建规则的数据库(汇总在书签侧边栏中)
select * from blocks where type='av' and ial like '%custom-dynamic-database%' order by updated desc;
不过说实话,我自己尝试几天后,发现这个功能的定位有点尴尬。
原因在于到目前为止,如何聚合内容块,我自己已经有了三种方案:
- 基于 QueryView,优点是非常灵活
- 基于书签 +,优点是可以不用打开文档而在软件最顶层显示
- 基于(SuperRef)数据库,优点是可以添加自定义的列以补充元信息
使用数据库的核心优势就是可以补充列,那对我来说问题就来了:
- 如果添加元信息很重要,那完全可以用 SuperRef 绑定到一个主题文档
- 如果添加元信息不重要,那完全可以用更灵活的 QueryView ,或者聚合到侧边书签当中
所以这种动态构建数据库的方案上不去下不来,感觉有点鸡肋。到底实际价值有多大,就交给其他人来自行评判了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于