私のアプリケーションでは、ユーザーが任意のHTMLフォームフィールド(テキスト入力、textarea、selectなど)を含むフォームを作成できるようにします。ユーザーが各フィールドに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 |
-------------------------------------------------------------
...
これは良いですか?どちらのアプローチを使用するかについて、私は対立しています。私が得ることができるどんなガイダンスも大いに感謝されます。