2012-02-11 52 views
4

我打算用一個標籤發佈一個網站。標籤可以達到五個標籤,如在stackoverflow.com。我如何製作一個標籤系統像stackoverflow.com?

任何人都可以告訴標籤系統的StackOverflow嗎?帶有帖子和標籤的關係數據庫系統。

我應該在張貼表中添加一列還是應該爲它創建單獨的標籤表?標籤可以用空格或逗號分隔。

回答

8

絕對創建一個包含在列表可用標籤的表。

你也絕對應該創建一個包含獨立應用的代碼表

  • 外鍵,您的文章。
  • 您的標記的外鍵。
  • 顯示順序的序號 。
  • 還有什麼可能會讓你感興趣的,比如誰添加了標籤或添加了標籤。

你想,因爲使用了非規範化的設計(增加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) 
); 
+0

你能後關係型數據庫schemal。這將有助於理解。 – shibly 2012-02-11 18:04:55