le preferenze degli utenti che utilizzano SQL e JavaScript
-
14-10-2019 - |
Domanda
Sto usando JavaScript lato server - Sì, sono in realtà utilizzando Server Side JavaScript. Per complexify le cose ancora di più, io uso Oracle come database di backend (10g). Con un po 'pazzo e XSLT simile mutante HTML generazione, posso costruire davvero moduli web di fantasia - sì, sono consapevole di Rails e altri similmente quadri e ho scelto il percorso di orrore, invece. Non ho JQuery o altro quadro di fantasia a mia disposizione, solo pianura ol' JavaScript che dovrebbe essere supportato dal motore sottostante chiamato Mozilla Rhino. Sì, è folle e mi piace.
Quindi, ho un sacco di tavoli a mia disposizione e alcuni di loro sono pieni di chiavi associative che puntano a valori. Come io sono un pleaser persone, voglio aggiungere alcune soluzioni ingegnose dall'utente preferenze guidati.
I miei utenti hanno tutti un unico user_id e questo user_id è disponibile durante l'intera sessione.
La mia idea iniziale è quella di avere una tabella di preferenze dell'utente, dove ho "tre" colonne: user_id, funzionalità e pref_string. Utilizzando un delimitatore, ad esempio: oppure - (non hanno pensato ancora un tipo adatto), ho potuto avere memorizzare un mazzo di preferenze come lista e memorizzare gli elementi all'interno di un array utilizzando il metodo .split-(simile come il PHP funzione -explode). La colonna caratteristica potrebbe essere come il nome della tabella o qualche identificatore per la "caratteristica" Voglio Preferenze del collegamento troppo. Odio gli oggetti hardcoding, soprattutto perché voglio essere in grado di eseguire questi e riutilizzare questa funzionalità a livello di applicazione. Naturalmente mi piacerebbe idee migliori, basta tenere a mente non posso aggiungere una libreria così facilmente.
Queste preferenze potrebbe essere come "unito" al tavolo, in modo da poter interrogare e usare i suoi valori.
Spero che non sembra troppo complesso, perché bene .. il suo fondamentalmente qualcosa di veramente semplice che ho bisogno.
Grazie!
Modifica
Diciamo che voglio compilare una casella a discesa, che ha attualmente 10 valori dinamici. Vorrei ottenere questi dal database utilizzando una semplice dichiarazione prescelta:
SELECT pet, value FROM pets
Si restituirebbe una tabella come la seguente:
dog 1
cat 2
fish 3
vorrei entrare in questo all'interno di una casella a discesa. Tuttavia, se potessi piacerebbe avere preferenze aggiunte al quel tavolo, come user_id 100 vedrebbe solo mammiferi (cane, gatto) e ID_utente 200 vedrebbe solo le creature del mare (pesce). Ora immaginate che la tabella ha tutte le creature del mondo e ho un sacco di tavoli che richiederebbero tali preferenze.
Dato che posso avere un numero illimitato di utenti, avrei dovuto applicare una qualche forma di meta-dati. Soluzioni per fare questo, è quello che sto cercando.
Soluzione
Questo suona come non ha nulla a che fare con JavaScript sul lato server (che non che è una scelta folle) o la vostra mancanza di un quadro (che do che sia un po 'pazzo). Si tratta di database e la struttura della tabella al suo cuore.
Come classificare un elenco di valori da una tabella è a voi a seconda delle circostanze. Ad esempio, si può avere una tabella ANIMALI, che ha i dati, come si descrive. Quindi, si può avere un tavolo PET_ATTRIBUTE_LIST, che avrebbe dati che ANIMALI può possedere. Infine, si potrebbe avere un tavolo PET_ATTRIBUTE che collega questi due. In questo modo gli attributi (pesci, mammiferi, vertebrati, ecc) sono in una tabella, gli animali domestici (cani, gatti, beta, ecc) in un altro, e poi un insieme arbitrario di attributi possono essere collegati a un animale domestico.
Per la questione di utenti opzioni che sono importanti per loro vedendo solo, si avrebbe un tavolo USER_PET_ATTRIBUTE collega record tra gli utenti azienda tabella e il vostro tavolo PET_ATTRIBUTE_LIST.
Ci sono un sacco di molti-a-molti che utilizzano questo metodo, ma è probabilmente il più flessibile.
Altri suggerimenti
Penso che si dovrebbe riconsiderare il tuo punto di "non usare un quadro". Helma / Ringo è un framework javascript maturare e pronto per la produzione lato server sulla base di Rhino. Un livello di astrazione mappe oggetti JavaScript a un database relazionale (JDBC collegato), così come già fornisce metodi semplici per gli oggetti utente e preferenze.