Я считаю, что Mongodb - это правильный выбор для этого приложения, поскольку он не применяет никакой схемы, это хороший выбор для произвольных данных.
Кроме того, он поддерживает все типы данных, которые вы ожидали. так легко.
Иметь коллекцию форм, которая выглядит следующим образом (код Ruby Mongoid)
class XForm
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Paranoia
field :name, :type => String
field :user, :type => BSON::ObjectId
embeds_many :formfields
end
и
class Formfields
include Mongoid::Document
field :name, :type => String
field :kind, :type => String
#field :value, :type => String -> dont add it in formfields, make it dynamic sine the type varies
embedded_in :xform
end
Чтобы добавить поле значения в качестве динамического поля, вам нужно включить allow_dynamic_fields: true
в mongoid.yml
и создайте новое поле, подобное этому
form = XForm.new(:name=>'test form',:user => current_user.id)
#for integer field
form.formfields << Formfields.new(:name => "Age",:kind=>"Integer", :value => 21)
#for bool field
form.formfields << Formfields.new(:name => "isMarried",:kind=>"Boolean",:value => true)
#for string field
form.formfields << Formfields.new(:name => "name",:kind=>"String",:value => "ram")
Надеюсь, это поможет