1 (изменено: sokrat, 2009-11-10 03:27:54)

Тема: Связи между таблицами (первичные и внешние ключи и disiner)

База Mysql MyISM/
Вопросы:
1. Как просмотреть связи между таблицами в базе данных (если есть,опишите несколько способов)?;
2. Почему в дизайнере таблиц через phpMyAdmin у меня связи на внешние и первичные ключи не отображаются? help me! скриншот ниже:

http://smages.com/i/20/3e/203eff0e3a76d6b0e975fb14f458a24a.jpg

2

Re: Связи между таблицами (первичные и внешние ключи и disiner)

В отличии от InnoDB, у таблиц типа MyISAM в структуре таблиц нет возможности для установления внешних ключей и создания связей, их можно установить только с помощью phpMyAdmin, который хранит связи в специальной рабочей таблице. Таким образом, просмотреть связи вы не можете, потому что они не установлены.

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

3

Re: Связи между таблицами (первичные и внешние ключи и disiner)

Hanut сказал:

В отличии от InnoDB, у таблиц типа MyISAM в структуре таблиц нет возможности для установления внешних ключей и создания связей, их можно установить только с помощью phpMyAdmin, который хранит связи в специальной рабочей таблице

ПАсиба величественна уважаемые Гуру!
Тогда назрели такие вопросы:
1. Имеет ли какой-либо практический смысл устанавливать связи между таблицами в типах MyISM? отразится ли это на скорости работы таких таблиц?На что повлияет?
2. Имеет ли какой-либо практический смысл устанавливать связи между таблицами в типах InnoDM?На что влияют связи в типах InnoDB?
3. Терь вопрос ближе к практике. Например, есть у меня 36 табличек  MyISM с непроставленными связями. Вхожу я в любую из таблиц и далее мне нужно определить, из каких соображений выбирается первичный ключ, ссылки на внешние ключи и т.д.?
4. У меня есть движок Joomla, тип базы данных MyISM. Возможно ли выгрузить таблицы из базы MyISM новый тип таблиц InnoDB?Какие будут последствия и на чем это может отразиться?

4

Re: Связи между таблицами (первичные и внешние ключи и disiner)

1. В таблицах типа MyISAM установка связей повлияет только на отображение данных в phpMyAdmin (Дизайнер и связи для выбора отображаемого столбца). Данные связи работают только в phpMyAdmin и никак не влияют на данные.

2. Связи в таблицах типа InnoDB следует устанавливать, если требуется при выполнении какого-либо действия в одной из таблиц, чтобы происходило определенное действие в связанных таблицах. Например, если связаны две таблицы и вы в первой удалите строку, то связанные с ней записи будут автоматически удалены и из второй таблицы (каскадное удаление).

3. Связи проставляются исходя из логики построения БД. К примеру, есть таблица user состоящая из полей id и name, и есть таблица message состоящая из полей user_id и text. Поля user.id и message.user_id должны иметь одинаковый тип данных и могут быть связаны, чтобы установить каждому сообщению (message) своего пользователя.

4. Сменить тип таблиц с MyISAM на InnoDB можно, но особого смысла в этом нет. Считается, что таблицы типа MyISAM лучше предназначены для создания веб-ресурсов (очень большая скорость при выборке данных из БД), а InnoDB скорее для крупных, критичных к отказоустойчивости проектов (медленнее, но надежнее). Сам Joomla от смены типа таблиц ни лучше ни хуже работать не будет.

5 (изменено: sokrat, 2009-11-11 11:15:23)

Re: Связи между таблицами (первичные и внешние ключи и disiner)

Hanut
Спасибо за качественную поддержку, ответы меня удовлетворили. Скажу по секрету: я зарегился именно на вашем форуме лишь потому, что увидел как вы достаточно компетентно и конкретно отвечаете на поставленные вам вопросы пользователей. Желаю держать планку в том же уровне wink