Структура базы данных SQL для пользовательских категорий

Я создаю веб-сайт онлайн-блога, и для каждого сообщения в блоге я хотел бы, чтобы пользователь мог создавать/редактировать/удалять свою собственную категорию, чтобы они могли классифицировать свои сообщения.

Что обычно считается хорошей структурой базы данных для пользовательских категорий?

Это мой предложенный дизайн стола. (Есть ли название для этого типа БД?)

USER_TABLE
user_id (pk), user_name

CATEGORY_TABLE
идентификатор_категории (pk), название_категории

USER_CATEGORIES
user_id (fk), category_id (fk)

Спасибо за помощь. Я уверен, что где-то есть сообщение об этом, но я не смог его найти. Если это обман, пожалуйста, дайте мне знать, и я удалю этот вопрос.


person justinl    schedule 27.10.2009    source источник
comment
Мне любопытно... зачем разделять USER_CATEGORIES и CATEGORY_TABLE, когда можно просто поместить имя категории в USER_CATEGORIES?   -  person ty812    schedule 27.10.2009
comment
@Martin ... я считаю, что если 2 пользователя имеют одинаковые имена категорий, они не становятся двумя отдельными строками, и таким образом они могут просто ссылаться на одно и то же имя категории.   -  person Sabeen Malik    schedule 27.10.2009
comment
@Martin: Потому что ваше предложение поддерживает сопоставление только одного пользователя с категорией.   -  person OMG Ponies    schedule 27.10.2009


Ответы (3)


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

person jray    schedule 27.10.2009

Я думаю, что ваша схема выглядит хорошо. Вы храните метки категорий в одной таблице, чтобы избежать дублирования, а затем просто назначаете их идентификаторы пользователям.

person Matt Wrock    schedule 27.10.2009

Если то, что вы пытаетесь сделать, это иметь «частные» категории для каждого пользователя, тогда это нормально. Если, с другой стороны, категории должны быть общедоступными (что-то вроде тегов в stackoverflow), то вы можете рассмотреть другой вариант - не сохранять отношение пользователь-> категория, вместо этого добавить поле use_counter в таблицу категорий и использовать триггеры для увеличения его, когда категория используется (запись в блоге классифицируется) или уменьшается, когда она «освобождается» (запись в блоге удаляется/ее категория удаляется). Когда use_counter достигнет 0 — удалить категорию.

person kubal5003    schedule 27.10.2009
comment
Привет, кубал, спасибо за эту информацию. Раньше я никогда не думал о том, чтобы реализовать это таким образом. - person justinl; 27.10.2009