Dovrebbe registrazioni essere memorizzati in una tabella separata per gli utenti attivi?

StackOverflow https://stackoverflow.com/questions/878141

  •  22-08-2019
  •  | 
  •  

Domanda

Mi chiedo e le migliori pratiche per la registrazione utente.Sto propendendo per memorizzare le registrazioni al sito in registrazioni separate tabella e poi una volta che la registrazione è stata confermata da trasferimento e-mail i dati per la tabella degli utenti.

Il vantaggio sarebbe che legge la tabella utenti non ingombra mai attivato le iscrizioni.Un altro vantaggio è che l'e-mail (nome utente) campo può rimanere unica nella tabella utenti, ma se si tenta di registrarsi con un indirizzo email che non è di tua proprietà, il proprietario di quell'indirizzo email sarà ancora in grado di registrare con essa, come il campo email non verrà unico le iscrizioni tabella.

Mi chiedo se questa è una pratica comune o se c'è qualche motivo questo non è una buona idea?

È stato utile?

Soluzione

Attivata o meno

Non c'è alcuna reale necessità di memorizzare un utente in una tabella diversa.L'archiviazione di tutti gli utenti in una tabella, con un flag booleano che indica se il loro attivata o meno.Ogni tanto, in esecuzione di un job di cron per controllare e vedere se ci sono conti che sono a x giorni e non si attiva e non li elimina.

Email

Quindi, presumibilmente, si stanno attivando l'utente per e-mail giusto?Anche voi volete impostarlo in modo che, se un altro utente è entrato qualcun altro e-mail che l'altra persona potrebbe ancora registrare, corretto?Che è in realtà piuttosto semplice.In quella e-mail che è stato erroneamente inviato a loro, basta avere un collegamento a rimuovere l'e-mail dal vostro database, perché ovviamente non è per loro e non hanno mai intenzione di attivare l'account.

Ma cosa succede se l'altro ragazzo appena lo elimina?

Quindi al momento della registrazione di dire loro che già hanno il loro indirizzo e-mail e offerta di inviare di nuovo l'attivazione, questo indirizzo e-mail avrà anche la possibilità di rimuovere dal database.

O

È sufficiente rimuovere il vecchio account dal database.Ovvio che se la persona che sta cercando di attivare un nuovo account e c'è un vecchio che non è mai attivato, si può semplicemente rimuovere.

Altri suggerimenti

Credo che sarebbe più di ingegneria.

Conservare tutti in un tavolo e pianificare una query SQL (tutti i giorni) per eliminare gli account non actived di età superiore ai 30 giorni.

Fatevi un favore e tenerlo una singola tabella. Tu non sei solo andando ad avere abbastanza registrazioni abortiti per problemi di prestazioni al entrano in gioco (soprattutto se li si cancella dopo 3 settimane).

Il tuo giustificazione circa gli indirizzi email è sciocco. Nessuno è probabile che per ottenere la loro posta elettronica bloccata da una registrazione falsa.

Ci può essere un caso in cui si sarebbe logicamente dividere le due tabelle: Se il processo di registrazione richiede un sacco di informazioni utente obbligatorio solo dopo aver confermato l'indirizzo di posta elettronica. Ad esempio, se la tabella di registrazione in attesa sarebbe finire con poche colonne, come ad esempio e-mail e la chiave di attivazione, mentre gli utenti tavolo ha molte colonne aggiuntive, come ad esempio il nome utente, nome, cognome, indirizzo postale, ecc

La scissione potrebbe avere senso in questo caso, come si sarebbe in grado di dichiarare quelle colonne NOT NULL.

Oltre a questo, però, sono d'accordo con la maggior parte delle altre risposte; suona come l'ottimizzazione prematura per me. tavoli multipli con la stessa struttura è un forte segnale di avvertimento che ur doin sbagliato. Non definitiva, ma un forte avvertimento.

Sono d'accordo con questa pratica per la separazione delle ragioni riguarda: Un "processo di registrazione" e "Account utente" sono due concetti distinti

.

La tabella di registrazione sarebbero stati utilizzati a persistere lo stato del "processo di registrazione". Una volta che il processo è completo (una volta che l'e-mail viene convalidato), "output" del processo sarebbe un nuovo "account utente". Se il processo non riesce (ad esempio, "timeout" dopo che l'utente non riesce a confermare la sua e-mail per 1 mese), non c'è alcun impatto sul concetto di "account utente".

Come è stato detto in un'altra risposta, questo può essere più di ingegneria, in alcuni casi, ma può anche essere un modo utile per enapsulate complessità di questi due concetti distinti. Si può anche essere visto come in contraddizione con i principi di normalizzazione, ma poi credo che si deve scegliere un compromesso tra l'incapsulamento e la normalizzazione a seconda del contesto.

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