2010-10-11 2 views
1

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

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

+0

Я предпочитаю создавать правила на основе таблиц. Спасибо @ Взрывные таблетки –

Смежные вопросы