От пыхи не убежишь

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

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

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

Новости

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

Краснодарское время: 23 Май, 2012, 12:27:56

Страниц: [1] 2
Печать
Автор Тема: Пара вопросов по проектированию БД  (Прочитано 1514 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sap    ↓ 
29 Ноябрь, 2008, 02:45:17
НЕ ХУЕТА! ХУЕТА!

Группа: Жмурики

Карма: 40
Сообщений: 2697
Сила слова: 1.48

1. У нас есть определенные элементы, к которым нужны метки (теги). Пусть это будут, скажем, сообщения.
 
Таблица сообщений:
Text
message_id | |message_author | message_text |

Таблица тегов:
Text
tag_id | tag_name |

Таблица связей:
Text
id | tag_id | message_id |

Хочу реализовать такую фишку, как релевантность тегов. То есть, один человек напишет метку «пыха», а другой — «pyha». Нужно, чтобы при просмотре сообщений по одному из этих тегов выводились сообщения, которые относятся также и ко второму (третьему, десятому) тегу. «Релевантность», естественно, назначается вручную админом.
 
Вопрос — как это реализовать на уровне БД?
 
Мой вариант — еще одна таблица для релевантности:
Text
id | main_tag_id | related_tag_id |

Но, мне кажется, при большом количестве релевантных тегов начнутся проблемы с выборкой, ведь можно отнести тег B как релевантный А, а тег С — как релевантный B, но для А он же тоже релевантный!
 
2. Опять же, те ще сущности, пусть будут сообщения. Пользователь через форму их фигачит. Все сообщения, которые прислал пользователь, видны у него в профиле в разделе «Мои сообщения». Но, дальше идет премодерация, и некоторые из этих сообщений попадают, скажем так, на главную, то есть становятся видны всем. А в «моих сообщениях» пользователь все равно видит все, им присланные, только с пометками — утверждено, не утверждено, в ожидании проверки.
 
Вопрос — нужно ли две таблицы — одну для присланных, вторую для утвержденных, или достаточно одной таблицы с полем `approved`?
 
Мой вариант — да, нужно, потому что это почти что разные сущности, кроме того, для выборки лучше тянуть из таблицы утвержденных без всяких условий, чем тянуть из общей таблицы WHERE `approved`=1.
Записан

phpdude    ↓ 
29 Ноябрь, 2008, 03:16:41 , спустя 31 минуту 24 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

имхо проще сделать в табличке тагс поле visible и если админ составляет релевантные теги(пыха => pyha) то добавлять просто еще один тег с visible =0. выборки будут сложнее на условие visible=1 и все :) да и идея простая.
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
sap    ↓ 
29 Ноябрь, 2008, 03:24:45 , спустя 8 минут 4 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Жмурики

Карма: 40
Сообщений: 2697
Сила слова: 1.48

message_id | message_author | message_text
1                  | sap                      | Пыха рулит
2                  | md5                     | Сиськи!!!11адынадын
3                  | phpdude              | хуй
 
tag_id | tag_name | visible
1         | пыха         | 1
2         | ПЫХА!!!!   | 0
3         | pyha         | 0
 
id | tag_id | message_id
1  | 1         | 1
2  | 2         | 2
3  | 3         | 3
 
И что, как мне по тегу «пыху» вытянуть мессаги и по тегам «ПЫХА!!!!» и «pyha»?
Записан

phpdude    ↓ 
29 Ноябрь, 2008, 03:36:27 , спустя 11 минут 42 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

ну смотри я так понимаю что у тебя есть таблица tags_relations
tag relation
пыха   pyha
пыха   ПЫХА!!!!
пыха   пиздец
эту таблиу заполняет админ. (ну или с премодерацией там .. как угодно)
 
выборка
select relation from tags_relations where tag=пыха
 
select * from tags where tag in (тут результаты прошлого)
select * from messages where tag in(tags.ids-результаты)
 
просто я имею ввиду навешивать эти теги на статьи, но не показывать их  пользователю :) поиски производить по ним, а вот "теги" на странице показывать теги статьи у которых tags.visible=1
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
phpdude    ↓ 
29 Ноябрь, 2008, 03:36:44 , спустя 17 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

надеюсь правильно выразился, состояние как пьяный какой то)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
sap    ↓ 
29 Ноябрь, 2008, 03:44:18 , спустя 7 минут 34 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Жмурики

Карма: 40
Сообщений: 2697
Сила слова: 1.48

Да, я понял, проблема в одном. Вдруг админ тоже будет пьяный какой-то и вместо:
 
Text
tag relation
пыха pyha
пыха ПЫХА!!!!
пыха пиздец

возьмет и сделает:
 
Text
tag relation
пыха pyha
pyha ПЫХА!!!!
ПЫХА!!!! пиздец

Что тогда?
Записан

