1

私のアプリケーションでは、ユーザーが任意の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             |
-------------------------------------------------------------
...

これは良いですか?どちらのアプローチを使用するかについて、私は対立しています。私が得ることができるどんなガイダンスも大いに感謝されます。

4

1 に答える 1

1

答えは、検証ルールをどのように機能させたいかによって完全に異なります。必須/最小/最大のみを使用する場合は、フィールドの列にする必要があります (最後のオプション)。検証ルールが動的ルールの特定のセットを定義する場合、それらは独自のテーブルにあり、検証ルールとフィールド ID の間のマッピングが存在する必要があります (この場合、同じフィールド ID を複数の検証ルールにマップできる必要があります)。 )。次に、フィールドを照会し、マッピング テーブルと結合し、ルールと結合してそのフィールドにルールを適用します。

于 2010-10-11T22:15:50.003 に答える