Внешние ключи являются полезным барьером между вами и проблемами целостности данных.Они просят базу данных выполнить дополнительную работу от вашего имени, чтобы УБЕДИТЬСЯ, что целостность, которую вы определяете, соблюдается, независимо от того, насколько сильно испорчен какой-то код приложения.Это спасло шею каждого программиста БД хотя бы раз в их карьере.Вы должны полностью спроектировать внешние ключи в своей модели, , особенно , если вы считаете, что они вам не нужны.
Тем не менее, если вы расширяете пределы масштабируемости на уровне базы данных,FK могут быть чем-то, что вы отключаете, потому что в теории , они выполняют дублирующую работу, которую ваше приложение уже выполняет (то есть ваше приложение не должно быть закодировано, чтобы преднамеренно делать вещи, которые нарушают целостность отношений, если бы не ФК).Это не для слабонервных, и в этом отношении, это не ВСЕГДА выигрыш в производительности (некоторые JOIN более эффективны, потому что DB знает, могут ли определенные отношения иметь или не иметь результирующие строки).
Как и во всей оптимизации, правило 1 - «Не делай этого», а правило 2 - «Не делай этого (пока)».Убедитесь, что, если вы идете по этому пути:
1) у вас есть данные о конкретной загрузке производительности для подтверждения вашего решения
2) у вас есть возможность включить или отключить ихс помощью переключателя (т.е. не удаляйте их и не выбрасывайте код, и, конечно, не просто пренебрегайте дизайном в первую очередь)
3) у вас есть возможность периодически проверять, что ограничения целостностиВы разработали правильное применение кода приложения (например, ночная работа, которая проверяет, что нет сирот)