Ссылочная целостность данных: необходимость, полезность или старая шляпа?

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

Недавний рост популярности баз данных noSQL, таких как MongoDB, Cassandra и т. Д., Еще более радикально изменил подход к передовым методам разработки баз данных.

Мой вопрос: больше не нужна ссылочная целостность данных?

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

Насколько необходима ссылочная целостность данных? Может ли кто-нибудь перечислить некоторые проблемы, которые у них были, когда они его не использовали?

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

9
задан 2 revs, 2 users 100% 31 August 2010 в 01:19
поделиться

2 ответа

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

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

Ознакомьтесь с поддержкой нескольких баз данных в Django. Имейте в виду, что переход от хранилища данных ACID к хранилищу данных CRUD намного проще, чем наоборот.

2
ответ дан 3 November 2019 в 01:52
поделиться

Я работал в компании ( ebay.com), где базы данных огромны. Мы не должны использовать какую-либо ссылочную целостность в базе данных. Это ограничение было введено с учетом только фактора производительности. Мы даже не будем ничего определять на уровне ORM (Object Relational Mapping). Все должно быть логически обработано. Я знаю, что это немного сложно даже представить, но тем не менее именно это обеспечивает лучшую производительность.

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

1
ответ дан 3 November 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: