2010-08-22 56 views
0

行,所以現在可以明白,SO的搜索系統是圍繞標籤主要根據,他們所使用的標籤系統是一個很好的人,但我想要做的就是複製它爲我自己的項目。Stackoverflows標籤系統,我如何

現在我能理解如何使用外鍵等,但我不能完全確定它是如何在這裏開發的,他們使用3臺或2等

他們是如何開發它,你可以給我看一些MySql的例子?

+0

相關:http://stackoverflow.com/questions/3539744/best-way-to-store-tags-in-a-database – 2010-08-22 15:58:21

+0

也相關:http://stackoverflow.com/questions/3152850/best-方式到店-A-許多一對多的關係,在MySQL的 – quantumSoup 2010-08-22 15:59:41

回答

2

SO考慮的問題和答案是同樣的事情 - 一個Post。這裏是一個精簡的MySQL相當於表:

DROP TABLE IF EXISTS `example`.`post`; 
CREATE TABLE `example`.`post` (
    `postid` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`postid`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

標籤都存儲在一個典型的類型代碼表:

DROP TABLE IF EXISTS `example`.`tags`; 
CREATE TABLE `example`.`tags` (
    `tagid` int(10) unsigned NOT NULL auto_increment, 
    `tagname` VARCHAR(45) NOT NULL, 
    PRIMARY KEY (`tagid`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

關聯標籤的一個問題/後記錄在數據庫中多對-many表 - 在做,這就是所謂的POSTTAGS

DROP TABLE IF EXISTS `example`.`posttags`; 
CREATE TABLE `example`.`posttags` (
    `postid` int(10) unsigned NOT NULL auto_increment, 
    `tagid` int(10) unsigned NOT NULL default '0', 
    PRIMARY KEY (`postid`,`tagid`), 
    KEY `fk_tag` (`tagid`), 
    CONSTRAINT `fk_post` FOREIGN KEY (`postid`) REFERENCES `post` (`postid`), 
    CONSTRAINT `fk_tag` FOREIGN KEY (`tagid`) REFERENCES `tags` (`tagid`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

POSTTAGS表:

  • 只有兩列,而這些列是主鍵 - 這樣可以確保不能有重複,任何一方(郵寄或標籤)不能爲空。
  • 外鍵要求存儲在表中的數據必須在各自的外交表已經存在...

如果你想看看SO模式,check out the Stack Data Explorer - 當你編寫一個查詢, SO模式在右側可用。

+0

感謝您的回答,我去把它現在在做我自己的樣品看看有什麼我可以用它做什麼! thansk – RobertPitt 2010-08-22 16:59:03

+0

如夢:)三江源,這裏有一些好人緣(Y) – RobertPitt 2010-08-25 14:31:06