Rails по-прежнему использует внешние ключи так же, как обычно. Просто он не требует использования внешнего ключа ограничений .
Вы можете обойтись без использования явных ограничений внешнего ключа в базе данных, при условии, что вы настроили проверки в своих моделях, чтобы остановить повреждение данных.
Это форма дублирования для определения ограничений, но я предпочитаю ее для поддержания целостности данных. Даже с определенными ассоциациями и валидациями ActiveRecord все еще слишком легко испортить структуру данных во время миграций, массовых обновлений и т. Д. Существует ряд плагинов, которые позволяют легко определять FKs как часть обычных миграций ActiveRecord
Кроме того, даже если вы не создадите отношения ограничений FK, вам все равно, вероятно, потребуется определить хотя бы индекс для внешнего ключа, поэтому, когда вы делаете что-то вроде post.comments
, вы не вызываете полное сканирование таблицы. чтобы найти все комментарии с совпадающим post_id
(когда вы определяете ограничения FK, многие СУБД делают это для вас неявно).