tutorials.de Buch-Aktion 05/2012
Like Tree6Danke
  • 1 Beitrag von Nico Graichen
  • 1 Beitrag von Nico Graichen
  • 1 Beitrag von Nico Graichen
  • 1 Beitrag von Steiner_B
  • 1 Beitrag von Nico Graichen
  • 1 Beitrag von Nico Graichen
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
333
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Hallo

    Ich bin seit gestern am überlegen für das richtige Datenbank Design. Ich habe ein Registrierung mit anschließender Aktivierung durch ein Code der per Mail versandt wird.

    Meine erste Idee war zwei getrennte Tabellen, einmal User und einmal Registration. Nach der Aktivierung wird ein Teil des Inhalts der Registration Tabelle in die User Tabelle übertragen. Den Vorteil seh ich hier das ich einfach über die Registration Tabelle gehe und alle Einträge älter als 24h rausschmeiße falls nicht aktiviert!

    Alternative wäre eine Spalte in der User Tabelle 'acitve', die entweder true oder false ist. In einer weiteren Tabelle müsste ich zusammen mit der UserID den Aktivierungscode und das Erstellunsdatum speichern. Hier wäre es ein wenig aufwendiger die abgelaufenen User raus zu schmeißen da ich über zwei Tabellen operieren muss.

    Was haltet ihr für sinnvoller, oder gibts noch eine weiter alternative/verbesserungen?
     
    Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)

    watch my blog @ websocialist.blogspot.com

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Und wieso nicht alles in einer Tabelle?
    Du hast keinerlei Vorteile, die Infos auszulagern. Zum einen gehören sie zum User, zum anderen beeinflusst es die Laufzeit beim Speichern und Löschen negativ
    zer0 bedankt sich. 
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Weil ich ja spezielle Metadaten habe die ich am nach der Aktivierung nicht mehr brauche. Zum Beispiel der Aktivierungscode.
     
    Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)

    watch my blog @ websocialist.blogspot.com

  4. #4
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Das erklärt aber nicht, warum du den Laufzeitverlust (und zusätzlichen Speicherbedarf) in Kauf nehmen willst.
    Für eine Abfrage der Userdaten kannst du die Spalten ja weglassen
    zer0 bedankt sich. 
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  5. #5
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Ja natürlich kann ich die Spalten bei der Abfrage weglassen. Aber wenn ich für jeden User ein Aktivierungcode (z.B. 32 Zeichen MD5 Hash) speicher, obwohl dieser nicht benötigt wird da der User sein Account aktiviert hat, dann verschwende ich ja schon Speicher!

    Ich brauche also eine Möglichkeit den Aktivierungscode separat zu speichern, sodass er nach der Aktivierung wegfallen kann. Und ich muss natürlich in der User Tabelle kennzeichnen ob der User bereits aktiv ist.
     
    Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)

    watch my blog @ websocialist.blogspot.com

  6. #6
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Die Möglichkeit brauchst du nicht zwingend. Du brauchst den Aktivierungscode nicht mal in der DB sondern du brauchst ihn genau zweimal: Beim Versenden und beim anschließenden Vergleichen. Davor, dazwischen und danach brauchst du den Code nicht und musst ihn somit auch nicht persistieren
    zer0 bedankt sich. 
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  7. #7
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Ich kann dir leider nicht ganz folgen. Das ich ihn nach der Aktivierung nicht mehr brauche ist mir klar. Aber irgendwo muss er abgelegt werden solange bis der User sein Account per Mail aktiviert. Ich will vllt auch die Möglichkeit bieten das man sein Account sofort benutzen kann, noch bevor man ihn Aktiviert hat über die Mail.
     
    Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)

    watch my blog @ websocialist.blogspot.com

  8. #8
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hallo,

    Aus reiner Datenmodellierungssicht wäre es am günstigsten die letzte von dir erwähnte Variante zu wählen, wobei du sogar darauf verzichten kannst eine active Spalte zu führen. Die Information ob ein User aktiviert ist oder nicht ergibt sich dann einfach daraus, dass aktivierte User keine Zeile in der zweiten Tabelle haben.

    Von der Variante mit nur einer Tabelle würde ich stark abraten, eben aus dem von dir schon oben genannten Grund des Speicherverbrauchs. Und im Normalfall wirst du ein große Menge an aktivierten Nutzern haben, und nur sehr wenige die noch aktiviert werden müssen --> viel unnötiger Speicherverbrauch.
    zer0 bedankt sich. 

  9. #9
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Hallo

    Von der ersten Variante werde ich jetzt auch absehen!

    Bei der zweiten von mir genannten Variante müsste ich bei jedem Login natürlich auch prüfen ob der User in der Aktivierungstabelle vorhanden ist. Deswegen dachte ich an eine Spalte 'active'.

    Mir kam jetzt auch eine dritte Idee:
    Nur eine Tabelle User mit der Spalte 'active'. Falls diese auf 'false' steht hat der User sein account nocht nicht aktiviert. Der Aktivierungscode ist der Hash aus seiner ID, Username und Passwort, gegebenfalls auch noch das Erstellungsdatum. Hier würde ich eine ganze Tabelle sparen.

    Was meint ihr dazu? Bin auch offen für weitere Vorschläge
     
    Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)

    watch my blog @ websocialist.blogspot.com

  10. #10
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von zer0 Beitrag anzeigen
    Ich kann dir leider nicht ganz folgen. Das ich ihn nach der Aktivierung nicht mehr brauche ist mir klar. Aber irgendwo muss er abgelegt werden solange bis der User sein Account per Mail aktiviert. Ich will vllt auch die Möglichkeit bieten das man sein Account sofort benutzen kann, noch bevor man ihn Aktiviert hat über die Mail.
    Hi

    Du kannst denn Schlüssel doch bei Bedarf erzeugen. Dieser wird doch sicherlich anhand der Userdaten generiert.
    Demzufolge kannst du in bei der Aktivierung durch den User generieren. Der User sendet den Aktivierungscode, du generierst den Code auf dem Server und vergleichst beide

    Der Nachteil der Prüfung des Vorhandenseins von Datensätzen in der zweiten Tabelle ist neben Laufzeitverlust beim Speichern und Löschen auch noch ein Laufzeitverlust beim Lesen während des Logins
    zer0 bedankt sich. 
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  11. #11
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Zitat Zitat von Nico Graichen Beitrag anzeigen
    Hi

    Du kannst denn Schlüssel doch bei Bedarf erzeugen. Dieser wird doch sicherlich anhand der Userdaten generiert.
    Demzufolge kannst du in bei der Aktivierung durch den User generieren. Der User sendet den Aktivierungscode, du generierst den Code auf dem Server und vergleichst beide

    Der Nachteil der Prüfung des Vorhandenseins von Datensätzen in der zweiten Tabelle ist neben Laufzeitverlust beim Speichern und Löschen auch noch ein Laufzeitverlust beim Lesen während des Logins
    Hallo,

    jetzt hab ich es begriffen! Das enspricht ja dem, was mit gestern noch eingefallen ist:
    Mir kam jetzt auch eine dritte Idee:
    Nur eine Tabelle User mit der Spalte 'active'. Falls diese auf 'false' steht hat der User sein account nocht nicht aktiviert. Der Aktivierungscode ist der Hash aus seiner ID, Username und Passwort, gegebenfalls auch noch das Erstellungsdatum. Hier würde ich eine ganze Tabelle sparen.
    Ich muss nur trotzdem den Status merken, also aktiviert oder nicht. Aber diesen kleinen Overhead kann man ja in kauf nehmen.

    Liege ich nun vollkommen richtig?
     
    Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)

    watch my blog @ websocialist.blogspot.com

  12. #12
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Das ist das, was ich gemeint hab
    Nur eine Marker ob aktiviert oder nicht, der Rest muss nicht persistiert werden
    zer0 bedankt sich. 
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  13. #13
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Zitat Zitat von Nico Graichen Beitrag anzeigen
    Hi

    Das ist das, was ich gemeint hab
    Nur eine Marker ob aktiviert oder nicht, der Rest muss nicht persistiert werden
    Jetzt sind wir uns vollkommen einig

    Danke für eure Antworten!
     
    Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)

    watch my blog @ websocialist.blogspot.com

  14. #14
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von zer0 Beitrag anzeigen
    Jetzt sind wir uns vollkommen einig

    Danke für eure Antworten!
    Sehr schön und bitte schön

    Fall deine Frage damit beantwortet ist, markier den Thread doch bitte noch als Erledigt! Danke!
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

Ähnliche Themen

  1. [Datenbank-Design] Aufbau sicherer Kunden & logischer Datenbank
    Von Ken89 im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 22.03.11, 21:59
  2. Datenbank-Design
    Von roybehr im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 02.04.09, 19:31
  3. Antworten: 38
    Letzter Beitrag: 29.05.06, 23:47
  4. Antworten: 9
    Letzter Beitrag: 15.03.05, 20:09
  5. Datenbank Design
    Von boelkstoff im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 03.08.03, 14:51