Утвердить FK сейчас или восстановить позже? - PullRequest
0 голосов
/ 09 января 2010

Что является более приемлемым подходом Rails?

Проверка наличия внешнего ключа при создании / обновлении

или

«Контроль ущерба», когда мы хотим использовать несуществующий внешний ключ?

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

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

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

Как опытные разработчики Rails справляются с этой проблемой?

1 Ответ

1 голос
/ 10 января 2010

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

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

Я также часто использую FK между таблицами, которые удаляются с помощью логического удаления (например, Act_as_paranoid, устанавливайте флаг удаленный_кат вместо того, чтобы фактически удалять строку), что также облегчает проблемы сбоя FK, и я считаю, что это очень полезно стратегия по крайней мере в моем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...