尝试通过查询语句来动态构建数据库

上次尝试了一下实现一个 SuperRef 之后 ld246.com/article/1739206311467 很快意识到了一个问题,所谓 SuperRef 的核心算子是就两个:

  1. 反链查询(包括重定向操作)
  2. 根据搜索的内容更新数据库的行

反链查询的目的只是为了得到要加入数据库的块,所以可以不局限于反链,而是通过各种查询动态地构建数据库。

不过反链查询毕竟有特殊的含义,所以为了和 SuperRef 区别,把这个功能称为 Dynamic Database。他和 SuperRef 的本质其实是一样,小区别在于:SuperRef 是把数据库绑定一个文档,而 Dynamic Database 则只针对数据库本身。

现在使用 fmisc 5.6.0 版本之后,点击数据库旁边的按钮可以把它设置为一个「动态数据库」。

图片.png

在里面放一些查询语句,这里的案例是收集所有有 TODO 和 DOING tag 的条目。

图片.png

点击一下「更新数据库」按钮,就自动创建条目了。

由于我查询的是标签,所以在数据库中增加一个模板列,把块中的标签信息提取出来。

.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 }

大致效果是这样的:

图片.png

可以用以下的 SQL 查询所有绑定了动态构建规则的数据库(汇总在书签侧边栏中)

select * from blocks where type='av' and ial like '%custom-dynamic-database%' order by updated desc;

不过说实话,我自己尝试几天后,发现这个功能的定位有点尴尬。

原因在于到目前为止,如何聚合内容块,我自己已经有了三种方案:

  • 基于 QueryView,优点是非常灵活
  • 基于书签 +,优点是可以不用打开文档而在软件最顶层显示
  • 基于(SuperRef)数据库,优点是可以添加自定义的列以补充元信息

图片.png

使用数据库的核心优势就是可以补充列,那对我来说问题就来了:

  • 如果添加元信息很重要,那完全可以用 SuperRef 绑定到一个主题文档
  • 如果添加元信息不重要,那完全可以用更灵活的 QueryView ,或者聚合到侧边书签当中

所以这种动态构建数据库的方案上不去下不来,感觉有点鸡肋。到底实际价值有多大,就交给其他人来自行评判了。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24939 引用 • 102734 回帖
  • QueryView
    4 引用 • 11 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • veryzhh 3 评论

    感谢 F 佬,又提供了一个强大的功能!我用了新的动态数据库,有两点体会。

    两点体会:

    • 标签式动态数据库很有用,更有利于对标签对象进行管理。
      • 虽然书签 + 里调取会更直接,但后续管理的衔接不是太方便,用数据库就可以设置不同的筛选视图,并给标签对象的情况加状态或说明。
      • 对于普通的标签,可以不需要这一步;但对于有后续管理动作的标签,动态数据库就很有用了。
    • 关键词动态数据库,使一些特定的日常札记的收录,更加便捷。
      • 比如,我偶尔会在日记中记录自己做的梦,以前需要右键送到相应数据库(当然也可以用 SuperRef 方式),但这都要多一个动作。现在只要描述中有“做了个梦”,这一段落块就自动添加到记录梦的数据库了。对于日常札记这种很普通的事来说,完全不需要有多余的动作,只要记录的内容中有特定的表述就行了。
      • 这一方式不足是,关键词不能过于通用(简单),否则如果别的文章里刚好大量使用了该词,那就是“灾难”了。

    一点疑问:

    • 我抄了 F 佬你在图片中提供的 JS 代码,来收集指定标签对象信息,但不知为什么跑不通。使用以下代码后,会提示 blocks.sorton is not a function,把 blocks = blocks.sorton('updated');//,去掉下一行的 //,又会提示 查询没有返回结果
    //!js let blocks = await Query.sql(` select * from blocks where (type='p' or type='d' or type='h') and (tag like '#待梳理#' or tag like '#待完善#')/ `); blocks = blocks.sorton('updated'); //blocks = await Query.fb2p(blocks); return blocks.pick('id');
    • 后来用书签 + 试过其中的 SQL 代码是可用的,我就套用了您在设置面板上提供的 JS 代码,这次可以调取查询数据到数据库了。我上面所模仿的 JS 代码中到底有什么问题呢?还是这个代码需要什么插件或功能来支持?还望 F 佬不吝赐教 🙏 。
    //!js const blocks = await sql("SELECT * FROM blocks WHERE (type='p' OR type='d' OR type='h') AND (tag LIKE '%#待梳理#%' OR tag LIKE '%#待完善#%')"); return blocks.map(b => b.id);
    没有什么问题, blocks.sorton 和 fb2p 都不是必须的;另外没有 sorton 可能是 QV 的版本不太对,我印象中这几个版本我更改过这部分的代码。不过 sorton 不影响最后的结果,删掉也无所谓。
    Frostime
    哦,我注意到了,你用的是 sql 而不是 Query.sql 是吧?那确实不会有 sorton。 sorton 和 pick 都是 QueryView 里面对列表封装了一层后增加的方法,普通列表里面是没有这些方法的。
    Frostime
    @Frostime 我装了 Query & View,但还不会用,所以只是装了插件本身,没做任何配置。看来应该是这个原因了。
    veryzhh
  • onemo

    要是能自动更新动态数据库就更好了 😋

推荐标签 标签

  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 400 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 353 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 447 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖 • 1 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 677 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖 • 1 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 702 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖 • 1 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 666 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 637 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 229 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 640 关注
  • sts
    2 引用 • 2 回帖 • 224 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 255 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1243 回帖 • 414 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    431 引用 • 1250 回帖 • 599 关注
  • abitmean

    有点意思就行了

    32 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 26 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 134 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 9 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 167 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 3 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 4 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖 • 3 关注