Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FK, уместно ли использовать 
:(
    Опции темы
triclosan
Дата 7.8.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



Имеется база, содержащая 8 таблиц с 6 связями между ними. Если не планируется редактировать родительские айди и удалять родительские записи этих связей, есть ли смысл создавать для них внешние ключи? Ранее FK не использовал и связывал таблицы вручную исключительно на уровне запросов. Cоздал внешние ключи и столкнулся с рядом sql ошибок - последовательности создания таблиц и внесения в них данных. Или может быть я недооцениваю мощь FK  smile ?

Это сообщение отредактировал(а) triclosan - 7.8.2008, 15:42
PM MAIL   Вверх
lnick
Дата 3.10.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



Ну как сказать. В общем МУСКУЛУ ФК не нужны. Он не контролирует достоверноть ввода данных по ключевым полям. Тоесть. Если ты вводишь в главную таблицу данные, которые нет в подчиненной, он проглотит и даже не выведет ошибки. Для этого необходимо писать триггеры, которые контролируют все это. 

Другое дело. если те нужно каскадное обновление и удаление, тогда ФК нужны. В типе Inodb есть такая функция. 


PM MAIL   Вверх
skyboy
Дата 3.10.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(lnick @  3.10.2008,  11:10 Найти цитируемый пост)
Если ты вводишь в главную таблицу данные, которые нет в подчиненной, он проглотит и даже не выведет ошибки. 

если под подчиненный понимается таблица, которая имеет внешний ключ на главную, то все правильно: если добавляешь покупателя(пример), то он не обязан(да, и не может) уже иметь имеющиеся заказы.
если же под подчиненной понимается таблица, на которую ссылаются и смысл фразы в том, что mysql не реализует проверку ссылочной целостности при вставке, то попробуй сделать следующее:
Код

create table source(
id int auto_increment primary key,
`name` varchar(32) 
) engine = innodb;

create table target(
id int auto_increment primary key,
source_id int,
`name` varchar(32),
FOREIGN KEY (source_id) REFERENCES source(id)
                      ON DELETE CASCADE

) engine = innodb;

insert into target(source_id, `name`) values(11, 'ffff');

лично я под управление сервера версией 5.1 получаю
Цитата

Error Code : 1216
Cannot add or update a child row: a foreign key constraint fails

хочу отдельно отметить, что обе связанные таблицы должны иметь тип innoDB
PM MAIL   Вверх
lnick
Дата 3.10.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



Ну да. Именно это я и имел ввиду. Только пример не приводил.
PM MAIL   Вверх
skyboy
Дата 3.10.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



lnick, а как же твои слова:
Цитата(lnick @  3.10.2008,  11:10 Найти цитируемый пост)
Он не контролирует достоверноть ввода данных по ключевым полям. 
? ведь таки контролирует!


PM MAIL   Вверх
lnick
Дата 3.10.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



В InnoDB да, а в MyISAM нет.
PM MAIL   Вверх
triclosan
Дата 5.10.2008, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



Цитата(lnick @  3.10.2008,  16:41 Найти цитируемый пост)
В InnoDB да, а в MyISAM нет. 


И не только достоверность ввода, а как я понимаю события ON UPDATE и ON DELETE в MyISAM не будут срабатывать. 

В 6-ке хотят сделать поддержку FK и транзакций для MyISAM  чтобы путаницы не было  smile  

Это сообщение отредактировал(а) triclosan - 5.10.2008, 20:44
PM MAIL   Вверх
lnick
Дата 6.10.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



Ну да. MyISAM немного ограничен и малофункционален. Тоже жду 6. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.