2010-08-22 58 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