aktive Nutzer sollten Website-Registrierungen in einer separaten Tabelle gespeichert werden?

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

  •  22-08-2019
  •  | 
  •  

Frage

Ich frage mich, über die besten Praktiken für die Benutzerregistrierung. Ich bin Neigung Website-Registrierungen in einer separaten Anmeldung Tabelle zu speichern und dann, sobald die Registrierung wird von E-Mail-Übertragung der Daten an die Benutzer-Tabelle bestätigt.

Der Vorteil wäre, dass die Benutzer-Tabelle liest nicht mit nie aktiviert Registrierungen laden. Ein weiterer Vorteil ist, dass das E-Mail (Benutzername) Feld kann in der Benutzer-Tabelle einzigartig bleiben, aber wenn Sie mit einer E-Mail-Adresse registrieren versuchen, die Sie nicht besitzen, der Besitzer der E-Mail-Adresse wird noch in der Lage sein, mit ihm als dem registrieren E-Mail-Feld in der Tabelle Registrierungen nicht eindeutig sein wird.

Ich frage mich, ob dies eine gängige Praxis ist, oder wenn es ein Grund, dies ist nicht eine gute Idee?

War es hilfreich?

Lösung

aktiviert ist oder nicht

Es gibt keinen wirklichen Bedarf einen Benutzer in einer anderen Tabelle zu speichern. Speichern Sie einfach alle Benutzer in einer Tabelle mit einem boolean Flag, das anzeigt, ob ihre aktiviert ist oder nicht. Jeder so oft einen Cron-Job ausführen zu überprüfen und sehen, ob es Konten sind, die x Tage alt und nicht aktiviert sind und löschen.

E-Mail

So vermutlich sind Aktivieren Sie den Benutzer aus der E-Mail nicht wahr? Sie wollen es auch so einrichten, dass, wenn ein anderer Benutzer jemand anderes E-Mail eingetragen, die andere Person noch korrekt registrieren konnten? Das ist eigentlich ziemlich einfach zu tun. In dieser E-Mail, die sie fälschlicherweise gesendet, haben nur einen Link, dass die E-Mail aus der Datenbank zu entfernen, weil offensichtlich ist es nicht sie, und sie werden nie das Konto aktivieren gehen.

Was aber, wenn der andere Typ löscht sie nur?

Dann, wenn sie ihnen zu registrieren, sagen Sie bereits haben ihre E-Mail und bieten wieder die Aktivierung zu senden, diese E-Mail hat auch die Möglichkeit, sie aus der Datenbank zu entfernen.

oder

Entfernen Sie einfach das ältere Konto aus der Datenbank. Versteht sich von selbst, wenn die Person versucht, ein neues Konto zu aktivieren, und es gibt eine alte, die Sie nie aktiviert wird, kann es nur entfernen.

Andere Tipps

Ich denke, dass über Engineering wäre.

alle von ihnen in einer Tabelle speichern und eine SQL-Abfrage (Alltags-) planen nicht actived Konten zu löschen, die älter als 30 Tage.

Tun Sie sich selbst einen Gefallen und halten sie einen einzigen Tisch. Sie sind einfach nicht genug abgebrochene Anmeldungen gehen zu müssen, für Performance-Probleme ins Spiel kommen (vor allem, wenn man sie nach 3 Wochen wischen).

Ihre Rechtfertigung über die E-Mail-Adressen ist albern. Niemand ist wahrscheinlich, ihre E-Mail durch eine falsche Registrierung blockiert werden.

Es kann einen Fall geben, in denen Sie logisch die beiden Tabellen aufgeteilt würden: Wenn der Registrierungsprozess viele obligatorischen Benutzerinformationen fragt erst, nachdem Sie die E-Mail-Adresse bestätigt haben. Zum Beispiel, wenn Ihre ausstehende Registrierungstabelle mit nur wenigen Spalten winden würde, wie E-Mail und Aktivierungsschlüssel, während Ihrer Benutzer-Tabelle viele zusätzliche Spalten, wie Benutzername, Vorname, Nachname, Postanschrift usw. hat

Die Spaltung könnte Sinn in diesem Fall machen, wie Sie in der Lage sein würden, um diese Spalten NOT NULL zu erklären.

Other than that, aber ich habe mit den meisten anderen Antworten zu einigen; es klingt wie vorzeitige Optimierung zu mir. Mehrere Tabellen mit der gleichen Struktur ist ein starkes Warnzeichen, dass ur es falsch doin. nicht definitiv, aber eine starke Warnung.

ich mit dieser Praxis für Separation of Concerns Gründe einig: Eine „Registrierung“ und „Benutzerkonten“ sind zwei separate Konzepte

.

Die Registrierungstabelle würde verwendet werden, um den Status der „Registrierung“ zu bestehen. Sobald dieser Vorgang abgeschlossen ist (wenn die E-Mail bestätigt wird), wäre der Prozess des „Output“ ein neues „Benutzerkonto“. Wenn der Vorgang fehlschlägt (zB es „Timeouts“, nachdem der Benutzer seine E-Mail für 1 Monat nicht bestätigt), gibt es keine Auswirkungen auf die „Benutzerkonto“ -Konzept.

Wie in einer anderen Antwort gesagt wurde, kann dies in einigen Fällen über Engineering sein, aber es kann auch ein sinnvoller Weg seiner Komplexität dieser zwei getrennten Konzepte enapsulate. Es kann auch als Widerspruch zu Normalisierung Prinzipien gesehen werden, aber dann glaube ich Ihnen einen Kompromiss zwischen Verkapselung wählen und Normalisierung auf Ihrem Kontext abhängig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top