SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.11.2011 20:56:14

Ёрик
Участник
Зарегистрирован: 16.11.2011
Сообщений: 1

Помогите спроектировать базу данных

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


У меня есть список русских пословиц и список других (английских, и т.д.).

Русская пословица имееет несколько аналогов (может иметь несоклько английских, а также русских аналогов и т.д.). Также есть общее описание (когда употребляется), оно относится к какому-то множеству пословиц (т.е. 4 пословицы, эквиваленты , аналоги , будут иметь 1 описание)

Т.е. пользователь ищет пословицу русскую: "блаблаблабла", а я в базе данных должны поискать все аналоги и выдать результат:

Искомый вариант: "блаблаблабла".
Английские аналоги:
"blablablablabla"
"WTF"
"It's a piece of shit"
Когда употребляется:
"Когда лень придумать пример, то мы пишем полнейший бред"


Я создал 3 таблицы.

1-ая:

uid(int), proverbText(varchar); PK = uid

2-ая:

uid(int), description(TEXT); PK = uid

3-ая:

id(int), rusAnalogvarchar(255), OtherAnalog(varchar(255)), description(int)

3-ая таблциа - это связка между 3 таблицами.

Т.е. сначала я ищу текст в 1-ой таблице(1), затем по найденным id я ищу в таблице аналогов описание, нахожу описание по id в 2 таблице(*), затем мне нужно найти аналоги списка таблиц из 1-го подзапроса.


Я почти седал заспрос, до *, но уменя уже запрос в 6 строчек. Можно спроектировать так, чтобы запросы были меньше? Я просто уже себе мозг взорвал, да и преподаватель сказал: "it's a bullshit", также добавил, что это не будет проверять.

select description, proverbText
from
  description,

  (SELECT DISTINCT proverbText,descriptionNum
  FROM (
                SELECT proverbText, proverbs.uid FROM proverbs WHERE proverbs.uid IN
                   (SELECT DISTINCT comparison.rusAnalog FROM comparison WHERE comparison.rusAnalog IN
                       (SELECT proverbs.uid FROM proverbs WHERE proverbText LIKE '%д%'))
             ) as TempTable,comparison
  WHERE TempTable.uid = comparison.rusAnalog or TempTable.uid = comparison.otherAnalog) as View1


where
  description.uid = descriptionNum

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson