Нужны ли Rails ограничения на уровне базы данных? - PullRequest
23 голосов
/ 07 апреля 2010

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

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

Ответы [ 2 ]

56 голосов
/ 07 апреля 2010

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

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

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

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

9 голосов
/ 07 апреля 2010

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

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


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

...