Domanda

Nella mia domanda, mi consentono agli utenti di creare un modulo contenente ogni campo del form HTML che vogliono (per esempio l'immissione di testo, textarea, selezionare, ecc). Voglio dare agli utenti la possibilità di definire 0 o più regole di validazione cumulativi per ogni campo (ci potrebbero essere fino a 25 diverse regole di convalida). Come dovrei modellare questo?

Ecco una possibile soluzione:

============================================================
| Id | FieldId | ValidationRuleType | ValidationRuleDetail |
============================================================
| 1  | 25      | Required           | NULL                 |
------------------------------------------------------------
| 2  | 26      | Minimum Length     | 5                    |
------------------------------------------------------------
| 3  | 26      | Maximum Length     | 12                   |
------------------------------------------------------------
...

Utilizzando il disegno qui sopra, forse nella maggior parte dei casi, il ValidationRuleType potrebbe essere solo "Regex" (o un valore da una tabella di ricerca, come ad esempio ValidationRuleTypeId = 1 per "Regex"), e utilizzare il seguente per 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"

Il problema è che questa soluzione è EAV. Questa è una brutta cosa, vero?

Un'altra possibile soluzione:

=============================================================
| Id | FieldId | Required | Minimum Length | Maximum Length |
=============================================================
| 1  | 25      | TRUE     | NULL           | NULL           |
-------------------------------------------------------------
| 2  | 26      | NULL     | 5              | 12             |
-------------------------------------------------------------
...

Questa è la migliore? Sono in conflitto su quale approccio utilizzare. Qualsiasi orientamento posso ottenere è molto apprezzato.

È stato utile?

Soluzione

La risposta dipende interamente da come si desidera che le regole di convalida per il lavoro. Se tutto quello che si sta per avere è necessaria / min / max, allora dovrebbero essere solo le colonne per il campo (ultima opzione). Se una regola di convalida definisce un insieme specifico di regole dinamiche, dovrebbero essere nel loro tavolo e una mappatura tra una regola di convalida e l'ID del campo dovrebbero esistere (si dovrebbe essere in grado di mappare lo stesso ID campo per più regole di validazione in questo caso ). Poi si domanda per i campi, si uniscono con la tabella di mapping e unirsi con le regole per applicare le regole di quel campo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top