【问题标题】:How can I make a tag system like stackoverflow.com?如何制作像 stackoverflow.com 这样的标签系统?
【发布时间】:2012-03-03 19:02:42
【问题描述】:

我要创建一个网站来发布标签。标签最多可以有五个标签,例如 stackoverflow.com。

谁能告诉 StackOverflow 的标签系统?具有post和tag的关系数据库系统。

我应该在 post 表中添加一列还是应该为它创建单独的标签表?标签可以用空格或逗号分隔。

【问题讨论】:

  • 有一个相关问题回答here

标签: database tags relational-database


【解决方案1】:

一定要创建一个包含可用标签列表的表格。

您还应该创建一个单独的应用标签表,其中包含:

  • 您的帖子的外键。
  • 标签的外键。
  • 序列号 显示顺序。
  • 您可能感兴趣的任何其他内容,例如谁 添加标签或添加标签的时间。

您希望使用规范化设计,因为如果您想更改业务规则以允许更少或更多标签,则使用非规范化设计(添加 5 列)会中断。此外,如果您有其他信息需要保留,例如添加标签的时间以及由谁添加,它也无济于事。


编辑:DDL

应 OP 的要求:

CREATE TABLE post (
  id            INTEGER       IDENTITY 
, title         VARCHAR(1000) NOT NULL
, added_date    DATETIME      NOT NULL
, posting_user_id INTEGER     NOT NULL
, ... (and so forth) ...
, PRIMARY KEY (id)
, FOREIGN KEY (posting_user_id) REFERENCES posting_user (id)
);

CREATE TABLE tag (
  id            INTEGER       IDENTITY
, term          VARCHAR(20)   NOT NULL
, description   VARCHAR(1000) NULL
, ... (and so forth) ....
, PRIMARY KEY (id)
);

CREATE TABLE applied_tag (
  post_id       INTEGER       NOT NULL
, tag_id        INTEGER       NOT NULL
, display_order INTEGER       NOT NULL
, tagging_user  INTEGER       NOT NULL
, applied_date  DATETIME      NOT NULL
, ... (anything else you want)....
, PRIMARY KEY (post_id, tag_id_, display_order) -- Or use an auto-increment, but this is unique.
, FOREIGN KEY (post_id) REFERENCES post (id)
, FOREIGN KEY (tag_id) REFERENCES tag (id)
, FOREIGN KEY (tagging_user) REFERENCES posting_user (id)
);

【讨论】:

  • 你能发布关系数据库架构吗?这将有助于理解。
  • 这不是 Stackoverflow 实现系统的方式,正如您在 Stack Exchange Data Explorer 中看到的那样
  • @Ivanzinho 我想这一切都取决于“喜欢”这个词的含义。如果您认为它的意思是“SO 究竟是如何做到的?”那不是我回答的问题。如果您认为它的意思是“我怎样才能做出与 SO 具有相似功能的东西?”然后我确实回答了这个问题。如果您查看 SO 架构,您会发现它们的标签完全按照我描述的方式工作,尽管我使用不同的表和列名称,而且,我想,我的架构还捕获有关谁做了什么/何时以及什么顺序的附加信息它应该显示在中。
猜你喜欢
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多