我到底应该基于数据库扩展 " 标签”属性,还是直接使用文档的标签系统

本贴最后更新于 229 天前,其中的信息可能已经时过境迁

由于 notion 的习惯使然,或者还有更前的一些笔记习惯,我习惯会为文档增加标签。

在长期的 notion 使用中,我基于 database 添加了“标签”属性,通过这种方式搜索文档

而在 siyuan 中,内置了标签。这就让我很纠结了:

  1. 选择扩展属性,那么放弃了系统内置功能,会不会有性能劣势或者其他的没有享受到的东西?
  2. 使用后者,那我使用数据库副本就少了一个辅助过滤的能力,或者至少实现没有那么简单

你们呢?怎么选择

  • 思源笔记

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

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

    22337 引用 • 89380 回帖
  • 标签
    19 引用 • 127 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • liptshang 3 1 赞同 1 评论

    要不试试模板列?

    假如你现在有一个包含两个标签的文档:

    image.png

    加入数据库后,使用模板列,输入以下代码:

    .action{$tags := splitList "," .tags}
    .action{range $index, $tag := $tags}
    <span style="padding: 1px 6px 1px 6px; background-color: var(--b3-font-background13); border-radius: 3px;"># .action{$tag}</span>
    .action{end}
    

    能够得到这样的效果:

    image.png

    这样做,可以保留你原有的习惯,数据库也有了你说的“辅助过滤的能力”(通过筛选、搜索等),还不需要额外的成本(不需要再维护一个多选列)。不足之处是不能直接在数据库列上修改标签,要回到文档去。

    1 回复
    如果希望使用原生样式展示的,可以使用:.action{tags := splitList "," .tags}.action{range index, tag := tags}.action{$tag}.action{end}
    liptshang
  • sahaaa 1 评论

    第一条,多虑了,因为思源的数据库表格才加上没多久,用表格比标签舒服多了

    标签用来放一些存档的东西,其实挺好的,不用常出现,但是一直在

    嗯嗯,我就怕到时候模板一改,人麻了....
    silent-tan
  • silent-tan

    @liptshang 有点赞,看了一下源码找了一下 .tags 怎么注入的,还可以把模板列的渲染改为 select 组件,监听 onchange,或者看能不能复用 siyuan 的组件(如果有/可以的话)。另外不知道是不是这个模板列的问题,点击 Cell 的时候,会重新渲染成模板列的代码 input...

    image.png

    3 回复
  • Mark 关注一下后续

  • Achuan-2 2 赞同

    如果能实现很好,这样思源的标签就可以用数据库来管理了,起码有点用途了,不然现在标签真不如用块引替代

    不能实现的话我觉得可以让思源官方搞一个标签列

  • liptshang 1 1 赞同

    点击模板列的效果和文本列一样,都是展示 cell 的 textarea。不过,如果 cell 里面有可点击的元素的话,是可以点击的。比如,前面模板代码里的标签样式,是我即时写的,只是纯文本加了背景色,点击就是 textarea;其实,可以改为标签的原生样式,点击里面的标签,就可以唤起标签的搜索 tab 了:

    .action{$tags := splitList "," .tags}
    .action{range $index, $tag := $tags}
    <span data-type="tag">.action{$tag}</span>
    .action{end}
    

    模板列里也可以执行 js 代码,扒扒源码应该可以实现你的这个想法?不过我个人感觉还是由官方新增一个专门的标签列会比较好。

  • silent-tan

    还是等子弹飞一会吧,感觉 database 这块还有很多优化空间,模板更是。按着 notion 的路子来走,起码得大半年不止。

    notion 用起来很符合直觉的 database 功能:

    • 模板语法上手建议程度和文档完善度,当然 siyuan 更加开放,但是就上手来看,要扒源码...
    • 可以重命名 title,这样在不同场景下,我能够直观知道列表是干啥的,同时也能够隐藏部分视图,或者说克隆的时候不克隆所有视图,可以对其中试图进行克隆
    • 列默认值,基于这个点做新建记录模板

    目前感觉精力仅集中两个视图 table 和 看板 的实现就现阶段够用了,后面直接做这块的优化,不要只停在够用的程度了

    回到主题,目前我还是决定继续在 database 上添加标签多选列,这样使用体验和维护都比较方便,内置标签系统仅作为补充好了,在内容上做下名词索引够用了,同时用于碎片化的内容片段,方便之后整理为文档。或者继续看看 DL 们还有什么骚操作了

  • SenorPink

    你好,请问这个代码需要改哪里吗?为什么我用了之后模板列不显示文件的标签

    1 回复
  • liptshang

    我在测试工作空间里粘贴后可以直接使用,检查一下代码的完整性?还有就是注意要把链滴的版权信息删掉。

    1 回复
  • SenorPink

    CleanShot20240407at17.34.252x.png

    确实是有标签,代码也没问题,可就是不显示 🥹

    2 回复
  • 先确认一下主键关联的文档有没有文档级标签

  • liptshang

    我明白了,你是用了行间标签,而不是文档标签。文档标签在文档标题的旁边设置,会显示在标题的上方而不是正文中。

    image.png

    如果希望展示行间标签,需要编写 sql 查询才行。

    1 回复
  • SenorPink

    原来是这样!

    谢谢两位

  • @liptshang 在 v3.0.11 要先过滤掉空值,否则会报错

    .action{ if not (empty .tags) }
    .action{ $tags := splitList "," .tags }
    .action{ range $index, $tag := $tags }
    <span style="padding: 1px 6px 1px 6px; background-color: var(--b3-font-background12); border-radius: 3px;"># .action{$tag}</span>
    .action{ end }
    .action{ end }
    
    .action{ if not (empty .tags) }
    .action{ $tags := splitList "," .tags }
    .action{ range $index, $tag := $tags }
    <span data-type="tag">.action{$tag}</span>
    .action{ end }
    .action{ end }
    
    这是改了什么?
    liptshang
    @liptshang 在你给的两个模板前都补上了空值判断,否则下个版本使用的时候会弹红色的报错:Issue #11070 · siyuan-note/siyuan
    JeffreyChen
  • QMike 1 赞同

    目前使用该模板自动显示文档标签还存在一个筛选的问题,不知道大佬们有没有较好的解决方法:

    已通过模板列添加模板代码显示文档的标签:

    image.png

    但是无法通过添加模板列的筛选条件自动筛选出有特定标签的文档,会不显示任何文档:

    image.png

    感觉是我的筛选条件仅填写 #TEST1 导致的。那么如何对模板列识别出来的文档标签进行筛选呢?因为感觉如果用数据库模板列管理文档标签,那么最重要的就是能够筛选归类了

    PS:正如 Achuan 佬所说,官方搞个标签列才是最直接的解决方法,或许可以让现在鸡肋的标签重新焕发新生

    1 回复
  • 去掉井号试试 TEST1 ,不行的话也确实没办法

    1 回复
  • 喔,试了一下确实可以!

请输入回帖内容 ...
silent-tan
我要悄悄努力,然后惊艳所有人 深圳

推荐标签 标签

  • 安全

    安全永远都不是一个小问题。

    199 引用 • 816 回帖 • 1 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 175 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    209 引用 • 358 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    6 引用 • 38 回帖
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    77 引用 • 390 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 19 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖 • 1 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    75 引用 • 1737 回帖 • 5 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖
  • sts
    2 引用 • 2 回帖 • 196 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 62 关注
  • JetBrains

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

    18 引用 • 54 回帖
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 764 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 2 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • 负能量

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

    88 引用 • 1235 回帖 • 411 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖
  • IPFS

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

    21 引用 • 245 回帖 • 241 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1327 回帖
  • HTML

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

    107 引用 • 295 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 9 关注