我正在尝试构建一种表单构建器,它允许我以灵活的方式定义,显示和存储“测试”。即允许用户通过Web界面创建新类型的测试/表单(“分组”)并定义将在表单上显示的一组字段(任何类型的字段,包括日期,文本,广播,复选框)等)。我还需要一个结果表,它将存储每个表单/测试中保存的值。
作为一个不充分的例子,到目前为止我有以下3个表:
dd_TestGrouping
- TestGroupingID [pk]
- TestGroupingName "Algebra-1"
- TestGroupingTypeID "Math"
dd_TestFields
- TestFieldID [pk]
- TestGroupingID [fk]
- TestFieldName "Circumference"
- TestFieldType "TextBox"
- Sequence
TestResults
- TestResultID [pk]
- TestFieldID [fk]
- value "50"
- Unit "CM"
上面的问题 - 如果没有别的 - 我不知道如何动态显示下拉列表和链接的收音机/复选框。另外,我该如何处理验证?
提前感谢任何帮助/指示。
答案 0 :(得分:4)
要包含组合框值,您需要通过以下方式扩展模型:
dd_TestFields
- TestFieldID [pk]
- TestGroupingID [fk]
- TestFieldName "Gender"
- TestFieldType "Combo Box"
- Sequence
使用新表:
dd_TestFieldSelection
- TestFieldSelectioniD [pk]
- TestFieldID [fk]
- TestFieldValue "Female"
- Sequence
验证我认为自然属于您的dd_TestFields表:
dd_TestFields
- TestFieldID [pk]
- TestGroupingID [fk]
- TestFieldName "Age"
- TestFieldType "Number/Text Box"
- Sequence
- Required "True"
- MinValue "0"
- MaxValue "150"
这只是一个粗略的草图,但您可以根据需要扩展这些想法。
答案 1 :(得分:3)
首先,要小心inner platform effect。
第二,支持下拉列表只需要有一个第4表,其中包含“多”类型字段的所有可能值。
答案 2 :(得分:2)
听起来这是使用EAV model的好例子。
答案 3 :(得分:1)
好的,所以在你的回答和评论中,你已经描述了两种截然不同的场景。
如果它是代数测试的表单生成器并在您的示例中进行了描述,请阅读 here。 EAV非常诱人,但是使用普通的RDBMS构建该模型需要付出巨大的代价。
然而,
如果您在评论中说的是健康记录。那是一场不同的球赛。健康记录是奇怪的,因为基本上有无数的症状和严重的症状缺乏。假设您有手术伤口并且发烧。这可能表明感染了。如果伤口没有发红,肿胀,压痛或引流,那将是严重的症状。
想想像Facebook这样的健康记录。当您访问朋友的页面时,数据库具有该人的PK,然后通过该数据库获取所有内容。你通常不会在家乡做一些用户,例如结婚。该查询是对EAV的痛苦。与健康记录相同。病人123出现,你只需要他/她的图表。您无需查询共享6种症状的所有人。 (顺便说一下,这确实发生在研究中,但那些EAV记录必须进行过滤,旋转并转换为更多的3nf格式。)
如果你正在做健康记录,我会研究一些专门用于健康记录的新EAV RDBMS。