Forms 如何将用户生成的表单映射到数据库中?
我希望用户能够使用N个字段、文本、数字、电子邮件、组合等创建表单。如何存储每个字段而不知道其中有多少字段? 我想到的第一种方法是将所有文本字段存储在一个表中,将所有电子邮件字段存储在另一个表中,等等。然后,在一个表中,我使用自己的ID存储表单信息。 我如何在这个表单系统中解决可伸缩性问题?例如,有多个服务器共享表单。 我的设计够好吗? 我需要存储什么才能使用XSLT转换为html?两种解决方案:Forms 如何将用户生成的表单映射到数据库中?,forms,database-design,Forms,Database Design,我希望用户能够使用N个字段、文本、数字、电子邮件、组合等创建表单。如何存储每个字段而不知道其中有多少字段? 我想到的第一种方法是将所有文本字段存储在一个表中,将所有电子邮件字段存储在另一个表中,等等。然后,在一个表中,我使用自己的ID存储表单信息。 我如何在这个表单系统中解决可伸缩性问题?例如,有多个服务器共享表单。 我的设计够好吗? 我需要存储什么才能使用XSLT转换为html?两种解决方案: 创建干净、规范化的数据库结构(避免) 在数据库中存储元数据(如XML等) 1。解决方案: id
- 创建干净、规范化的数据库结构(避免)
- 在数据库中存储元数据(如XML等)
id | user_id | name
id | form_id | label | type | sorting | values | default
id | user_id | form_id
id | filled_form_id | field_id | values
id | user_id | name | metadata
表格:
id | user_id | name
id | form_id | label | type | sorting | values | default
id | user_id | form_id
id | filled_form_id | field_id | values
id | user_id | name | metadata
- 用户id:此表单的“所有者”
- 名称:表格的名称,如“注册”或其他名称
id | user_id | name
id | form_id | label | type | sorting | values | default
id | user_id | form_id
id | filled_form_id | field_id | values
id | user_id | name | metadata
- form_id是forms表的外键
- 标签是输入的标签,如“密码”
- 类型是输入类型(如选择、电子邮件、密码、文本),在此基础上,您可以处理显示/验证等
- 排序使您能够在表单中排列字段
- 值-预定义值示例是一个选择框,将其存储为xml、json等元数据,并在应用程序中对其进行解析,您可以使用类型字段确定如何处理这些值
- 默认值-默认值(可能是选择框中的选定值或文本输入的预定义文本)
id | user_id | name
id | form_id | label | type | sorting | values | default
id | user_id | form_id
id | filled_form_id | field_id | values
id | user_id | name | metadata
- 用户id:谁填写了表格
- 表格id:哪种表格
id | user_id | name
id | form_id | label | type | sorting | values | default
id | user_id | form_id
id | filled_form_id | field_id | values
id | user_id | name | metadata
- 填充表单id:填充表单表的外键
- 字段id:表单的字段id
- 值:输入的值,可能存储为元数据,如JSON、XML(例如:允许多个选择的选择框)。您可以连接表单和表单字段,以便获得字段的类型,然后可以正确处理值
- 数据库为您处理数据完整性
- 规范化数据库模式
- 静态模式,用于检索字段的多个联接
- 与EAV模型的方向一致
- 不可能使用XSLT进行直接转换
id | user_id | name
id | form_id | label | type | sorting | values | default
id | user_id | form_id
id | filled_form_id | field_id | values
id | user_id | name | metadata
您只有两个表:
表格:
id | user_id | name
id | form_id | label | type | sorting | values | default
id | user_id | form_id
id | filled_form_id | field_id | values
id | user_id | name | metadata
- 用户id:表单的所有者(外键)
- 名称:表格名称(如注册等)
- 元数据:您对表单的自我实现描述(HTML、XML、JSON等),它正确地描述了表单,为元素提供了ID等
id | user_id | name
id | form_id | label | type | sorting | values | default
id | user_id | form_id
id | filled_form_id | field_id | values
id | user_id | name | metadata
id |表单| id |用户| id |值
- 表单id:表单的外键
- user_id:填写表单的用户的外键
- 值:您对填写表单(HTML、XML、JSON等)的自我实现描述,该表单描述输入并将其正确映射到字段
- 非常灵活,无EAV陷阱,结构简单
- 可以使用XSLT进行直接转换
- 您必须自己确保数据的完整性