我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

数据库服务和管理,MySQL/PostgreSQL/Oracle/Sybase 等
回复
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43
送出感谢: 2 次
接收感谢: 2 次

我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#1

帖子 潇洒走一回 » 2011-05-11 22:50

我比较喜欢的笔记管理软件是zim. 它简单易用, 很多其他的笔记管理软件我都感觉太臃肿.

zim通过树形分层来管理笔记条目, 归好类后, 找到特定的条目还是很方便的. 但是单独通过分层归类来管理笔记我感觉还是不足的. 很多碎片很难归到一个合适的分类, 如果建立了过多的类别, 构造了过深的层次的话, 可能以后就不知到去哪寻找曾经记录的知识碎片了.

我比较喜欢的管理方式是: 建立一个词条时, 给它贴上多个标签, 比如建立了一个词条: "Sed 单行脚本快速参考", 同时给它贴上这样一些标签: "sed", "regex". 这样日后以 "regex" 进行搜索时, 该词条和其他应用了"regex"标签的词条就会被列出.

我选择使用 sqlite 把词条信息存入数据库. 现在考虑的是应如何设计数据表.

一个表应该不合适吧? 应为每个词条可以赋予任意多个标签, 如果只有一个表的话, 需要有一个 labels 的列, 里面存放一个逗号分割的字符串代表多个标签, 这样修改标签的时候比较麻烦, 检索效率也会受影响吧?

如果多个表应该如何设计呢?

希望有经验的达人给提供个好的设计方案, 我对数据库的优化设计不懂...

谢谢!
scutdk
帖子: 298
注册时间: 2009-07-25 19:23
送出感谢: 3 次
接收感谢: 0

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#2

帖子 scutdk » 2011-05-12 0:17

我记得以前看一个视频,那老师说这种情况可以用key value两个字段来解决,这样就可以设置无限多的标签了

Ubuntu 桌面培训- 全中文官方文档,含汉化截图,提供PDF
头像
sonofthewind
帖子: 557
注册时间: 2008-10-12 12:58
来自: 天津
送出感谢: 0
接收感谢: 0

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#3

帖子 sonofthewind » 2011-05-12 0:37

现在用zim多了,的确遇到这个问题了,分层是方便,分类就无能为力了,有时侯要找一个纪录要一层层的去翻,不爽,但zim是方便,暂且没换的意思
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43
送出感谢: 2 次
接收感谢: 2 次

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#4

帖子 潇洒走一回 » 2011-05-13 16:59

scutdk 写了:我记得以前看一个视频,那老师说这种情况可以用key value两个字段来解决,这样就可以设置无限多的标签了
谢谢啊!具体是怎么弄呢?
头像
thomasxie
帖子: 317
注册时间: 2009-11-22 15:29
送出感谢: 1 次
接收感谢: 0
联系:

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#5

帖子 thomasxie » 2011-07-12 17:38

:em11
时间就像一张网,你撒在那里,你的收获就在那里。
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43
送出感谢: 2 次
接收感谢: 2 次

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#6

帖子 潇洒走一回 » 2011-08-19 23:30

sonofthewind 写了:现在用zim多了,的确遇到这个问题了,分层是方便,分类就无能为力了,有时侯要找一个纪录要一层层的去翻,不爽,但zim是方便,暂且没换的意思
你觉得用直接 CMS 这样的东西 维护/发布 自己的知识怎么样呢?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#7

帖子 eexpress » 2011-08-19 23:33

现在不是吹嘘nosql了嘛。
全都是key value了。

其实zim的全局搜索就够了。或者直接grep都够,就是文本嘛。

要tag,可以tiddlywiki。
● 鸣学
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43
送出感谢: 2 次
接收感谢: 2 次

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#8

帖子 潇洒走一回 » 2011-08-19 23:45

eexpress 写了:现在不是吹嘘nosql了嘛。
全都是key value了。

其实zim的全局搜索就够了。或者直接grep都够,就是文本嘛。

要tag,可以tiddlywiki。
现在流行 Tag,没有 Tag是致命伤.
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43
送出感谢: 2 次
接收感谢: 2 次

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#9

帖子 潇洒走一回 » 2011-08-19 23:48

潇洒走一回 写了:
eexpress 写了:现在不是吹嘘nosql了嘛。
全都是key value了。

其实zim的全局搜索就够了。或者直接grep都够,就是文本嘛。

要tag,可以tiddlywiki。
现在流行 Tag,没有 Tag是致命伤.
神马tiddlywiki, 不透名.

我宁愿localhost跑一个wordpress. 当然我对wordpress也不满意,它重内容发布, 轻知识管理.

它不是CMS嘛, 我决定用Django做一个, 叫KMS.
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43
送出感谢: 2 次
接收感谢: 2 次

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#10

帖子 潇洒走一回 » 2011-08-19 23:53

回到我问的问题, 那是很久以前发的, 今天偶尔来逛.

我太浮躁了, 这是数据库设计中很常见的问题, 就是多对多联系嘛!

在 Django 里面

代码: 全选

tags = models.ManyToManyField(Tag)
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43
送出感谢: 2 次
接收感谢: 2 次

Re: 我想做一个笔记管理系统, 大家给分析下应如何设计数据表呢.

#11

帖子 潇洒走一回 » 2011-08-20 0:06

下面是我用 Django 设计的完整的 Entry 模型:

代码: 全选

class Entry(BaseModel):
    title = models.CharField(max_length=200, unique=True, blank=False)
    public = models.BooleanField(default=True)
    content = models.TextField()
    mime = models.ForeignKey(Mime)
    category = models.TextField(default="unsorted")
    #category = models.ForeignKey(Category)
    tags = models.ManyToManyField(Tag)
    last_modified = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.title

    def apply_tags(self, tags):
        assert not isinstance(tags, str)
        for i in set(tags):
            if i.strip(): self.tags.add(Tag.objects.get_or_create(name=i)[0])
        return True

    def rm_tag(self, tag):
        try:
            self.tags.remove( Tag.objects.get(name=tag) )
        except Tag.DoesNotExist:
            pass    # ignore tags that does not exist.

        return True
    
    def html_output(self):
        mime = self.mime.name
        if mime == 'text/x-rst':
            output = rst2html(self.content, 'html_body')
        elif mime == 'text/plain':
            output = plain2html(self.content)
        else: output = self.content
        return output
    def summary(self):
        return HTMLSummary(self.html_output(), 200)

    class Meta(BaseModel.Meta):
        ordering = ['title']
回复

回到 “数据库管理”