Сопоставление и замена регулярных выражений Python

Я хочу иметь динамические поля в записях своей базы данных.

Например: я хочу создать приложение для пользователей, чтобы создавать свои собственные формы.

Пользователь может создать следующие формы:

Личный профиль:

  • ФИО
  • Улица
  • Работа
  • Телефон
    • Главная
    • Работа
    • Мобильные
  • Интересы
    • Проценты 1
    • Проценты 2
    • Проценты 3

Работа:

  • Имя
  • Фамилия
  • Работа
    • Департамент
      • Специальность 1
      • Специальность 2
    • Кафедра
      • Специальность 1
      • Специальность 2

Страны:

  • США
    • государства
      • Нью-Йорк
        • Города
          • Нью-Йорк
          • Фу
      • Алабама
        • Города
          • Bar
          • Baz

Как вы можете видеть, это очень динамичная структура:

  • Нет предопределенного количества полей
  • Нет предопределенных имен полей
  • Пользователь создает структуру базы данных

Поэтому мне интересно, какова лучшая база данных для этого: реляционная (mysql / postgresql) или нереляционная, например mongodb / couchdb / cassandra, или даже XML-базы данных, такие как xindice?

И даже если я выберу нереляционные базы данных для этого, Было бы разумно хранить на нем важную для безопасности информацию, такую ​​как информация о клиентах и ​​счетах?

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

  • Textmate
    • Автор: Foobar
    • Цена: 120
  • Foo
    • Автор: Foobar
    • Цена: 120
  • Офис

    • Приложения
      • Textmate
        • Автор: Foobar
        • Цена: 120
      • Бар
        • Автор: Foobar
        • Цена: 120
  • Как видите, существуют ситуации для идентичных записей. Как с этим справляются нереляционные базы данных? Я так привык к реляционным базам данных.

    Я подытожил свои вопросы:

    • Какой тип базы данных для структуры базы данных, созданной пользователем?
    • Являются ли нереальные базы данных для хранения критически важной информации?
    • Как не -реальные базы данных обрабатывают дубликаты?
    8
    задан Community 22 September 2017 в 17:57
    поделиться

    3 ответа

    Я настоятельно рекомендую вам проверить это на CouchDB.

    1. Вы взаимодействуете с CouchDB, используя простой REST API. Другими словами, это «Сделано из Интернета», а не просто серверная база данных, такая как MongoDB и другие. CouchDB может фактически обслуживать формы и получать материалы, поскольку имеет встроенный веб-сервер.
    2. Будучи хранилищем документов JSON, оно хорошо подходит для хранения структурированных данных без схемы. (Формы и их представления на самом деле являются документами, и более целесообразно моделировать их таким образом, IMO.)
    3. Вы можете легко хранить документ JSON, описывающий каждую веб-форму, в том же «сегменте», что и отправленные формы. (CouchDB может даже анализировать POST-файлы форм и преобразовывать их в документы JSON, как вы сочтете нужным. Например, автоматическая отметка времени отправки форм проста.)
    4. Вы можете написать так называемую функцию «_show», чтобы фактически генерировать HTML-код каждой формы в CouchDB. Также проверьте «_update» и функции проверки.
    5. Он имеет функции безопасности, которые могут вам понадобиться.
    6. Конфликты документов можно легко выявить. Более того, CouchDB автоматически определяет «выигрышную» версию документа, но вы по-прежнему будете иметь доступ к «проигрышным» версиям документа (пока вы не скажете CouchDB сжать базу данных, что удалит старые версии).
      • Что касается уникальности: вместо того, чтобы CouchDB генерировал уникальный _id документа, вы захотите назначить _id, который действительно представляет уникальную отправку формы.Если каждому пользователю разрешено только одно представление в форме, используйте что-то вроде этих строк для каждого документа JSON, созданного из отправки формы: submission:user:5:form:a3df2a712

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

    3
    ответ дан 6 December 2019 в 00:04
    поделиться

    Выбор базы данных больше зависит от того, что и как вы хотите запрашивать нечто большее, чем то, что вы хотите сохранить. Все БД позволят вам хранить практически все, что захотите.

    РСУБД особенно хороши при выполнении запросов на основе реляционной модели, и делать это разумно произвольно. С помощью специальных фильтров и объединений вы можете творить всевозможные чудеса.

    БД ​​NOSQL, как правило, менее гибки в своих запросах, но хорошо справляются с другими задачами (например, лучше работают с «неструктурированными» данными).

    Учитывая то, что вы здесь разместили, я бы просто использовал базу данных SQL и определял таблицы так, как пользователь хочет, чтобы они были определены. Настроить индексы, настроить запросы. Для меня это звучит как реальная и ежу понятно. Базы данных SQL легко справляются со всеми этими «определениями полей на лету», потому что ... это то, что они делают. Так что используйте это.

    -1
    ответ дан 6 December 2019 в 00:04
    поделиться

    Если ваши данные довольно хорошо подходят для реляционной модели, но вам нужно хранить некоторые динамически отформатированные данные, которые не являются огромными, тогда вам, вероятно, будет лучше хранить JSON, XML или аналогичные данные в столбец. Хотя при этом вы теряете некоторые преимущества первоклассной типизации SQL (индексирование, проверка ограничений внешнего ключа, проверка типов и т. Д.), Это хорошо для хранения динамически структурированных документов, когда ваши запросы не заботятся об их внутреннем устройстве.

    Если вы заинтересованы в хранении в основном реляционных данных с использованием JSON / XML и т. Д., Я рекомендую обратиться к PostgreSQL.PostgreSQL имеет тип данных XML, но я не рекомендую его использовать, так как ненавижу XML: P. Никто не мешает вам хранить JSON в поле TEXT, но PostgreSQL скоро получит тип данных JSON с поддерживающими функциями. Модуль hstore contrib обеспечивает эффективный способ хранения пар ключ / значение, а также обеспечивает поддержку полнотекстового индекса.

    Хотя вставка JSON или аналогичного файла в столбец базы данных SQL противоречит реляционной модели, обычно лучше сделать это в любом случае (когда это имеет смысл!). В противном случае вам придется объяснить всю схему вашего приложения базе данных, что приведет к появлению большого количества кода SQL и сопоставления базы данных, который на самом деле ничего не делает.

    2
    ответ дан 6 December 2019 в 00:04
    поделиться
    Другие вопросы по тегам:

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