我正在编写一个应用程序,用户可以在其中向表单添加“输入”。这些输入可以是多种不同类型,包括文本框或复选框。
对于文本框与复选框,数据类型为字符串与布尔值。
有关我的应用程序的更多信息
1)用户能够创建一个“表单”,可以为客户填写多种不同类型的输入。这里有些例子。这些输入可以是动态的,也可以由用户创建。
2)用户保存表单,并在数据库中根据类型保存新创建的输入。
3)新用户进入应用程序并填写刚刚创建的新表单。他们填写原始管理员创建的输入,例如他们的姓名,他们回答是,以便注册新闻通讯。然后他们点击提交。
4)然后数据库保存输入的答案。这就是我的问题所在。
我的问题是如何将输入值存储在SQL中的一行中。我将提供一些解决方案,但我正在就这种情况下通常采取的措施达成共识。
输入名称
输入布尔值 - (当不是布尔类型的输入时将为NULL)
输入字符串值 - (当不是字符串类型的输入时将为NULL)
输入名称
输入类型
输入值(类型字符串,我会根据类型强制转换)
输入名称
输入类型
输入值键 - (根据输入类型,表的弱外键。这不是真正的外键,因为它可能指向多个不同的表)
答案 0 :(得分:1)
每种数据类型的表怎么样,每行指向包含的表单?例如:
FormTable
FormId SomeOtherFields
1 Blah
2 Bleh
BooleanFieldsTable
BooleanFieldId FormId DisplayName Value
1 1 Married True
2 2 Finished False
IntFieldsTable
IntFieldId FormId DisplayName Value
1 1 Age 35
2 1 Amount 4
DateTimeFieldsTable
DateTimeFieldId FormId DisplayName Value
1 2 Purchase Date 2014-12-15 16:25:56.187
VarcharFieldsTable
VarcharFieldId FormId DisplayName Value
1 1 Name John
答案 1 :(得分:0)
当我实施像今年这样的系统时,我选择了选项2.我经常后悔,并希望我做了选项3.我希望如果我选择了3,我可能也会后悔。
选项2使一些事情变得更容易......链接中的链接更少,逻辑更少,但是在演员阵容中有更多的逻辑。
选项3使一些事情变得更容易......在铸造中减少铸造和减少逻辑,但链接中的逻辑更多。
当时SQL Server遇到了一个错误,使得在许多情况下选项2难以实现。我不知道他们是否修复了这个错误。
以下是该错误的示例(注意它并不总是显示,取决于表格大小和许多其他因素):
SELECT CAST(field as int)
FROM table1
WHERE selectorField = 5
在某些情况下,如果行(不是selectorField = 5)无法转换为int类型,则此查询将失败并显示非法转换错误。
如果此问题仍然存在,您可以使用选项3。