Подтвердить что ты не робот

Требуется ли Rails ограничениям на уровне базы данных?

У меня та же проблема, что и в следующем сообщении.

Итак, мне интересно, почему Rails не поддерживает создание внешних ключей по умолчанию? Разве это не нужно? Или мы должны делать это вручную?

4b9b3361

Ответ 1

Ограничения базы данных не требуются больше, чем в вашем автомобиле требуется носить ремни безопасности. Вы можете обойти все, что вам нравится, и все будет отлично работать, пока не появится проблема. Ремень безопасности (ограничения) позволяет вам (данные) безопасно.

Поэтому настоятельно рекомендуется создавать ограничения для обеспечения целостности данных на уровне базы данных, поскольку очень вероятно, что 1) вы будете взаимодействовать с базой данных в какой-то момент за пределами Rails и 2) вы совершите ошибку в своем код, который вызывает недопустимые данные.

Ограничения базы данных могут быть более полезными, но это экономит много работы, особенно когда ваш код может делать предположения о данных и не должен выполнять тонны проверок действительности.

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

Ответ 2

Вы можете добавить поддержку внешнего ключа с помощью Foreigner плагина.

Не все поддерживаемые базы данных для ActiveRecord поддерживают внешние ключи, поэтому инфраструктура Rails не включает ее в качестве основной функции.


Примечание: выше не более точно, так как Rails добавила поддержку FK в 4.2.