Если под проверкой заранее вы подразумеваете выполнение дополнительного запроса к базе данных только для проверки существования ключа, я бы сказал, не делайте этого. Мы используем FK повсюду, и почти никогда не сталкивались с проблемами, особенно при создании или обновлении. Если это не помогло, это, вероятно, хорошая вещь, в отличие от проверки, с которой вы можете что-то сделать, если вы просто попытались добавить ассоциацию к уже не существующему объекту, что кажется мне довольно веской причиной для ошибки.
Если у вас есть особенно изменчивые сущности, такие, что экземпляр часто мог быть удален между моментом его создания и временем, когда вы пытаетесь сохранить его в FK, тогда, возможно, в этом конкретном случае это может стоить, но как общее руководство я бы не стал.
Я также часто использую FK между таблицами, которые удаляются с помощью логического удаления (например, Act_as_paranoid, устанавливайте флаг удаленный_кат вместо того, чтобы фактически удалять строку), что также облегчает проблемы сбоя FK, и я считаю, что это очень полезно стратегия по крайней мере в моем приложении.