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