Я хочу иметь динамические поля в записях своей базы данных.
Например: я хочу создать приложение для пользователей, чтобы создавать свои собственные формы.
Пользователь может создать следующие формы:
Личный профиль:
Работа:
Страны:
Как вы можете видеть, это очень динамичная структура:
Поэтому мне интересно, какова лучшая база данных для этого: реляционная (mysql / postgresql) или нереляционная, например mongodb / couchdb / cassandra, или даже XML-базы данных, такие как xindice?
И даже если я выберу нереляционные базы данных для этого, Было бы разумно хранить на нем важную для безопасности информацию, такую как информация о клиентах и счетах?
Я слышал, как люди говорят, что если ваша информация требует уникальности, используйте реляционную базу данных. «Мы не хотим рисковать, чтобы выставлять счета нашим клиентам дважды». Какие проблемы в нереляционных базах данных они на самом деле означают? Можно'
Офис
Как видите, существуют ситуации для идентичных записей. Как с этим справляются нереляционные базы данных? Я так привык к реляционным базам данных.
Я подытожил свои вопросы:
Я настоятельно рекомендую вам проверить это на CouchDB.
submission:user:5:form:a3df2a712
Используя CouchDB, вы можете избежать боли динамического создание уникальных таблиц для каждой формы, которую может создать пользователь.
Выбор базы данных больше зависит от того, что и как вы хотите запрашивать нечто большее, чем то, что вы хотите сохранить. Все БД позволят вам хранить практически все, что захотите.
РСУБД особенно хороши при выполнении запросов на основе реляционной модели, и делать это разумно произвольно. С помощью специальных фильтров и объединений вы можете творить всевозможные чудеса.
БД NOSQL, как правило, менее гибки в своих запросах, но хорошо справляются с другими задачами (например, лучше работают с «неструктурированными» данными).
Учитывая то, что вы здесь разместили, я бы просто использовал базу данных SQL и определял таблицы так, как пользователь хочет, чтобы они были определены. Настроить индексы, настроить запросы. Для меня это звучит как реальная и ежу понятно. Базы данных SQL легко справляются со всеми этими «определениями полей на лету», потому что ... это то, что они делают. Так что используйте это.
Если ваши данные довольно хорошо подходят для реляционной модели, но вам нужно хранить некоторые динамически отформатированные данные, которые не являются огромными, тогда вам, вероятно, будет лучше хранить JSON, XML или аналогичные данные в столбец. Хотя при этом вы теряете некоторые преимущества первоклассной типизации SQL (индексирование, проверка ограничений внешнего ключа, проверка типов и т. Д.), Это хорошо для хранения динамически структурированных документов, когда ваши запросы не заботятся об их внутреннем устройстве.
Если вы заинтересованы в хранении в основном реляционных данных с использованием JSON / XML и т. Д., Я рекомендую обратиться к PostgreSQL.PostgreSQL имеет тип данных XML, но я не рекомендую его использовать, так как ненавижу XML: P. Никто не мешает вам хранить JSON в поле TEXT, но PostgreSQL скоро получит тип данных JSON с поддерживающими функциями. Модуль hstore contrib обеспечивает эффективный способ хранения пар ключ / значение, а также обеспечивает поддержку полнотекстового индекса.
Хотя вставка JSON или аналогичного файла в столбец базы данных SQL противоречит реляционной модели, обычно лучше сделать это в любом случае (когда это имеет смысл!). В противном случае вам придется объяснить всю схему вашего приложения базе данных, что приведет к появлению большого количества кода SQL и сопоставления базы данных, который на самом деле ничего не делает.