我有一个类似 SO、Wordpress 等的网站,您可以在其中发布帖子,并且您可以在上面添加(可选)标签。
处理此问题的通用数据库模式是什么?我假设它是一个 many<->many 结构,有三个表。
有人有想法么?
我有一个类似 SO、Wordpress 等的网站,您可以在其中发布帖子,并且您可以在上面添加(可选)标签。
处理此问题的通用数据库模式是什么?我假设它是一个 many<->many 结构,有三个表。
有人有想法么?
三表多对多结构应该没问题。
例如。Posts, PostsToTags(post_id,tag_id), Tags
关键是索引。确保您的 PostsToTags 表被双向索引(post_id,tag_id
和tag_id,post_id
),如果读取性能非常关键,您可以引入索引视图(它可以为您提供 post_name、tag_name)
当然,您还需要帖子和标签的索引。
“我假设它是一个 many<->many 结构,有三张桌子。有人有什么想法吗?”
更重要的是,没有任何严肃的选择,不是吗?多对多关系中的两个关系表至少需要一个关联表来承载所有外键组合。
这样做吗?谁知道。他们的数据模型包括引用计数,以及 - 众所周知 - 日期时间戳和原始创建者以及许多其他关于标签的垃圾。
至少,必须有三张桌子。
他们在 SO 上做了什么很难知道。
我不完全确定这是否是 SO 使用的。但是这里有一个很好的讨论。
看看 wordpress 如何处理帖子的标签是个好主意,它会给你一些想法。
当然,另一种可能性是只有两个表。
鉴于最多有 5 个标签,一个问题表具有五个对标签表的可空外键引用是可能的。
不是很规范化,但它可能会更高效。