Отношения внешнего ключа MySQL против mysql_insert_id, чтобы связать таблицы - PullRequest
0 голосов
/ 06 сентября 2011

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

Вместо использования внешних ключей я решил просто вызвать mysql_insert_id () после вставки, сохранив его какпеременная, затем положить эту переменную в связанную таблицу.

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

1 Ответ

0 голосов
/ 06 сентября 2011

Чтобы создать отношение (master-> detail), вы должны всегда предоставлять ключи самостоятельно, используя mysql_insert_id, натуральные ключи или ключ, сгенерированный вашими приложениями. FOREIGN KEY не заставит работать на вас .

Что FOREIGN KEY делает

  • Помогает вам обеспечить соблюдение взаимосвязи / целостности ваших данных (поэтому запись «Сведения» не указывает на недопустимого родителя)
  • Обрабатывает удаление или ключевые изменения основных записей (ON DELETE ..., ON UPDATE ...).
  • Он также создает индекс в вашей таблице "detail" для строки "master_id", если он еще не существует (хорошо, вы также можете сделать это без FOREIGN KEY)
  • Имеет также некоторую цель документирования, например, ERM-инструмент может перестроить модель отношений из вашей схемы (хорошо, этот момент - небольшой шаг вперед)

Стоимость добавления оператора ограничения FOREIGN KEY мала по сравнению с его преимуществами.

...