Search code examples
sqlformsdatabase-designnormalizationentity-attribute-value

Proper way to store user defined data in SQL


I want to build an online form builder much like wufoo that allows the users to create and publish their own web forms. Each submission should be saved to a data base where the user can later retrieve the submissions.

As these forms will be dynamic, ie. the user has complete control over the amount and type of form fields I am trying to think of a solid database design to store this information.

I would have one table fieldtype which contains every type of field available to the users, ie. textfield, emailfield etc.

One baseform table which will hold each forms id, url etc.

I would then have a table formfields which would contain ref to the baseform and to fieldtype, this table could also include custom validation to be done on each field.

Is this design good as a base structure? I imagine it will be easy to add new types of fields to the application however I don't know what the potential downsides are as I am far from a sql expert.


Solution

  • store user defined data in SQL

    I think you are looking for the Entity–attribute–value database model in which:

    The basic idea is to store attributes, and their corresponding values, as rows in a single table.

    Typically the table has at least three columns: entity, attribute, and value. Though if there is only a single relevant entity, e.g. a table for application configuration or option settings, the entity column can be excluded.

    See this pages as a start:

    I retagged your question with tag, in which you can browse a lot of threads that relate to your case.