Система тегов Stackoverflows, Как сделать - PullRequest
0 голосов
/ 22 августа 2010

Хорошо, так что теперь я могу понять, что поисковая система SO в основном основана на тегах, система тегов, которую они используют, очень хороша в этом, но я хочу повторить ее для моих собственных проектов.

Теперь я могу понять, как использовать внешние ключи и тому подобное, но я не совсем уверен, как они были разработаны здесь, используют ли они 3 таблицы или 2 и т. Д.

Как они его разработали, можете ли вы показать мне несколько примеров MySql?

1 Ответ

2 голосов
/ 22 августа 2010

ТАК рассматривает вопросы и ответы как одно и то же - 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:

  • - это только два столбца, и эти столбцыпервичный ключ - это гарантирует, что не может быть дубликатов, и что любая из сторон (post или tag) никогда не может быть NULL.
  • Внешний ключ требует, чтобы данные, хранящиеся в таблице, уже существовали в соответствующей внешней таблице ...

Если вы когда-нибудь захотите взглянуть на схему SO, Изучите Stack Data Explorer - при составлении запроса схема SO доступна с правой стороны.

...