Фон
Я занимаюсь разработкой веб-приложения, которое требует от пользователей создавать и заполнять пользовательские таблицы (например, таблицы HTML или MS Word, а не таблицы базы данных).Идея заключается в том, что администраторы будут создавать шаблоны для этих таблиц, а обычные пользователи будут их заполнять. Каждый обычный пользователь может заполнить свой собственный шаблон, поэтому будет много таблиц, использующих один и тот же шаблон.
Теперь эти шаблоны могут содержать любое количество столбцов, и каждый столбец может иметь различный тип данных.Они также могут меняться со временем, то есть должны быть версии их.Другими словами, как только пользователь заполняет шаблон, он должен сохраняться с этой структурой, даже если шаблон изменится в будущем.Он сохранит старую версию шаблона, в то время как новые пользователи будут использовать новейшую версию.
Я обычно работаю с реляционными базами данных, но для этого сценария реляционная база данных не кажется подходящей.Я чувствую, что в итоге получится куча таблиц и потребуется много объединений для извлечения необходимых мне данных, особенно если база данных нормализована.
Я думал об использовании чего-то вроде MongoDB.Я новичок в Mongo, так что я уверен, что я не изучал каждый вариант, но я подумал, что это будет лучше, чем использование MySQL (то, что я использовал для других приложений).Скажите мне, если я ошибаюсь по этому поводу, хотя;возможно я что-то упускаю.
Я хочу иметь возможность хранить шаблоны (имя, столбцы (по порядку, с их именами и типами данных)), а затем повторно использовать эти шаблоны каждый раз, когда пользователь хочет заполнитьих в. Я хотел бы использовать коллекцию для хранения всех таблиц, которые используют одну и ту же версию шаблона.То есть коллекция будет создаваться каждый раз при создании шаблона.Коллекция должна иметь определенные типы данных, которым должны следовать все документы внутри.Если я правильно понимаю, MongoDB предлагает проверку схемы для этого.
Мой подход и вопросы
Как я могу хранить шаблоны в базе данных?Я думал о том, чтобы хранить их как документы в коллекции «шаблонов», что будет примерно как в примере ниже, но я обеспокоен тем, чтобы типы данных были строками.
{
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>,
...
}
]
}
Насколько это возможно и рекомендуется создавать коллекции на лету?
Если что-то неясно, позвольте мнезнаю, чтобы я мог уточнить.Как я уже сказал, я новичок в MongoDB (и нереляционных БД в целом), поэтому, если я упускаю что-то очевидное, не стесняйтесь указывать на это и предлагать предложения.Полезные ссылки на документы или учебники также приветствуются.Я также готов попробовать другие решения NoSQL.