2010-12-11 7 views
7

Sto scrivendo la mia prima app Web e conosco abbastanza bene i database per sapere che lo schema è importante ma non abbastanza da sapere come scrivere effettivamente uno buono.Si dovrebbe creare una nuova tabella per ogni utente su un'app Web?

Esiste un protocollo standard per la gestione delle informazioni memorizzate in ciascun account utente? Il mio istinto è di avere una tabella che memorizza la chiave dell'utente e le informazioni di accesso e un handle per la loro tabella (probabilmente la chiave?), E quindi avere una tabella per ogni utente.

Ma mi chiedo se ci sono problemi di prestazioni intorno al tavolo per ogni utente o se questo sembra un modo incredibilmente stupido per farlo. Sembra che dovrebbe essere un "problema risolto" poiché praticamente tutte le app web hanno account utente, ma non sono stato in grado di trovare nulla tramite la ricerca. Ci sono risorse con schemi "risolti" per archiviare vari tipi di dati web?

+0

Conosco questo tipo un po 'vecchio ma stavo pensando allo stesso modo per motivi di sicurezza. ad esempio per evitare che altri utenti raggiungano altri tavoli tranne il loro. –

+0

@SalemF Quindi sì, ci sono potenziali problemi di sicurezza in questo modo, ma ci sono anche problemi di sicurezza BIGGER con tabelle separate. In poche parole, non vuoi che la tua app Web crei tabelle al volo. Si desidera solo aggiungere o rimuovere dati nella tabella. Aggiungere e creare tabelle è un livello di autorizzazioni superiore rispetto all'aggiunta e all'eliminazione di righe. E non vuoi che la tua app Web abbia le autorizzazioni per creare o eliminare tabelle. Questo è il modo in cui si finisce per avere l'intero database cancellato o copiato da un hacker. Ci sono altri motivi, ma questa è la ragione della sicurezza. – araneae

+0

@aranesa hai ragione è sul livello di autorizzazione, avvizzire modo se gli utenti possono accedere ad altri raw è possibile accedere ad altre tabelle. ma l'idea era di mantenere gli utenti sul proprio tavolo solo e non fornire alcuna autorizzazione per eliminare o creare nuove tabelle.Entrambe le modalità con cui l'hacker guadagna il controllo su DB, farà ciò che vuole. –

risposta

11

Generalmente non si crea una tabella separata per ciascun utente: questa soluzione non viene adattata in modo corretto.

Invece di solito si inseriscono i dati di tutti gli utenti in una singola tabella (o una tabella per tipo di dati) e si utilizzano le condizioni nella clausola WHERE per garantire che un utente possa solo leggere/scrivere i propri dati.

0

Sì, sicuramente non è una buona idea. Quello che dovresti fare è familiarizzare con qualche framework di applicazioni web perché la maggior parte/tutti lo forniscono già per te. Una buona scelta è ad esempio Django.

+0

Questo tipo di apprendimento ne consegue ..... Sono qui perché non posso usare Django per il server della mia applicazione scritto interamente in mysql e python e ha bisogno di capire i buoni modi per progettare un database. – nsij22

4

A meno che la tua app non sia qualcosa di estremamente personalizzato, ti consigliamo di scegliere una struttura di app web con cui lavorare. Per le cose semplici, le strutture più comuni funzionano quasi altrettanto bene (anche se c'è qualche rabbioso disaccordo su ciò). Immagino che tu abbia un linguaggio di programmazione in cui ti senti più forte, quindi ti suggerirei di lasciare che fosse la tua guida principale per un framework web. Alcuni quadri comuni per lingua sono (questo non è nemmeno un vicino a un elenco esaustivo):

Per quanto riguarda la tua domanda sullo schema, potresti voler esaminare database normalization. La maggior parte dei framework avrà già strumenti per gestire la creazione e l'autenticazione degli utenti, ma in generale non si vorrà mai creare una tabella per utente. Un approccio più comune è quello di avere una tabella chiamata utenti, che ha un valore di id come chiave primaria e che viene quindi utilizzata come chiave esterna che fa riferimento ad altri dati.

Problemi correlati