【问题标题】:Stackoverflows Tags system, How To堆栈溢出标签系统,如何
【发布时间】:2010-08-22 15:53:28
【问题描述】:

好的,现在我可以理解 SO 的搜索系统主要基于标签,他们使用的标签系统在这方面非常好,但我想做的是为我自己的项目复制它。

现在我可以理解如何使用外键等,但我不确定这里是如何开发的,他们使用 3 个表还是 2 个等。

他们是如何开发的,你能给我一些 MySql 的例子吗?

【问题讨论】:

标签: php mysql tags foreign-keys


【解决方案1】:

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;

将标签与问题/帖子相关联记录在数据库中的多对多表中 - 在 SO 中,它称为 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 表:

  • 只有两列,这些列是主键 - 这确保不能重复,并且任何一方(帖子或标签)都不能为 NULL。
  • 外键要求表中存储的数据必须已经存在于相应的外表中...

如果您想查看 SO 架构,check out the Stack Data Explorer - 当您编写查询时,SO 架构在右侧可用。

【讨论】:

  • 感谢您的回答,我现在要把它扔掉,做我自己的样品,看看我能用它做什么!谢谢
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 2014-03-16
  • 2019-05-18
  • 2010-11-14
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多