Схема базы данных для тегов (например, каждая публикация имеет несколько дополнительных тегов) - PullRequest
8 голосов
/ 13 марта 2009

У меня есть такой сайт, как SO, Wordpress и т. Д., Где вы делаете сообщение, и у вас могут быть (необязательно) теги против него.

Какая общая схема базы данных для этого? Я предполагаю, что это структура много <-> много, с тремя таблицами.

У кого-нибудь есть идеи?

Ответы [ 5 ]

9 голосов
/ 13 марта 2009

Структура «три таблицы ко многим» должна быть в порядке.

Например. Posts, PostsToTags(post_id,tag_id), Tags

Ключ индексации. Убедитесь, что ваша таблица PostsToTags проиндексирована в обоих направлениях (post_id,tag_id и tag_id,post_id), а также, если производительность чтения крайне важна, вы можете ввести индексированное представление (которое может дать вам post_name, tag_name)

Вам, конечно, понадобятся также индексы для сообщений и тегов.

1 голос
/ 13 марта 2009

«Я предполагаю, что это структура много <-> много, с тремя таблицами. У кого-нибудь есть идеи?»

Более того, серьезных альтернатив нет, не так ли? Две реляционные таблицы в отношении «многие ко многим» требуют, чтобы по крайней мере таблица ассоциации содержала все комбинации внешних ключей.

ТАК это делает? Кто знает. Их модель данных включает в себя подсчет ссылок, и, насколько известно, отметки даты и времени, оригинального создателя и множество других нежелательных сообщений о теге.

Минимально должно быть три таблицы.

Трудно понять, что они делают на SO.

0 голосов
/ 13 марта 2009

Другая возможность, конечно, в том, что есть только две таблицы.

Учитывая, что существует не более 5 тегов, возможна таблица Вопросов с пятью обнуляемыми ссылками внешнего ключа на таблицу тегов.

Не очень нормализовано, но может быть более производительным.

0 голосов
/ 13 марта 2009

Было бы неплохо взглянуть на то, как WordPress обрабатывает теги для сообщений, и это даст вам некоторое представление.

0 голосов
/ 13 марта 2009

Я не совсем уверен, использует ли это ТАК. Но здесь есть хорошая дискуссия .

...