Внешние ключи - используете?

Василий М.

Новичок
Прочитал в 101 раз про них и не могу понять - а нужны ли они?
Какая от них реальная польза?

В доке по 4 версии черным по белому написано, что иногда клиентский код выгоднее использовать - он прозрачен.
Плюс каскадные удаления, например, не айс и могут только навредить, когда я с перепою удалю родительскую запись ручками в базе.
 

Вурдалак

Продвинутый новичок
Польза вполне очевидная: это дополнительный механизм для обнаружения проблем.
Плюс каскадные удаления, например, не айс и могут только навредить, когда я с перепою удалю родительскую запись ручками в базе.
Не делай ON DELETE CASCADE, делай ON DELETE RESTRICT.

Ну и вообще, это как минимум правила хорошего тона. Это примерно как type hinting у методов указывать. Если ты в базу ручками через консоль залезешь, то хрен поймёшь без \d table_name (или что там в клиенте MySQL) на что ссылаются поля, потому что именование может быть неочевидное (ну, к примеру, book.author_id — это что, id в таблице users или нужно искать таблицу authors?).
 
Последнее редактирование:

Absinthe

жожо
Твои данные всегда будут корректны, и не возникнет ситуации, когда foo_id показывает в никуда.
Загрузив схему базы в MySQL-клиенте ты видишь в виде стрелочек все отношения, а не рыщешь по коду, чтобы понять, что с чем связано.

От их неиспользования преимуществ или выигрыша по времени не вижу.
 
Сверху