2010-07-02 5 views
3

Я возвращаюсь в полноценное веб-развитие после пятилетнего перерыва. Мой предыдущий опыт (без активной записи или MVC) говорит мне, что я очень тщательно разбираюсь в своей схеме базы данных. Внешние ограничения ключа, уникальные индексы и т. Д. Могут действительно помочь, когда вы пишете код спагетти.Есть ли преимущества в использовании ограничений внешнего ключа при работе в активной среде записи, например, ruby-on-rails?

Помогло ли сообщество найти это при работе в среде Active Record/MVC?

EDIT

Моя главная забота управления ограничениями в двух местах; код модели и db. Это означает дублирование работы, и это может привести к ошибкам. То есть у вас есть уникальное ограничение на какое-то поле в базе данных, но модель не знает об этом? Я полагаю, что обратное верно, вы можете просто забыть поставить ограничение в модели, тогда у вас будут дубликаты данных, когда вы этого не хотите.

ответ

1

Это будет нормально работать, однако в случаях, когда вы должны быть осторожны с ошибками состояния двойного щелчка (как validates_uniqueness_of страдает от условий гонки).

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

+0

Спасибо. Я всегда предполагал, что структура сможет поддерживать согласованную базу данных. Я думаю, это не может: http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M001400 –

5

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

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

Это значение ограничений, связанных с базой данных: это единственный способ, которым вы можете быть уверенными в своих данных, и вам не придется дважды проверять правильность работы вашей инфраструктуры (например, ActiveRecord). Вам не придется писать сценарии очистки SQL, чтобы найти ложных сирот и дубликатов.

+0

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