【问题标题】:How to map user generated forms into a database?如何将用户生成的表单映射到数据库中?
【发布时间】:2011-11-13 00:50:24
【问题描述】:

我希望用户能够制作包含 N 个字段、文本、数字、电子邮件、组合等的表单。如何在不知道有多少字段的情况下存储每个字段? 我想到的第一种方法是将所有文本字段存储在一个表中,将所有电子邮件字段存储在另一个表中,等等。然后,在一个表中,我使用它自己的 ID 存储表单信息。 我如何在这个表单系统中解决可伸缩性问题?例如,有多个服务器共享表单。 我的设计够好吗? 我需要存储什么才能使用 XSLT 转换为 html?

【问题讨论】:

    标签: forms database-design


    【解决方案1】:

    两种解决方案:

    • 创建干净、规范化的数据库结构(避免使用EAV Model
    • 在数据库中存储元数据(如 XML 等)

    1.解决方案

    表格

    id | user_id | name
    
    • user_id:此表单的“所有者”
    • 名称:表单的名称,例如“注册”或其他名称

    form_fields 表

    id | form_id | label | type | sorting | values | default 
    
    • form_id 是表单表的外键
    • label 是输入的标签,例如“密码”
    • type 是输入类型(如选择、电子邮件、密码、文本),基于此您可以处理显示/验证等。
    • 排序使您能够在表单中排列字段
    • 值 - 预定义值示例是一个选择框,将其存储为元数据(如 xml、json 或其他任何内容)并在您的应用程序中解析它,您可以使用类型字段来确定您希望如何处理这些值
    • default - 默认值(可能是选择框中的选定值或文本输入的预定义文本)

    如果有人填写表格:

    fill_forms 表格

    id | user_id | form_id
    
    • user_id:谁填写了表格?
    • form_id:哪种形式?

    fill_form_values

    id | filled_form_id | field_id | values
    
    • filled_form_id:fill_forms 表的外键
    • field_id:表单的字段id
    • 值:输入的值,可能存储为 JSON、XML 等元数据(例如:允许多项选择的选择框)您可以连接表单和表单字段,以便获取字段的类型,然后您可以处理正确的值

    优点:

    • 数据库为您处理数据完整性
    • 规范化的数据库架构

    缺点:

    • 静态架构,多个连接检索字段
    • 朝着 EAV 模型的方向发展
    • 无法使用 XSLT 进行直接转换

    2。解决方案:

    你只有两张桌子:

    表格

    id | user_id | name | metadata
    
    • user_id:表单的所有者(外键)
    • name:表单的名称(如注册等)
    • 元数据:您自行实现的表单描述(HTML、XML、JSON 等),正确描述表单,为元素提供 ID 等。

    fill_forms 表格

    标识 | form_id |用户 ID |价值观

    • form_id:表单的外键
    • user_id:填写表单的用户的外键
    • 值:您对填写的表单(HTML、XML、JSON 等)的自我实现描述,用于描述输入并将其正确映射到字段

    优点:

    • 非常灵活,没有EAV陷阱,结构简单
    • 可以使用 XSLT 进行直接转换

    缺点:

    • 您必须自己确保数据完整性

    【讨论】:

    • 我会选择第二种解决方案,另外,您认为哪种解决方案占用资源较少?确保数据完整性 + 更新元数据或使用第一个解决方案给数据库带来压力?
    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2014-06-24
    相关资源
    最近更新 更多