phpdude    ↓ 
29 Ноябрь, 2008, 03:45:42 , спустя 1 минуту 24 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20780
Сила слова: 1.66

аа тебе множественные связи хочется? чтобы грубо говоря "наследование"?))
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
sap    ↓ 
29 Ноябрь, 2008, 03:50:33 , спустя 4 минуты 51 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Жмурики

Карма: 40
Сообщений: 2697
Сила слова: 1.48

Ну видимо типа того :)
Записан

phpdude    ↓ 
29 Ноябрь, 2008, 03:54:02 , спустя 3 минуты 29 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20780
Сила слова: 1.66

ну смотри на этапе заполнения этой таблицы я думаю что стоит закешировать данные, то есть проследить всю цепочку :) и добавить нужные узлы в таблицу релейшнс.
 
PS:// мб конечно я бред несу, но надеюсь есть здравый смысл)) чисто теоретически тяжело рассуждать как будет более правильно. мб можно обойтись вообще одной таблицей как нить в ней изъебнуться и все)))
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Professor    ↓ 
29 Ноябрь, 2008, 04:07:38 , спустя 13 минут 36 секунд
НЕ ХУЕТА! ХУЕТА!

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

Карма: 30
Сообщений: 2074
Сила слова: 1.45


message_id | message_author | message_text
1                  | sap                      | Пыха рулит
2                  | md5                     | Сиськи!!!11адынадын
3                  | phpdude              | хуй
 
tag_id | tag_name | visible
1         | пыха         | 1
2         | ПЫХА!!!!   | 0
3         | pyha         | 0
 
id | tag_id | message_id
1  | 1         | 1
2  | 2         | 2
3  | 3         | 3
 

Чето я не совсем понимаю в чем проблемма.
Вы хотите указать что 1 тег является синонимом другого?
тогда создайте  visible только назовите по другому =) и у всех синонимов  туже цифру пишите
 
а потом берем нужный тег, смотрим какой у него visible и из базы все теги с таким же visible выбираем.
Не ругайте меня если че то не понял =)
« Последнее редактирование: 29 Ноябрь, 2008, 04:11:12 от Professor » Записан

Записки профессора : Кто тут, к примеру, в цари крайний? Никого?! Так я первый буду!
phpdude    ↓ 
29 Ноябрь, 2008, 04:09:39 , спустя 2 минуты 1 секунду
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

Professor, ну я это же прибл и хотел сказать, только там еще шла речь про добавление удаление синонимов :) поэтому появились доп таблицы.
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Professor    ↓ 
29 Ноябрь, 2008, 04:14:56 , спустя 5 минут 17 секунд
НЕ ХУЕТА! ХУЕТА!

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

Карма: 30
Сообщений: 2074
Сила слова: 1.45


Professor, ну я это же прибл и хотел сказать, только там еще шла речь про добавление удаление синонимов :) поэтому появились доп таблицы.
Не вижу проблем,
добавляем слово "План" с visible=0 и оно автоматом становится синонимом всех слов с  visible=0 .
Изменяем у "Пыха!!!" visible на другое значение и нет у него синонимов
« Последнее редактирование: 29 Ноябрь, 2008, 04:16:56 от Professor » Записан

Записки профессора : Кто тут, к примеру, в цари крайний? Никого?! Так я первый буду!
sap    ↓ 
29 Ноябрь, 2008, 04:16:44 , спустя 1 минуту 48 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Жмурики

Карма: 40
Сообщений: 2697
Сила слова: 1.48

Оно не должно быть синонимом ВСЕХ слов с визибле=0, а только тех, которых нужно. В основном понял как делать.
 
Еще есть второй вопрос! =)
Записан

Professor    ↓ 
29 Ноябрь, 2008, 04:18:38 , спустя 1 минуту 54 секунды
НЕ ХУЕТА! ХУЕТА!

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

Карма: 30
Сообщений: 2074
Сила слова: 1.45

Оно не должно быть синонимом ВСЕХ слов с визибле=0, а только тех, которых нужно. В основном понял как делать.
ты не совсем понял
визибле одинаковое только у тех укоторых нужно.
оно имеет множество значений не только 1 и 0,
Записан

Записки профессора : Кто тут, к примеру, в цари крайний? Никого?! Так я первый буду!
Professor    ↓ 
29 Ноябрь, 2008, 04:20:59 , спустя 2 минуты 21 секунду
НЕ ХУЕТА! ХУЕТА!

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

Карма: 30
Сообщений: 2074
Сила слова: 1.45

В общем, админ выбирает слова которые одинаковы по сути pyha и пыха и ставит визибле=12
у sex и секс ставит визибле=113.
Естественно цифра ставится автоматом, он просто вводит слова.
Записан

Записки профессора : Кто тут, к примеру, в цари крайний? Никого?! Так я первый буду!
Страниц: [1] 2
Печать
 

Перейти в: