У меня есть приложение с большим количеством отношений базы данных, которые зависят друг от друга, чтобы успешно управлять приложением. Шарнир в приложении - это модель, называемая «Расписание», но график будет вытаскивать «Блоки», «Сотрудник», «Идентификатор задания» и «Назначение» (кроме того, каждый блок также вытаскивает назначение из базы данных вместе с ним) собрать график сотрудников в течение дня.Когда мне нужны модельные отношения, как мне защищаться от ошибок?
Когда я построил приложение, я уделял большое внимание проверкам, которые гарантировали бы, что все части должны быть на месте, прежде чем все будет сохранено в базе данных. Это до настоящего времени получилось фантастически, и приложение было живым и стучало в течение почти 6 месяцев, обслуживая около 150 000 запросов в месяц без икоты или ошибок. До последней недели.
На прошлой неделе, когда кто-то менял расписание, похоже, что база данных ошибочна, и расписание было сохранено в базе данных с отсутствующим присваиванием. Поскольку ассоциация вызывается во всех представлениях, всякий раз, когда это расписание вызывается из базы данных, приложение будет вызывать ошибку NoMethod для вызова на nil.
При разработке приложения так, как я заявляю, защищаете ли вы от возможного сбоя со стороны базы данных/валидации? И если да, то как вы программно защищаете его? Проверяете ли вы все отношения, чтобы убедиться, что он не равен нулю, прежде чем отправлять его в представление?
Я знаю, что этот вопрос наводнен в общности, и если я могу быть более конкретным в том, что я имею в виду, пожалуйста, дайте мне знать в комментариях.
IIRC, в большинстве БД, ограничения FK могут применяться к столбцам с нулевым значением, и в этом случае он не защитит OP от проблемы. Возможно, есть что-то конкретное в Ruby/Rails/конкретной БД, которая предотвратит это ... В моем ответе предполагается, что ограничения FK уже существуют. – rmeador
Я не использую принудительные ограничения FK базы данных, только проверки Rails для обеспечения создания и существования дочерних объектов. Спасибо за информацию! Я рассмотрю ограничения FK! Я уже завершаю несколько операций с несколькими базами данных в транзакции, но моя база данных должна поддерживать транзакции, чтобы получить это преимущество, не так ли? – BushyMark
Именно поэтому СУБД должна обеспечивать соблюдение ограничений - в случае, если ошибка в одном из неограниченного количества приложений имеет сбой в ней. Не совсем ясно, имеет ли расписание столбец внешнего ключа, который будет ссылаться на таблицу присваивания; Однако, если бы это произошло, вставка не удалась, и проблема не возникла. Это связано с тем, что существует одна СУБД и, вероятно, многие приложения, совместно использующие данные, которые должны выполняться СУБД, поскольку все приложения используют СУБД, и поэтому вы получаете максимальную согласованность. –