2010-08-31 2 views
3

Приложения имеют ошибки или получают ошибки при обновлении, некоторые скрытые, которые обнаруживаются через несколько месяцев или лет, производя сиротские записи, клавиши, указывающие никуда и т. Д. Даже с соответствующими наборами тестов.Существуют ли инструменты для Rails для проверки ссылочной целостности базы данных?

Allthough Rails не применяет ссылочную целостность на уровне базы данных - и по некоторым соображениям, обсуждаемым в другом месте, он останется таким - все равно было бы неплохо иметь инструменты, которые могли бы проверить, находится ли база данных в согласованном состоянии.

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

Есть ли что-нибудь подобное?

ответ

0

Как насчет использования СУБД для обеспечения выполнения RI? Для этого вам не нужны Rails.

+0

ActiveRecord (ORM, используемый в рельсах) по умолчанию не поддерживает – f0ster

+0

Конечно, но почему ограничения на одном программном инструменте стоят на пути вашей целостности данных? Используйте несколько лучших инструментов. – sqlvogel

2

Я не знаю такого инструмента. По крайней мере, вы осознаете опасность опасности ссылочной целостности. Так зачем же страдать? Просто используйте ссылки на внешние ключи, в первую очередь, как предлагалось dportas.

Чтобы использовать его в миграции, добавить что-то вроде этого:

execute('ALTER TABLE users ADD FOREIGN KEY (language_id) REFERENCES languages(id)') 

сделать столбец LANGUAGE_ID пользователей ссылки на действительную строку в таблице языков.

В зависимости от вашей СУБД это даже автоматически создаст индекс для вас. Существуют также плагины для рельсов (проверьте pg_on_rails), которые определяют простые в использовании функции псевдонимов для этих задач.

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

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

Другое дело: Ошибка в вашем приложении будет намного проще найти, так как и исключение будет поднято в коде, который пытается вставить поврежденные данные.

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