ФорумРазработкаБазы данных → Метки, теги

Метки, теги

  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 21 июля 2009 г. 13:33

    Есть пользователи. У пользователей есть интересы, любимая музыка, фильмы, книги и прочая лабуда (в неограниченном количестве). Что-то типа:



    вариант 1.
    таблица пользователей (users), таблица меток (favorites) и таблица М:М (users_favorites)

    В этом случае всё хорошо с выборкой — легко найти метки указанного пользователя или пользователей с общими метками. Проблема: в favorites по-идее должны быть все метки уникальны, а вставка может производится "большими порциями", т.е. по многу меток сразу.

    вариант 2.

    в отдельную таблицу выносится поле (varchar или даже text), куда через запятую заносятся метки. Выборка в этом случае производится по LIKE, но никаких проблем со вставкой/изменением/удалением.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 июля 2009 г. 13:39, спустя 6 минут 2 секунды

    Ну мы делали поле text, где все метки
    + две таблицы для тегов этих: одна с уникальными именами и идами, вторая связная
    adw/0
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 21 июля 2009 г. 13:45, спустя 5 минут 50 секунд


    Ну мы делали поле text, где все метки
    + две таблицы для тегов этих: одна с уникальными именами и идами, вторая связная
    не понял, это так это первый вариант или второй? Я просто не пойму, что бы были уникальные теги, при каждой такой вставки нужно
    - проверять всю таблицу тегов на несколько десятков строк и выбирать ID уже существующих тегов,
    - добавить в таблицу тегов те, которых там нет,
    - добавить в таблицу связей, все эти связи.
    Громоздко получается
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 июля 2009 г. 13:52, спустя 6 минут 43 секунды

    не понял, это так это первый вариант или второй?
    оба

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


    Не громоздко, ты будешь делать больше выборок чем добавлений, так что это оптимальное решение:

    Таблица users:
    * user_id     // ид-юзера
    * favorites   // список меток через запятую

    Таблица favotites:
    * fav_id       // ид-метки
    * fav_name  // имя метки

    Таблица favorites_users:
    * user_id      // ид-юзера
    * fav_id       // ид-метки


    При показе поста отображается только users.favorites
    При выборке по тегам - используются таблицы favorites и favorites_users
    adw/0
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 21 июля 2009 г. 13:59, спустя 7 минут 47 секунд

    как по мне, то первый вариант, за исключение того, что фавтайп указывать не в таблице связей, а в фаворитах. И тогда получится что в этой таблице могут быть два одинаковых имени метки, но принадлежащих разным типам. Ведь когда человек выбирает "маюсь хуйней" в деятельности, то ему пофиг на тех, кто любит китайский(?!) фильм "Маюсь Хуйней" :)

    А относительно больших порций, то в любом случае их будет много :) Но запросы мелкие, и пользователь не будет свои метки целый день изменять/добавлять.
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 21 июля 2009 г. 14:05, спустя 5 минут 9 секунд

    Ведь когда человек выбирает "маюсь хуйней" в деятельности, то ему пофиг на тех, кто любит китайский(?!) фильм "Маюсь Хуйней"
    ну и ладно :) Вообще это сознательный выбор, хуйня - она хоть в деятельности, хоть в китайских фильмах - хуйня.

    Я вообще тоже склонялся к первому варианту, теперь окончательно убежден )
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 21 июля 2009 г. 14:11, спустя 6 минут 14 секунд

    Timur, молорику uml юзаешь
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 21 июля 2009 г. 15:23, спустя 1 час 11 минут 55 секунд


    Timur, молорику uml юзаешь
    0_o это ER-ки какбе… Или они тоже к UML-относятся?
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 21 июля 2009 г. 15:33, спустя 10 минут 18 секунд

    Timur, если в тонкости не вникать то их можно отнести к UML, если вникать лезь в вики

Пожалуйста, авторизуйтесь, чтобы написать комментарий!