obsidian-language-learner
obsidian-language-learner copied to clipboard
建议: 有考虑更换本地数据库存储方式吗?
如题, 因为使用浏览器的 IndexedDB
导致后续不能通过 git
或者 'remote svae' 进行词库同步. 建议使用 SQLite3
. 如有这方面考虑的话我也可以后续提交 pr
obsidian好像没有内置sqlite,有通过插件使用sqlite进行数据库操作的方法吗?
不需要通过obsidian.... 可以通过sqlite提供插件读取和写入. 我这边先写一下
嗯,可以先试试可行性。我印象中sqlite是二进制的库,得链接后才能用吧,或者是单独提供一个二进制执行程序?
我这边之前写过一个分离的后端用的sqlite,可以参考一下表的结构:
-- Your SQL goes here
CREATE TABLE IF NOT EXISTS expressions(
id INTEGER PRIMARY KEY NOT NULL,
expression TEXT NOT NULL UNIQUE,
meaning TEXT NOT NULL,
status INTEGER NOT NULL,
type TEXT NOT NULL,
--- 现在没办法生成TIMESTAMPTZ,自己在schema.rs里面改一下
date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS connections(
eid_from INTEGER NOT NULL REFERENCES expressions(id) ON DELETE CASCADE,
eid_to INTEGER NOT NULL REFERENCES expressions(id) ON DELETE CASCADE,
what TEXT,
PRIMARY KEY(eid_from,eid_to)
);
CREATE TABLE IF NOT EXISTS tags(
id INTEGER PRIMARY KEY NOT NULL,
name TEXT NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS expression_tag(
eid INTEGER NOT NULL REFERENCES expressions(id) ON DELETE CASCADE,
tid INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
PRIMARY KEY(eid,tid)
);
CREATE TABLE IF NOT EXISTS notes(
id INTEGER NOT NULL PRIMARY kEY,
eid INTEGER NOT NULL REFERENCES expressions(id) ON DELETE CASCADE,
text TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS sentences(
id INTEGER NOT NULL PRIMARY kEY,
source TEXT NOT NULL UNIQUE,
trans TEXT,
origin TEXT
);
CREATE TABLE IF NOT EXISTS expression_sentence(
eid INTEGER NOT NULL REFERENCES expressions(id) ON DELETE CASCADE,
sid INTEGER NOT NULL REFERENCES sentences(id) ON DELETE CASCADE,
PRIMARY KEY(eid,sid)
);
感谢提供数据库结构,我先开发尝试方案的可行性
参考以下链接: https://www.runoob.com/sqlite/sqlite-tutorial.html https://juejin.cn/post/6844903693578403854 https://www.npmjs.com/package/sqlite3
开发插件时候有遇到这个问题吗?
换成另一种可以替换的本地文件数据库了 tedb-electron-storage, 不过可惜默认不支持自定义存储目录, 需要单独新建 npm
仓库. 如果能接受使用这个数据库的话。 我后面可以发起一个测试版本合并请求
已发起 合并请求到开发分支