电子笔记本的数据库设计

时间:2009-07-29 20:24:52

标签: database-design

我对数据库设计有疑问。我想为自己的教育创建一个电子笔记本或“Everything Bucket”。我知道有很多替代品,如EverNote或Circus Ponies Notebook,或开源KeepNotes或Red Notebook。但是,就像我说的那样,我想创造自己的学习经验。

我对数据库设计没有多少经验。我的问题是设计应该是什么样的 - 表格,索引等。我正在考虑的方式是

  • 每个笔记本都有零个或多个笔记或页面。
  • 每个页面都有唯一的标题和内容。除了“真实”内容之外,还会有创建日期,最后修改日期等元数据。
  • 即使类别为“无”,每个页面也属于一个或多个类别。类别可能有其他子类别。例如,在“计算机科学”类别下,可能存在“编程语言”和“编译器设计”等子类别。
  • 每个页面都有零个或多个与之关联的标签。这些类似于类别但不完全相同。例如,论文可能属于“编译器设计”类别,但可能会使用作者姓名,期刊名称,出版年份等标记。
  • 页面内容应包含可以保存文本,图像,链接等的HTML流。它们可能是相当大的数据块。将某些部分(如图像)与文本分开存储是否有意义? (如果我也可以显示PDF文档的内容,那将会很棒。但此时并不需要这样做。)
  • 如果一个页面可以包含对同一数据库中其他页面的交叉引用,例如wiki,那也不错。

我希望能够按类别,标签,部分标题或全文进行搜索。我想这个程序可以有几个不同的数据库视图,显示类别,标签和标题,所以如果可以快速枚举它们会很好。

那么,鉴于这些愿望,一个好的数据库会是什么样子?我假设将使用SQL数据库,但我没有承诺 - 像Sleepycat Java Edition数据库也可以。

提前感谢您的建议!

2 个答案:

答案 0 :(得分:1)

从笔记本开始:

CREATE TABLE `notebook` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 64 ) NOT NULL ,
PRIMARY KEY ( `id` )
)

为笔记本上的任何属性添加字段。然后为其他内容创建类似的表,例如页面,类别,标记等,确保它们都具有唯一的ID。

现在添加这些表的关系 - 一对一,一对多,多对多。页面将具有notebook_id字段,因为它属于笔记本。页面可以属于许多类别,因此请使用page_id和category_id创建链接表。

首先创建完美的数据结构,然后考虑查询它:)希望有所帮助。

答案 1 :(得分:0)

我认为TiddlyWikiZim符合您提到的要求。它们不使用SQL风格的关系数据库意义上的“数据库”,但可以搜索,链接,标记,存储图片等。