【问题标题】:How to design a database for relational dynamic forms?如何为关系动态表单设计数据库?
【发布时间】:2016-01-25 07:43:03
【问题描述】:

我的要求是:

  • 需要能够动态添加具有不同字段/字段的表单 类型
  • 表单可以包含一个下拉列表,其中填充 另一个人的价值观

提交的表格 例如: 职员表:

  1. 名字(文本框)
  2. 姓(文本框)
  3. Department(dropdown) -> 应该绑定到部门表单

部门形式:

  1. 部门名称(下拉菜单)

其他信息:

  • 我的数据库是 SQL server
  • 我正在寻找性能
  • 每个表可以有超过一百万条记录
  • 我们的系统中有 1000 多个用户
  • 我们需要获取用户提交记录的不同报告
  • 报告需要对所有列具有过滤功能

选项:

  1. 每个表单创建一个表
  2. 为表单结构和字段结构添加 2 个表 然后是提交表单值和提交字段值的另外 2 个表

还有其他选择或想法吗?

【问题讨论】:

  • 您打算如何将下拉菜单绑定到其他表单?我不明白那部分。除此之外,我建议您的结构尽可能通用。
  • 我想如果我遵循选项2,我的表结构将是:
  • 我想如果我遵循选项 2,我的表结构将是: Template_Form_table(form_id,Form_Name) 和 Template_Field_Table(field_id,field_Name,field_order,form_id,field_datasource) 所以 field_datasource 被引用到同一个表(自引用关系)

标签: sql-server database database-design dynamicform


【解决方案1】:

好吧,我可能会创建一个这样的数据库结构:

-- This table will hold the forms
CREATE TABLE tblForm
(
      Form_Id int IDENTITY(1,1) PRIMARY KEY
    , Form_Name varchar(100)
    -- Any other form related data such as create date, owner etc`
)

-- This table will hold the input types (i.e text box, combo box, radio buttons etc`)
CREATE TABLE tblInputType
(
      InputType_Id int IDENTITY(1,1) PRIMARY KEY
    , InputType_Name varchar(100)
)

-- This table will hold the inputs used in the form
CREATE TABLE tblFormInput
(
      FormInput_Id int IDENTITY(1,1) PRIMARY KEY
    , FormInput_Form int FOREIGN KEY REFERENCES tblForm(Form_Id)
    , FormInput_InputType int FOREIGN KEY REFERENCES tblInputType(InputType_Id)
    , FormInput_Name varchar(100)
    , FormInput_DisplayOrder numeric(18,18)
    , FormInput_DefaultText varchar(100)
)

-- This table will hold the texts and values used for combo boxes, radio buttons, check boxes etc`
CREATE TABLE tblFormInputExtraData
(
      FormInputExtraData_FormInput int FOREIGN KEY REFERENCES tblFormInput(FormInput_Id)
    , FormInputExtraData_Text varchar(100)
    , FormInputExtraData_Value varchar(100)
)

兴趣点:

  1. 我已将 varchar(100) 用于所有文本数据,就像任意 此示例的编号。你应该选择合适的内容 您的应用程序的长度。

  2. 我还使用 varchar 来存储输入的值,例如组合 框和单选按钮,因为它很容易。如果您打算使用 非文本值(例如 .Net 对象或图像,您应该 将此数据类型更改为适合您需要的任何类型 - xml 和 想到了 varbinary。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多