@romicohen
Системный Архитектор

Зачем нужны внешние ключи прописанные в структуре БД (MySQL) — они действительно там нужны?

Не кидайтесь тапками)) но вопрос вот какого плана:

допустим у меня две таблицы Users и Orders и в Orders у меня user_id - соответствующий id в таблице Users - стандартнейшая ситуация ))

И я могу при создании этих таблиц в базе, в SQL-запросе ли, или в phpMyAdmin, или в миграции, указать что user_id - это FOREIGN KEY - так?

Вопрос такой:

- А зачем это вообще нужно-то? :-)

Ну, в смысле - оно же всё и так будет работать, и без этого. Вся логика же у меня в PHP расположена.

Или с этим ключом будет как-то быстрее?

Или что вообще?

Заранее спасибо за внятный ответ!
  • Вопрос задан
  • 2369 просмотров
Решения вопроса 2
@Akina
Сетевой и системный админ, SQL-программист.
Любая СУБД имеет достаточно мощную систему контроля целостности и непротиворечивости данных. Эта система работает, используя набор правил контроля, описанных в структуре БД, и жёстко следит за тем, чтобы ни одно из правил не было нарушено.

Внешний ключ - это как раз такое правило. Сформулировано оно так: в данном поле таблицы не может храниться значение, которое не присутствует в той таблице, на которую ссылается внешний ключ (rонечно, в зависимости от конкретного текста ссылки внешнего ключа и самого поля тут возможны варианты - например, в этом поле может храниться не только значение, присутствующее в ссылочной таблице, но и NULL). И, имея такое правило, СУБД ни при каких условиях не позволит его нарушить. Любая попытка вставить запись со значением, которого нет в ссылочной таблице, приведёт к ошибке. Любая попытка изменить существующее значение на такое, которого "там" нет - приведёт к ошибке. То же касается и "второй" стороны, СУБД не позволит изменить значение в ссылочной таблице или удалить его (потому что записи в нашей таблице при этом "потеряют" ссылку) - такая попытка корректировки приведёт к ошибке.
Ответ написан
index0h
@index0h
PHP, Golang. https://github.com/index0h
Смысл в том, что создать запись, или изменить ее ссылаясь на не существующий внешний ключ у вас не получится, если проверка внешних ключей не отключена. Грубо говоря, это способ сохранить консистентность данных.

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

В большинстве случаев FK не нужны, от слова совсем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы