Проектирование базы данных для динамической проверки полей формы - PullRequest
1 голос
/ 12 октября 2010

В моем приложении я разрешаю пользователям создавать форму, содержащую любое поле формы 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 для «Regex»), и используйте следующее для 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             |
-------------------------------------------------------------
...

Это лучше?Я не согласен с тем, какой подход использовать.Любое руководство, которое я могу получить, высоко ценится.

1 Ответ

1 голос
/ 12 октября 2010

Ответ полностью зависит от того, как вы хотите, чтобы правила валидации работали. Если требуется все / мин / макс, тогда они должны быть просто столбцами для поля (последний вариант). Если правило проверки определяет определенный набор динамических правил, они должны быть в их собственной таблице, и должно существовать сопоставление между правилом проверки и идентификатором поля (в этом случае вы должны иметь возможность сопоставить один и тот же идентификатор поля с несколькими правилами проверки ). Затем вы запрашиваете поля, объединяетесь с таблицей сопоставления и объединяетесь с правилами, чтобы применить правила к этому полю.

...