Этот сайт не наркоманов. Это сайт программистов. Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 24 Май, 2012, 07:22:15

Страниц: [1]
Печать
Автор Тема: Метки, теги  (Прочитано 746 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Timur    ↓ 
21 Июль, 2009, 09:33:31
НЕ ХУЕТА! ХУЕТА!

NullPointerException
Группа: в ухо

Карма: 56
Сообщений: 1009
Сила слова: 5.55

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

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

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

в отдельную таблицу выносится поле (varchar или даже text), куда через запятую заносятся метки. Выборка в этом случае производится по LIKE, но никаких проблем со вставкой/изменением/удалением.
Записан
adw0rd    ↓ 
21 Июль, 2009, 09:39:33 , спустя 6 минут 2 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Timur    ↓ 
21 Июль, 2009, 09:45:23 , спустя 5 минут 50 секунд
НЕ ХУЕТА! ХУЕТА!

NullPointerException
Группа: в ухо

Карма: 56
Сообщений: 1009
Сила слова: 5.55


Ну мы делали поле text, где все метки
+ две таблицы для тегов этих: одна с уникальными именами и идами, вторая связная
не понял, это так это первый вариант или второй? Я просто не пойму, что бы были уникальные теги, при каждой такой вставки нужно
- проверять всю таблицу тегов на несколько десятков строк и выбирать ID уже существующих тегов,
- добавить в таблицу тегов те, которых там нет,
- добавить в таблицу связей, все эти связи.
Громоздко получается
Записан
adw0rd    ↓ 
21 Июль, 2009, 09:52:06 , спустя 6 минут 43 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

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

Не громоздко, ты будешь делать больше выборок чем добавлений, так что это оптимальное решение:
 
Таблица users:
* user_id     // ид-юзера
* favorites   // список меток через запятую
 
Таблица favotites:
* fav_id       // ид-метки
* fav_name  // имя метки
 
Таблица favorites_users:
* user_id      // ид-юзера
* fav_id       // ид-метки
 

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Givi    ↓ 
21 Июль, 2009, 09:59:53 , спустя 7 минут 47 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 42
Сообщений: 2305
Сила слова: 1.82

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

Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь.
Если человек дурак, то... чур это не я!
Timur    ↓ 
21 Июль, 2009, 10:05:02 , спустя 5 минут 9 секунд
НЕ ХУЕТА! ХУЕТА!

NullPointerException
Группа: в ухо

Карма: 56
Сообщений: 1009
Сила слова: 5.55

Ведь когда человек выбирает "маюсь хуйней" в деятельности, то ему пофиг на тех, кто любит китайский(?!) фильм "Маюсь Хуйней"
ну и ладно :) Вообще это сознательный выбор, хуйня - она хоть в деятельности, хоть в китайских фильмах - хуйня.
 
Я вообще тоже склонялся к первому варианту, теперь окончательно убежден )
Записан
CTAPbIu_MABP    ↓ 
21 Июль, 2009, 10:11:16 , спустя 6 минут 14 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

Timur, молорику uml юзаешь
Записан

java.lang.OutOfMemoryError
Timur    ↓ 
21 Июль, 2009, 11:23:11 , спустя 1 час 11 минут 55 секунд
НЕ ХУЕТА! ХУЕТА!

NullPointerException
Группа: в ухо

Карма: 56
Сообщений: 1009
Сила слова: 5.55


Timur, молорику uml юзаешь
0_o это ER-ки какбе... Или они тоже к UML-относятся?
Записан
CTAPbIu_MABP    ↓ 
21 Июль, 2009, 11:33:29 , спустя 10 минут 18 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

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

java.lang.OutOfMemoryError
Страниц: [1]
Печать
 

Перейти в: