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