Хранение пользовательских шаблонов коллекций в MongoDB - PullRequest
0 голосов
/ 27 мая 2018

Фон

Я занимаюсь разработкой веб-приложения, которое требует от пользователей создавать и заполнять пользовательские таблицы (например, таблицы HTML или MS Word, а не таблицы базы данных).Идея заключается в том, что администраторы будут создавать шаблоны для этих таблиц, а обычные пользователи будут их заполнять. Каждый обычный пользователь может заполнить свой собственный шаблон, поэтому будет много таблиц, использующих один и тот же шаблон.

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

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

Я думал об использовании чего-то вроде MongoDB.Я новичок в Mongo, так что я уверен, что я не изучал каждый вариант, но я подумал, что это будет лучше, чем использование MySQL (то, что я использовал для других приложений).Скажите мне, если я ошибаюсь по этому поводу, хотя;возможно я что-то упускаю.

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

Мой подход и вопросы

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

    {
        name: <String>,
        fields: [
            {
                name: <String>,
                type: <String>    <----this is what I have an issue with
            },
            ...
        ]
    }
    

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

    Что-то вроде:

    {
        template_id: <uuid, integer, string or something>
        name: <String>,
        rows: [
            {
                <field name>:<field value of specified type>,
                ...
            }
        ]
    }
    
  2. Насколько это возможно и рекомендуется создавать коллекции на лету?

Если что-то неясно, позвольте мнезнаю, чтобы я мог уточнить.Как я уже сказал, я новичок в MongoDB (и нереляционных БД в целом), поэтому, если я упускаю что-то очевидное, не стесняйтесь указывать на это и предлагать предложения.Полезные ссылки на документы или учебники также приветствуются.Я также готов попробовать другие решения NoSQL.

1 Ответ

0 голосов
/ 28 мая 2018

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

  1. Схема JSON : Текущая версия - draft-07 http://json-schema.org/. Вы можете прочитать о стандарте схемы и иметь клиентскую библиотеку на многих языках программирования
  2. MongoDB : теперь MongoDB 3.6 поддерживает проверку JSon Schema draft-04 https://docs.mongodb.com/manual/core/schema-validation/#json-schema
  3. Хранение схемы в MongoDB : У нас будут проблемы при сохранении схемы Json в коллекции.В Json Schema есть персонажи, которые нельзя хранить в mongodb.Вы можете ссылаться https://accraze.info/storing-json-schema-templates-in-mongodb/
...