У меня есть веб-приложение, которое использует реляционную базу данных (MySQL). Мы добавляем новую функцию, которая позволит определенным пользователям динамически создавать «формы» из пула необязательных элементов формы и распространять эти формы для заполнения / отправки другим пользователям.
Проблема заключается в хранении заполненных отправленных форм. Каждая форма может и будет различаться по количеству и комбинации элементов формы, и с реляционной базой данных мои варианты несколько ограничены динамическим созданием новой таблицы для хранения представлений каждой формы (кажется, плохой путь для перехода) или сохранения каждая из представленных форм в виде JSON в столбце TEXT (теряет все полезные возможности запросов к СУБД)
Я никогда ранее не использовал MongoDB в производственном проекте, но думаю, что было бы неплохо использовать мою реляционную базу данных MySQL для хранения всех форм, созданных определенными пользователями моего приложения, а затем сохранять все представления в MongoDB с каждым документом, ссылающимся на UUID формы в MySQL.
Первый недостаток, который я могу придумать при таком подходе, заключается в отсутствии ссылочной целостности между отправкой форм и формами, расположенными в MySQL. Если я удаляю форму в MySQL, все отправленные формы необходимо будет удалить вручную (если я хочу воспроизвести эффект «Каскад»)
Буду ли я хранить все свои отправленные формы для всех моих форм в одной коллекции MongoDB как отдельные документы? Любые советы высоко ценится. :)
РЕДАКТИРОВАТЬ 1
На основании документации здесь: http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections
Сейчас я рассматриваю возможность создания новой коллекции для хранения всех представлений каждого уникального типа формы.
РЕДАКТИРОВАТЬ 2
После некоторых тщательных размышлений и советов других людей я решил отказаться от своего подхода с двумя базами данных для решения этой проблемы в пользу схемы реляционной базы данных, которая, как мне кажется, решает проблему создания динамических форм и сохранения отправленных форм. таким образом, что они легко могут запрашивать сложные отчеты.
По сути, каждая запись в «формах» представляет собой уникальную форму, созданную пользователем. 'forms_fields' имеет внешний ключ, который ссылается на форму и тип enum с параметрами:
1. флажок
2. текстовое поле
3. текстовая область
4. выберите
5. мульти-выбор
6. дата
«forms_fields_options» содержит все «опции», которые будет иметь поле выбора.
С помощью этих трех таблиц пользователи могут создавать настраиваемые формы.
Когда другой пользователь заполняет и отправляет форму, создается запись в forms_submissions. Для каждого поля будет создана соответствующая запись в «forms_submissions_fields», которая ссылается на отправку формы и forms_fields_id. Последняя таблица 'forms_submissions_options_multiselect', по сути, является объединяющей таблицей, чтобы указать, какие опции из поля множественного выбора формы выбрал пользователь.