Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Как будет лучше связывать таблицы в одну?

#1 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0
0

Отправлено 04 Август 2009 - 00:49

Для того чтобы было меньше букв не буду всю базу щас выкладывать, а приведу пример ее маленькой части.

таблица ТИП КАФЕ
type_id - ид.
type_name - название

1 | Кафе
2 | Ресторан
3 | Фастфуд
и т.д.


таблица ВИДЫ КУХНИ
kitchen_id - ид.
kitchen_name - название
kitchen_desc - описание

1 | Русская
2 | Европейская
3 | Китайская
4 | Японская
и т.д.


таблица БИЗНЕС-ЛАНЧ
lunch_id - ид.
lunch_price - ценовая категория

1 | меньше 100 рублей
2 | 100 - 300 рублей
3 | больше 300 рублей


таблица ЗАВЕДЕНИЕ
cafe_id - ид.
cafe_name - название кафе
cafe_type - тип кафе, может быть несколько
cafe_kitchen - виды кухни, может быть несколько
cafe_lunch - цена на бизнес ланч, может быть только 1

1 | Mc'Donalds | 1,3 | 2,4,5,6,3 | 2
2 | Pizza Mia | 2,4,7 | 3,4,20,30 | 1
и т.д.


правильно я организовал последнюю таблицу? в итоге у этой таблицы будет около 20-30 полей, и у многих будут вспомогательные таблицы (как ВИДЫ КУХНИ, к примеру). Этож наверно будет очень медленно все работать?
И как организовать поиск по базе? например мне надо вывести все Фастфуды (id=3) где есть Европейская кухня (id=2). Если искать цифру 2 и 3 в базе "ЗАВЕДЕНИЯ", то так же будут засчитываться и числа 20,30, как это обойти?

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Как посчитать сумму одного столбца таблицы по определенному критерию?
  2. Все запросы из одной таблицы без иттераций
  3. Как в одно поле таблицы внести две переменных?
  4. Продам один из лучших новостных, блоговых и журнальных шаблонов для WordPress

#2 Евгений

Евгений
    Topic Starter
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 04 Август 2009 - 11:03

еще в голову пришла мысль.

для таблиц ЗАВЕДЕНИЯ и ТИП КАФЕ сделать дополнительную таблицу, где будет ид заведения и ид кафе.
для таблиц ЗАВЕДЕНИЯ и ВИДЫ КУХНИ сделать подобную таблицу
и так далее... и потом как нибудь (пока не знаю как) их связывать. Но что знаю точно что таблиц в итоге получится море :)
  • 0

#3 v1ex

v1ex
  • Пользователь
  • 225 сообщений
  • Репутация: 0

Отправлено 04 Август 2009 - 13:57

Делай, как написал во втором посте, "FOREIGN KEY" и "**** JOIN" - в помощь.
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 06 Август 2009 - 23:14

Евгений, по поводу

Если искать цифру 2 и 3 в базе "ЗАВЕДЕНИЯ", то так же будут засчитываться и числа 20,30, как это обойти?

Нифига не будут, не стоит просто искать по маске. Но просто конечно же работать с подобными полями очень громоздко. LIKE очень сильно жрет ресурсы баз данных.
  • 0

#5 xakki

xakki
  • Пользователь
  • 27 сообщений
  • Репутация: 0

Отправлено 27 Август 2009 - 16:33

Если храниш несколько записей то лучше записывать в поле следуюющим образом
|12|34|23|
т.е. по краям обязательно должен быть символ | (или друго, но лучше этого я не нашол, а замятая может оптом пригодится, вдруг текстовое значение будет)
И уже сам запрос по поиску

SELECT * FROM table WHERE name LIKE '%|12|%'

Я сам пользуюсь этим методом , получается хорошая экономия да и по быстродествию на небольших (имею ввиду до 300тысщ) не видно разницы, да и кеширование мускуля подсобит.
Поле сделать варчаром254 или поменьше, в зависимости от того сколько значений бушь хранить
  • 0


Оформление форума – IPBSkins.ru