在我的应用程序中,我允许用户创建一个包含他们想要的任何 HTML 表单字段的表单(例如文本输入、文本区域、选择等)。我想让用户能够为每个字段定义 0 个或多个累积验证规则(最多可能有 25 个不同的验证规则)。我应该如何建模?
这是一个潜在的解决方案:
============================================================
| Id | FieldId | ValidationRuleType | ValidationRuleDetail |
============================================================
| 1 | 25 | Required | NULL |
------------------------------------------------------------
| 2 | 26 | Minimum Length | 5 |
------------------------------------------------------------
| 3 | 26 | Maximum Length | 12 |
------------------------------------------------------------
...
使用上述设计,在大多数情况下,ValidationRuleType 可能只是“Regex”(或查找表中的值,例如“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 |
-------------------------------------------------------------
...
这是否更好?我对使用哪种方法感到矛盾。非常感谢我能得到的任何指导。