在我的应用程序中,我允许用户创建一个包含他们想要的任何HTML表单字段的表单(例如文本输入,文本区域,选择等)。我想让用户能够为每个字段定义0个或更多累积验证规则(最多可能有25个不同的验证规则)。我该如何塑造这个?
这是一个潜在的解决方案:
============================================================
| Id | FieldId | ValidationRuleType | ValidationRuleDetail |
============================================================
| 1 | 25 | Required | NULL |
------------------------------------------------------------
| 2 | 26 | Minimum Length | 5 |
------------------------------------------------------------
| 3 | 26 | Maximum Length | 12 |
------------------------------------------------------------
...
使用上述设计,在大多数情况下,ValidationRuleType可能只是“正则表达式”(或查找表中的值,例如“Regex”的ValidationRuleTypeId = 1),并使用以下内容进行ValidationRuleDetail:
// Added bonus of this approach is that users who know regex could define their own patterns
.{1,} // Any character, 1 or more times. Use for "Required"
.{5,} // Any character, 5 or more times. Use for "Minimum Length = 5"
.{,12} // Any character, 12 or less times. Use for "Maximum Length = 12"
问题是这个解决方案是EAV。这是件坏事,对吗?
另一个可能的解决方案:
=============================================================
| Id | FieldId | Required | Minimum Length | Maximum Length |
=============================================================
| 1 | 25 | TRUE | NULL | NULL |
-------------------------------------------------------------
| 2 | 26 | NULL | 5 | 12 |
-------------------------------------------------------------
...
这样更好吗?我对使用哪种方法感到矛盾。我能得到的任何指导都非常感激。
答案 0 :(得分:1)
答案完全取决于您希望验证规则如何工作。如果您要拥有的只需要/ min / max,那么它们应该只是该字段的列(最后一个选项)。如果验证规则定义了一组特定的动态规则,它们应该在它们自己的表中,并且验证规则和字段ID之间应该存在映射(在这种情况下,您应该能够将相同的字段ID映射到多个验证规则)。然后查询字段,与映射表连接并加入规则以将规则应用于该字段。