Spear
почемучка
Структура таблиц и логика работы с тегами (теги контента, метки)
Здравствуйте,
стулкнулся с такой задачей: делается проект UGC направленности, то есть весь контент - от пользователей.
Получил "под дых" там, где ожидал меньше всего, а именно - в структуре базы данных и логике работы с тегами (матками) контента.
Собирался делать так:
1. Таблица tags_lib - в ней хранятся все теги в единственном экземпляре, и их номера (идентификаторы). Структура - tag_id (int), tag (varchar)
например:
1, PHP
2, Google
3, Microsoft
2. Таблица связи тега с контентом tag_2_content. Структура: object_id (номер "помеченной" новости, например), tag_id (номер тега), rel_type (тип контента, например - новость, компания)
Пример записи в такую таблицу для Новости ХХХХ, номер новости - 123,теги новости - "Google, Microsoft":
object_id, tag_id, rel_type
123 - 2 - news
123 - 3 - news
Все просто и красиво. Но проблема вот в чем - как быть, если кому-то вздумается указать теги не как "Google, Microsoft" а скажем "GOOGLE, MicroSoft". То есть схема эта работать будет, но она сделает так что теги превратятся в "Google, Microsoft", а нужно чтобы теги, введенные пользователями, отображались под контентом именно в таком виде, в котором их указали. Кому-то проще ввести "php", кому-то "PHP".
Пока есть только 1 вариант - в дополнение к приведенной схеме также хранить все теги статьи в дополнительном поле, именно в таком виде в котором их указал пользователь. Это приведет в дублированию данных, но:
1. пользователь будет видеть теги так, как он их ввел
2. для выборки по тегам это поле исопльзоваться не будет, для вбыорки будет использоваться таблица связей - tag_2_content
Подскажите, пожалуйста, как быть? Контента на сайте будет достаточно много (тегов, соответственно, тоже)
Здравствуйте,
стулкнулся с такой задачей: делается проект UGC направленности, то есть весь контент - от пользователей.
Получил "под дых" там, где ожидал меньше всего, а именно - в структуре базы данных и логике работы с тегами (матками) контента.
Собирался делать так:
1. Таблица tags_lib - в ней хранятся все теги в единственном экземпляре, и их номера (идентификаторы). Структура - tag_id (int), tag (varchar)
например:
1, PHP
2, Google
3, Microsoft
2. Таблица связи тега с контентом tag_2_content. Структура: object_id (номер "помеченной" новости, например), tag_id (номер тега), rel_type (тип контента, например - новость, компания)
Пример записи в такую таблицу для Новости ХХХХ, номер новости - 123,теги новости - "Google, Microsoft":
object_id, tag_id, rel_type
123 - 2 - news
123 - 3 - news
Все просто и красиво. Но проблема вот в чем - как быть, если кому-то вздумается указать теги не как "Google, Microsoft" а скажем "GOOGLE, MicroSoft". То есть схема эта работать будет, но она сделает так что теги превратятся в "Google, Microsoft", а нужно чтобы теги, введенные пользователями, отображались под контентом именно в таком виде, в котором их указали. Кому-то проще ввести "php", кому-то "PHP".
Пока есть только 1 вариант - в дополнение к приведенной схеме также хранить все теги статьи в дополнительном поле, именно в таком виде в котором их указал пользователь. Это приведет в дублированию данных, но:
1. пользователь будет видеть теги так, как он их ввел
2. для выборки по тегам это поле исопльзоваться не будет, для вбыорки будет использоваться таблица связей - tag_2_content
Подскажите, пожалуйста, как быть? Контента на сайте будет достаточно много (тегов, соответственно, тоже)
