数据库设计帮助 - EAV +表单构建器

时间:2010-11-22 16:48:01

标签: sql sql-server database database-design

我正在尝试构建一种表单构建器,它允许我以灵活的方式定义,显示和存储“测试”。即允许用户通过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"

上面的问题 - 如果没有别的 - 我不知道如何动态显示下拉列表和链接的收音机/复选框。另外,我该如何处理验证?

提前感谢任何帮助/指示。

4 个答案:

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