数据库功能简介

阅读本帖时打开思源笔记并打开帮助文档效果更佳,部分链接会跳转到思源帮助文档

思源笔记 3.0 版面向所有用户正式推出了数据库功能。本文将对数据库功能进行介绍。

数据库可以用来干嘛?

主要用途是对信息进行汇总,比如可以做一个影视库。

imageimage

思源的数据库和其他软件的区别

在我之前的帖子 数据库(属性视图)公测反馈 - 链滴 (ld246.com) 中,将数据库功能划分成了多维表格、notion 数据库、属性视图三大类,目前思源的数据库功能是多维表格 +notion 数据库的结合体,数据库主键既可以是纯文本,也可以是页面,不过目前仅有表格视图,画廊视图、日历视图等还未开发。

插入数据库块

在文档中插入数据库:按 / 键,然后输入 sjk,回车。

插入数据库

image

数据库块的结构如上图,表格的第一列是主键列,主键既可以是文本,也可以是块引用,在主键单元格内双击 [ 键就能对块进行引用。

数据库列类型

数据库的列类型有:

  • 文本
  • 数字
  • 单选
  • 多选
  • 日期(和时间)
  • 创建时间。当前行的创建时间。
  • 更新时间。当前行的更新时间。
  • 资源。可以插入各种文件
  • 勾选框
  • 链接
  • 邮箱
  • 电话
  • 关联
  • 汇总
  • 模板

前面的类型都比较好理解,关联、汇总、模板算是进阶的列类型。

关联列与汇总列

关联列是用来在两个数据库间建立联系的,关联列关联的是另一个数据库的主键。

关联列相较于文本列的好处在于:

  1. 可以在两个数据库间建立联系,数据库 A 修改后,数据库 B 中的相关列也会同步修改。
  2. 可以使用汇总列对所关联的数据库信息进行汇总。
  3. @88250 ,希望增加跳转到关联数据库的功能,最好能跳转到具体的行。

关联列

汇总列是与关联列配套使用的,举个栗子,前文的电影数据库的导演演员列关联了人员数据库的主键(由于是双向关联,所以自动在人员数据库生成了电影导演电影演员列),在人员数据库中增加一个汇总列,则可以用汇总列在人员数据库中对电影数据库中的信息进行汇总,比如汇总当前人员担任导演的电影总票房。

汇总列

模板列

我也不会用 😅 请查看:

数据库的保存与显示

数据库的数据在 工作空间\data\storage\av 文件夹下以 json 格式保存。

av, attribute view, 属性视图。

数据库功能最早是叫属性视图,后来随着功能的变化,改叫数据库了。

image

上图是帮助文档中的一个数据库,在 av 文件夹中的 json 文件内容为:

{
	"spec": 0,
	"id": "20240208163918-rxu3llx",
	"name": "账单",
	"keyValues": [{
		"key": {
			"id": "20240208163918-odyw3i7",
			"name": "成员",
			"type": "block",
			"icon": "",
			"numberFormat": "",
			"template": ""
		},
		"values": [{
			"id": "20240208163921-wnf3fqx",
			"keyID": "20240208163918-odyw3i7",
			"blockID": "20240208163920-51nyfyp",
			"type": "block",
			"isDetached": true,
			"block": {
				"id": "20240208163920-51nyfyp",
				"content": "Daniel",
				"created": 1707381561387,
				"updated": 1707381900674
			}
		}, {
			"id": "20240208164408-fwrlt7q",
			"keyID": "20240208163918-odyw3i7",
			"blockID": "20240208164407-q5jgzt1",
			"type": "block",
			"isDetached": true,
			"block": {
				"id": "20240208164407-q5jgzt1",
				"content": "Vanessa",
				"created": 1707381848145,
				"updated": 1707381890239
			}
		}]
	}, {
		"key": {
			"id": "20240208164200-aoez2h2",
			"name": "餐饮",
			"type": "number",
			"icon": "",
			"numberFormat": "",
			"template": ""
		},
		"values": [{
			"id": "20240208164415-frgrrdi",
			"keyID": "20240208164200-aoez2h2",
			"blockID": "20240208164407-q5jgzt1",
			"type": "number",
			"number": {
				"content": 200,
				"isNotEmpty": true,
				"format": "",
				"formattedContent": ""
			}
		}, {
			"id": "20240208164450-ssb7h5h",
			"keyID": "20240208164200-aoez2h2",
			"blockID": "20240208163920-51nyfyp",
			"type": "number",
			"number": {
				"content": 100,
				"isNotEmpty": true,
				"format": "",
				"formattedContent": ""
			}
		}]
	}, {
		"key": {
			"id": "20240208164420-mwu0h5t",
			"name": "服装",
			"type": "number",
			"icon": "",
			"numberFormat": "",
			"template": ""
		},
		"values": [{
			"id": "20240208164441-woggrha",
			"keyID": "20240208164420-mwu0h5t",
			"blockID": "20240208164407-q5jgzt1",
			"type": "number",
			"number": {
				"content": 200,
				"isNotEmpty": true,
				"format": "",
				"formattedContent": ""
			}
		}, {
			"id": "20240208164457-fzglttu",
			"keyID": "20240208164420-mwu0h5t",
			"blockID": "20240208163920-51nyfyp",
			"type": "number",
			"number": {
				"content": 100,
				"isNotEmpty": true,
				"format": "",
				"formattedContent": ""
			}
		}]
	}, {
		"key": {
			"id": "20240208164505-39qizr5",
			"name": "模板",
			"type": "template",
			"icon": "",
			"numberFormat": "",
			"template": ".action{ addf .餐饮 .服装 }"
		}
	}],
	"viewID": "20240208163918-47rg4d7",
	"views": [{
		"id": "20240208163918-47rg4d7",
		"icon": "",
		"name": "表格",
		"type": "table",
		"table": {
			"spec": 0,
			"id": "20240208163918-o93ff8j",
			"columns": [{
				"id": "20240208163918-odyw3i7",
				"wrap": false,
				"hidden": false,
				"pin": false,
				"width": "152px"
			}, {
				"id": "20240208164200-aoez2h2",
				"wrap": false,
				"hidden": false,
				"pin": false,
				"width": "97px"
			}, {
				"id": "20240208164420-mwu0h5t",
				"wrap": false,
				"hidden": false,
				"pin": false,
				"width": "126px"
			}, {
				"id": "20240208164505-39qizr5",
				"wrap": false,
				"hidden": false,
				"pin": false,
				"width": "129px"
			}],
			"rowIds": ["20240208164407-q5jgzt1", "20240208163920-51nyfyp"],
			"filters": [],
			"sorts": [],
			"pageSize": 50
		}
	}]
}

我们在文档中插入一个数据库块,实际上只是引用了这个数据库的 ID,数据并没有保存在这个文档的.sy 文件中,上图数据库块实际内容为:

<div data-type="NodeAttributeView" data-av-id="20240208163918-rxu3llx" data-av-type="table"></div>

所以我们复制、粘贴数据库块的时候得到的是一个镜像数据库,新旧数据库块均引用了同一个数据库 json 文件,操作不同的镜像数据库块实际上是在操作同一个 json 文件,所以数据会在镜像数据库块中同步。数据库的视图配置也是保存在 json 文件中的,所以镜像数据库会拥有一样的视图。

@88250 镜像数据库显示同样的视图这个设定是不合理的,数据库块显示的视图 ID 应该保存在数据库块中,这样不同的块就能显示不同的视图。

如果说数据库是一座房子,视图就是房子的窗户,透过不同的窗户可以看到不同的房间、不同的内容。目前数据库块已经能够通过 ial 属性指定视图 ID。

<div data-type="NodeAttributeView" data-av-id="20240320162849-h7ft87i" data-av-type="table"></div>
{: id="20240328185202-s4wb423" updated="20240328185202" custom-sy-av-view="20240412114213-t3jq34i"}

我们可以总结:

  • 数据库:实质是 工作空间\data\storage\av 文件夹下某个 json 文件。
  • 数据库块:编辑器中用来显示、编辑数据库的块,实际是对数据库的引用,并不包含数据库内容。
  • 镜像数据库:引用同个数据库的多个数据库块互为镜像数据库。

image

经测试,删除所有数据库块,数据库的 json 文件也不会被删除,数据库并不会因为删除数据库块而丢失。后续有需要的话可以手动引用数据库。

数据库的深度复制

从上个章节可以知道,直接复制数据库块只会得到镜像数据库,并不会得到数据库的副本。

目前思源并没有对数据库进行深度复制的方法,但是可以对某个数据库的结构进行复用:将数据库导出为模板。

导出的模板.md 文件的内容其实和直接 ctrl+c 复制数据库块得到的结果差不多,有效信息只有数据库的 ID 号。在调用该模板的时候,思源会根据数据库 ID 将数据库结构复制一下,得到一个新的数据库 json 文件,并在编辑器中进行引用。

数据库与块

数据库的主键可以是块,在主键单元格内双击 [ 键就能对块进行引用。数据库的属性会在块的属性面板—数据库页签中显示,可以在这个页签中对数据库进行修改。

image

点击页面上的数据库名称后,会显示引用该数据库的数据库块

image

‍文档原文

可通过思源笔记本或文档的右键菜单导入下面的 .sy.zip 文件查看包含数据库的原文。

数据库功能简介.sy.zip

image.png

  • 思源笔记

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

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

    18680 引用 • 69697 回帖
4 操作
qiancang 在 2024-04-15 21:06:24 更新了该帖
qiancang 在 2024-04-12 11:44:28 更新了该帖
qiancang 在 2024-02-21 16:10:40 更新了该帖
qiancang 在 2024-02-21 13:40:35 更新了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 镜像数据库显示同样的视图这个设定是不合理的,数据库块显示的视图 ID 应该保存在数据库块中,这样不同的块就能显示不同的视图。

    赞同这个,另外还要考虑视图更改的情况下要如何处理

    1 回复
  • Liuzn 1 评论

    借楼推荐自己的帖子 😄

    模板列代码分享

    已加入正文,感谢分享 ❤
    qiancang
  • 数据库属性中的 数据库页签 已经不在界面上直接显示了吧?

  • zhangdongdi

    感谢分享

    我不久前也尝试了一下数据库的内容,尝试后将文档中的数据库块全部删除。看了你的介绍后我去看了 data/storage/av 下的内容,发现里面确实有一些 json 文件,我之前的操作没能删除这些文件

    那么想要删除这些文件应该怎么做呢,我看了设置/资源中是没有未引用的资源文件的

    1 回复
  • qiancang

    在确定已经不需要这些文件的情况下,直接手动删除就行

    1 回复
  • zhangdongdi

    试了一下,如果想要使用数据库,又想删除未引用的文件,目前是非常困难的

    我尝试用 Query 挂件查询数据库块和查看.json 文件里的内容,json 中的 id 字段并没有对应到 Query 查询结果的任何一列

    不过对我来说没啥问题,我把 av 文件夹下所有内容都删了 😂

    1 回复
  • azure9 2 赞同

    需要一个可以把表格转换为数据库的功能,要不然一个一个输也太难受了

    1 回复
  • qiancang 1 赞同

    异常文档处理 - by 浅沧 - 动作信息 - Quicker (getquicker.net)

    可以用这个 quicker 动作处理,已经增加了删除未引用数据库的功能。

  • 说是可以表格直接粘贴,不过要现增加对应的列和行的数量

  • Pigsurfing 1 评论

    想请问下,我新建的数据库,每一列的宽度手动拖动以后,过一段时间(或者是关掉文档重新打开),宽度又回到了默认的宽度,以至于有些列长的数据显示不全,短的数据留白太多。应该怎么解决,我看到您帖子中的图片并没有出现这种问题,请问呢您用的是哪一个主题呢?

    这个 BUG 将在下个版本修复:Issue #10865 · siyuan-note/siyuan
    JeffreyChen 1 赞同
  • f8401067 1 评论

    赞同 +1

    不用 +1 了,新版已经改成这样了
    JeffreyChen
请输入回帖内容 ...