如何设计关系动态表单的数据库?

Sol*_*maz 3 database sql-server database-design dynamicform

我的要求是:

\n\n
    \n
  • 需要能够动态添加具有不同字段/字段类型的表单\n
  • \n
  • 表单可以包含一个下拉列表,\n该下拉列表由另一个表单的值填充
  • \n
\n\n

提交的表格\n例如:\n员工表格:

\n\n
    \n
  1. 名字(文本框)
  2. \n
  3. 姓氏(文本框)
  4. \n
  5. 部门(下拉)-> 应绑定到部门表单
  6. \n
\n\n

部门表格:

\n\n
    \n
  1. 部门名称(下拉)
  2. \n
\n\n

其他信息:

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

选项:

\n\n
    \n
  1. 每个表单创建一个表
  2. \n
  3. 添加 2 个表格用于表单结构和字段结构\n然后再添加 2 个表格用于提交表单值和提交字段值
  4. \n
\n\n

还有其他选择或想法吗?

\n

Zoh*_*led 6

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

-- 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)
)
Run Code Online (Sandbox Code Playgroud)

兴趣点:

  1. 我已将 varchar(100) 用于所有文本数据,就像本示例中的任意数字一样。您应该为您的应用程序选择适当的内容长度。

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