MySQL « Использование внешних ключей в InnoDB в высоконагруженых проэктах.
1 ответов
В общем случае да, ключи являются констрейнтом. Т.е. условием, которое СУБД проверяет при каждой вставке. Более тяжелым, чем условия NOT NULL и другие.
Но как вы будете проверять целостность на php? Перед инсертом делать селекты по всем зависимым таблицам (обязательно в той же транзакции!) и выяснять, есть ли в них ID записи, который хотите вставить? В этом случае производительность точно просядет. Это в разы медленнее (СУБД делает то же самое, но более оптимальным способом) и трудоемко в реализации (на каждый insert писать кучу select-ов).
Если предполагаете поступить так:
1. Пользователь открывает какую-то страницу.
2. При построении страницы делается select из базы.
3. Пользователь в открывшейсе странице что-то делает, сохраняет.
4. php формирует запрос, делается insert в базу.
то в этом случае php никакой целостности гарантировать не может. Между моментом получения данных и их сохранением прошло какое-то время. За этот промежуток времени данные в базе могли измениться. И то что было верно на шаге 2, становится ошибочным на шаге 4.