SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 05.11.2010 10:10:43

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

MyISAM, InnoDB - организация связи между таблицами

Проблема в следующем: есть 3 таблицы типа MyISAM
class
-----
id  class_name
1  5а
2  5б
3  6а

subject
-------
id  subject_name
1  Предмет1
2  Предмет2
3  Предмет3

day
---
id  day_name
1  День1
2  День2
3  День3

Как мне связать эти таблицы в таблице четвертой таблице school, чтобы сохранить позиции?
Например:
school
------
id class subject day
1  1        2        1
2  1        3        1
3  1        1        1

Я так понимаю что внешний ключ в MyISAM использовать не смогу, как мне это лучше всего реализовать не меняя тип на InnoDB?

Неактивен

 

#2 05.11.2010 13:54:26

mybd
Участник
Зарегистрирован: 04.11.2010
Сообщений: 16

Re: MyISAM, InnoDB - организация связи между таблицами

SELECT * FROM school
LEFT JOIN class ON school.class = class.id
LEFT JOIN subject ON school.subject = subject.id
LEFT JOIN day ON school.day = day.id

Неактивен

 

#3 05.11.2010 13:54:50

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: MyISAM, InnoDB - организация связи между таблицами

Альтернативой FK InnoDB являются триггеры/хранимые процедуры/внешнее приложение.

Только я совершенно не понимаю о какой связи в данном случае вы говорите. В чем она должна выражаться?

Неактивен

 

#4 05.11.2010 14:09:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: MyISAM, InnoDB - организация связи между таблицами

mybd, возможно, автор действительно хотел узнать как сделать подобную выборку, спрашивая о внешнем ключе. Только к внешним ключам это не имеет никакого отношения ( прочитать о том, что это такое можно FAQ №1).

В вашем запросе left join не оправдан (он более трудоемок, чем просто join), так как подразумевает возможность нахождения в таблице school значений отсутствующих в таблицах class, subject, day чего, по логике, не должно быть. Как раз внешние ключи и предназначены для решения подобных задач.

P.S. day - ключевое слово (видите оно у вас подсвечивается желтым).

Неактивен

 

#5 05.11.2010 14:18:44

mybd
Участник
Зарегистрирован: 04.11.2010
Сообщений: 16

Re: MyISAM, InnoDB - организация связи между таблицами

за дополнение про left join спасибо.
про ключевое слово day заметил подсветку. разве MySQL позволил создать таблицу с таким именем? или просто нужно брать в кавычки.

Неактивен

 

#6 05.11.2010 14:21:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: MyISAM, InnoDB - организация связи между таблицами

Нужно брать в обратные кавычки, там где буква ё на клавиатуре, тогда позволит с любым именем (хоть арабской вязью пишите smile )

Неактивен

 

Board footer

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