Я задавался вопросом,
Какова будет моя мотивация для использования ограничения в качестве внешнего ключа в MySQL, поскольку я уверен, что могу управлять типами, которые добавляются?
Это улучшает производительность?
Внешние ключи обеспечивают ссылочную целостность . Эти ограничения гарантируют, что строка в таблице order_details
с полем order_id
, ссылающимся на таблицу orders
, никогда не будет иметь значение order_id
, которое не соответствует не существует в таблице заказов
.
Внешние ключи не требуются для наличия работающей реляционной базы данных (фактически MySQL по умолчанию механизм не поддерживает FK), но они определенно необходимы, чтобы избежать разорванных отношений и потерянных строк (т.е. ссылочная целостность). Возможность обеспечения ссылочной целостности на уровне базы данных требуется для C в ACID .
Что касается ваших опасений по поводу производительности, в целом есть затраты на производительность, но они, вероятно, будут незначительными. Я предлагаю ввести все ваши ограничения внешнего ключа и экспериментировать без них только в том случае, если у вас есть реальные проблемы с производительностью, которые вы не можете решить иначе.