sql-server - 如何为关系动态表单设计数据库?

标签 sql-server database database-design dynamicform

我的要求是:

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

提交表格 例如: 员工表格:

  1. 名字(文本框)
  2. 姓氏(文本框)
  3. 部门(下拉)-> 应该绑定(bind)到部门表格

部门表格:

  1. 部门名称(下拉)

其他信息:

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

选项:

  1. 为每个表单创建一个表
  2. 为表单结构和字段结构添加 2 个表 然后还有 2 个表用于 submitted-form-value 和 submitted-field-value

还有其他选择或想法吗?

最佳答案

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

-- 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。

关于sql-server - 如何为关系动态表单设计数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34987407/

相关文章:

sql-server - SQL 快速插入,无需更新

mysql - 在 UNION 中显示 JOIN 表中的所有字段?

database - 为类(class)和学生设计数据库

database-design - 将 Liquibase 与 Snowflake 结合使用

mysql - 如何在一个表中存储多个选项?

sql-server - 针对实时系统进行测试的策略

sql-server - 通过同义词访问时的安全上下文问题

database - 在数据库中创建索引的数据结构

sql-server - SQL Server : why doesn't this query return NULL values?

mysql - 将行转置为列 (MySQL)