![]() |
|
Модераторы: skyboy |
![]()
|
|
| triclosan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
Имеется база, содержащая 8 таблиц с 6 связями между ними. Если не планируется редактировать родительские айди и удалять родительские записи этих связей, есть ли смысл создавать для них внешние ключи? Ранее FK не использовал и связывал таблицы вручную исключительно на уровне запросов. Cоздал внешние ключи и столкнулся с рядом sql ошибок - последовательности создания таблиц и внесения в них данных. Или может быть я недооцениваю мощь FK
Это сообщение отредактировал(а) triclosan - 7.8.2008, 15:42 |
|||
|
||||
| lnick |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
Ну как сказать. В общем МУСКУЛУ ФК не нужны. Он не контролирует достоверноть ввода данных по ключевым полям. Тоесть. Если ты вводишь в главную таблицу данные, которые нет в подчиненной, он проглотит и даже не выведет ошибки. Для этого необходимо писать триггеры, которые контролируют все это.
Другое дело. если те нужно каскадное обновление и удаление, тогда ФК нужны. В типе Inodb есть такая функция. |
|||
|
||||
| skyboy |
|
||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
если под подчиненный понимается таблица, которая имеет внешний ключ на главную, то все правильно: если добавляешь покупателя(пример), то он не обязан(да, и не может) уже иметь имеющиеся заказы. если же под подчиненной понимается таблица, на которую ссылаются и смысл фразы в том, что mysql не реализует проверку ссылочной целостности при вставке, то попробуй сделать следующее:
лично я под управление сервера версией 5.1 получаю
хочу отдельно отметить, что обе связанные таблицы должны иметь тип innoDB |
||||||
|
|||||||
| lnick |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
Ну да. Именно это я и имел ввиду. Только пример не приводил.
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
||||
|
||||
| lnick |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
В InnoDB да, а в MyISAM нет.
|
|||
|
||||
| triclosan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
И не только достоверность ввода, а как я понимаю события ON UPDATE и ON DELETE в MyISAM не будут срабатывать. В 6-ке хотят сделать поддержку FK и транзакций для MyISAM чтобы путаницы не было Это сообщение отредактировал(а) triclosan - 5.10.2008, 20:44 |
|||
|
||||
| lnick |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
Ну да. MyISAM немного ограничен и малофункционален. Тоже жду 6.
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |