Ci scusiamo per il titolo non descrittivo, non so come spiegare ciò che sto cercando di ottenere in modo sintetico.
Nella maggior parte dei casi di utilizzo di SQL, abbiamo nel database dei record che hanno proprietà e stiamo cercando di recuperare i record che soddisfano alcune condizioni. Ad esempio, potremmo avere ad esempio una tabella di prodotti, in cui ogni prodotto ha una data di rilascio, un prezzo e una categoria. Possiamo quindi facilmente richiedere prodotti rilasciati dopo una certa data, con un prezzo inferiore a un determinato valore e appartenente o non appartenente a una categoria specifica.
Ciò che sto cercando di ottenere è essenzialmente il contrario. Ho una tabella di servizi con condizioni e ogni utente ha varie proprietà. (pensa 'data di nascita', 'ha la patente di guida', ecc ...) Ho bisogno di visualizzare un elenco di tutti i servizi che un dato utente è idoneo.
Un altro dei miei requisiti è che questo deve essere possibile per gli utenti anonimi, quindi i valori delle proprietà per l'utente non verranno archiviati in una tabella, saranno semplicemente forniti come parte della richiesta dell'utente al mio server .
Sto facendo fatica a pensare a quale sarebbe il modo migliore per ottenere questo risultato. Al momento vedo due possibilità principali:
1. Costruisci un modello relazionale per le condizioni e crea lunghe query SQL basate sull'input dell'utente
Affinché un utente possa essere idoneo per un servizio, deve soddisfare almeno un Gruppo di condizioni. Affinché un utente soddisfi un Gruppo di condizioni, deve soddisfare tutte le Condizioni all'interno di quel gruppo.
Pro:
Funziona con un ERD ben definito e query SQL appropriate
Contro:
Devono generare query SQL molto complicate con più join, flessibilità ridotta per le condizioni di scrittura
2. Conserva le condizioni come una stringa. Costruisci un parser delle condizioni e passa attraverso tutti i servizi testando la loro condizione contro l'input dell'utente.
Pro
Condizioni flessibili e più facili da scrivere, più facili da sviluppare
Contro
Le query devono essere eseguite in livello applicazione anziché in livello database, possibilmente con prestazioni non buone
Mi chiedo se qualcuno abbia affrontato un problema simile in passato e come lo abbiano risolto. Forse c'è un'opzione che non sto considerando? Sono aperto a utilizzare una soluzione NoSQL se è più adatta al problema, ma la mia preferenza è quella di farlo su un database SQL se pratico.