Bene, questa è una delle aree che suscita ancora una discussione piuttosto ampia. Come dicono alcuni [chi? - pensa che fosse Atwood tra l'altro, ma mi sfugge un link], è già stata realizzata un'applicazione che può fare tutto; si chiama C. Quello che vuoi fare confina quasi con l'area "troppo generalizzata", anche se posso vedere il valore nel non aver bisogno di un programmatore ogni volta che una regola aziendale cambia.
Se dovessi implementare un tale sistema, suppongo che proverei a suddividerlo in domini. Hai già fatto un lavoro relativamente buono con il secondo tavolo. Normalizzalo in domini separati che vengono utilizzati per comporre le regole aziendali. Si crea una regola aziendale che comprende 1 o più vincoli OR-ed insieme. Ogni vincolo richiede una proprietà che è limitata con un operatore rispetto a un termine. I termini possono essere complicati, poiché possono essere qualsiasi cosa, da una proprietà a una funzione, a una funzione composta. Probabilmente è più semplice controllare le regole aziendali per vedere di cosa hai bisogno. Inizia con, ad esempio, proprietà, valori booleani e cose comuni come "ORA".
Quindi lo schema stesso sarebbe, ad esempio, composto dalle rules
, che contengono più constraints
(l'ovvio vantaggio è che puoi collegarli a qualsiasi [gruppo di utenti/offerta/intervallo di tempo/altro dominio] che desideri). Questi sono, a loro volta, composti da properties
, che verrebbe confrontato con uno degli operators
(tabella di riferimento principalmente in modo da poter inserire nomi descrittivi personalizzati per i non programmatori, ma potresti scegliere di inserire una funzione personalizzata in essa ad un certo punto) e, ovviamente, uno dei terms
. L'ultima parte è la più complessa, quindi probabilmente dovresti qualificarla con un ID in term_types
quindi sapresti se stai confrontando un'altra proprietà o una funzione. Puoi anche solo VARCHAR
it e creare il campo con PHP, il che non dovrebbe essere troppo difficile, visto come hai tutte le opzioni in properties
e/o functions
.
È un sistema molto aperto (e probabilmente ci sono modi migliori per farlo), quindi probabilmente non vale la pena farlo a meno che tu non sappia che avrai bisogno di un alto grado di dinamismo nelle regole aziendali.