2009-03-12 6 views
8

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

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

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

+0

Почему это имеет значение, как SO реализует это. лучше открыть новый вопрос, который не является специфичным (если вам интересно, как SO реализует материал, отправляйте Jeff по электронной почте) –

+0

true, я исправлю свой вопрос, чтобы сделать его не относящимся к SO. это было в основном как пример, больше всего на свете. –

ответ

9

Три таблицы от многих до многих структура должна быть в порядке.

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

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

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

+0

Мне было интересно, был ли я на правильном пути, и это похоже :) –

0

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

1

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

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

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

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

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

0

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

+0

wordpress делает много для многих с тремя таблицами, на которые я верю. –

-1

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

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

Не очень нормализованный, но он может быть более совершенным.

+0

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

+0

Что делать, если теги были сохранены в одном разделительном поле varchar, и вы могли бы использовать запрос типа «% tag%» для этого поля, возможно, все еще не очень индексируемый. – benPearce

+0

@ sambo99 - true в этом случае и хорошая точка. Поиск вопросов для определенного тега будет сосать. – Damovisa