数据库功能简介

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

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

数据库可以用来干嘛?

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

imageimage

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

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

插入数据库块

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

插入数据库

image

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

数据库列类型

数据库的列类型有:

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

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

关联列与汇总列

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

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

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

关联列

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

汇总列

模板列

请查看模板的终极教程:思源模板功能新人指南:模板语法 + 函数 + md 块语法 - 链滴 (ld246.com)

下面这些也可以参考:

数据库的保存与显示

数据库的数据在 工作空间\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 文件也不会被删除,数据库并不会因为删除数据库块而丢失。后续有需要的话可以手动引用数据库。

数据库的深度复制

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

要对数据库进行深度复制,需要使用块标菜单中的 复制 → 复制为完整副本 功能,如果没有此功能,需要升级一下思源笔记。

得到完整副本后,将其剪切、粘贴到需要的位置即可。

数据库副本.gif

数据库与块

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

image

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

image

‍文档原文

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

数据库功能简介.sy.zip

image.png

  • 思源笔记

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

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

    22336 引用 • 89376 回帖
6 操作
qiancang 在 2024-06-11 15:43:51 更新了该帖
qiancang 在 2024-05-11 17:21:31 更新了该帖
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 更新了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • Liuzn 1 评论

    借楼推荐自己的帖子 😄

    模板列代码分享

    已加入正文,感谢分享 ❤
    qiancang
  • 其他回帖
  • 镜像数据库可不可以修改一下。
    数据库功能更新之后,我没有读文档,因为想复用结构失败了才看到这个帖子。

    我的场景是:现在在找工作,技术和产品同时找,做好了技术方向的数据库,复制了一份,结果发现是个镜像。

    复制文本块,我们复制的是内容。复制为引用块、嵌入块,才会保留这种“链接”的感觉。所以我感觉这两者之间逻辑有点冲突。

    能不能在复制数据库的时候,给两个选项 一个复制为镜像 一个复制内容?

    1 回复
  • Pigsurfing 1 评论

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

    这个 BUG 将在下个版本修复:Issue #10865 · siyuan-note/siyuan
    JeffreyChen 1 赞同
  • 请关注这个 issue :Issue #11460 · siyuan-note/siyuan

    急需的话去回个帖,提高开发优先级

  • 查看全部回帖