Seite 1 von 1
ID´s
Verfasst: 28.11.2003 18:14
von Heinrich senior
Hallo Leute!
Hoffentlich hab ich jetzt das richtige Forum ausgewählt.
Wie verhält sich das eigentlich mit den Postings?
Jedes Posting bekommt doch eine eigene ID, die mit in der Datenbank gespeichert wird.
Wenn ich jetzt ein Posting lösche, würde ja die ID frei werden.
phpBB2 zählt aber weiter und
Also z.B. in der Tabelle phpBB2_posts_text:
1. Posting - angezeigt wird die ID 1 und der Text
2. Posting - angezeigt wird die ID 2 und der Text
3. Posting - angezeigt wird die ID 3 und der Text
4. Posting - angezeigt wird die ID 4 und der Text
Jetzt lösche ich das 2. Posting und füge ein weiteres dazu:
1. Posting - angezeigt wird die ID 1 und der Text
3. Posting - angezeigt wird die ID 3 und der Text
4. Posting - angezeigt wird die ID 4 und der Text
5. Posting - angezeigt wird die ID 5 und der Text
Genauso ist es bei den Usern, was passiert dann mit
den freiwerdenden ID-Plätzen?
Auch kommt es in der Datenbank vor, das es so aussieht
z.B. tabelle phpBB2_users:
31. User und die Daten
41. User und die Daten
1. User und die Daten
2. User und die Daten
3. User und die Daten
4. User und die Daten
Gibts da ne`Erklärung für?
MfG
Heinrich senior
Verfasst: 28.11.2003 21:02
von D@ve
So wie Du es beschrieben hast funktioniert das nicht. Die IDs werden per MySQL über autoincrement erzeugt. Egal ob gellöscht wird oder neue Einträge hinzukommen, es wird immer einfach hochgezählt.
Bei einer Löschung bleiben halt Lücken in den IDs
Die Sortierung der Daten bei SQL erfolgt in der Regek meistens in der Reihenfolge wie sie aufgenommen wurden, von daher nicht immer nach einem bestimmten Feld...
Gruß, Dave
Verfasst: 29.11.2003 23:32
von Eisbär
Hallo!
Kann man eigentlich so einfach, wenn sich ein neuer User registriert und
noch keinen Beitrag geschrieben hat, seine vorgegebene ID
gegen eine freigewordene ID ändern?
Verfasst: 30.11.2003 00:07
von PhilippK
Vielleicht nochmals zur allgemeinen Erklärung:
Bei den IDs handelt es sich um sog. eindeutige Schlüssel (auch: Primärschlüssel), die einen Datensatz eindeutig identifizieren. Eine ID darf daher in einer Tabelle nur einmal existieren.
Zur Festlegung dieser ID kann man bei MySQL die Option 'auto increment' aktivieren. Ist diese Option aktiviert, so wird automatisch ein Wert für den Primärschlüssel festgelegt - und zwar in aufsteigender Reihenfolge. Wird ein Datensatz gelöscht, so wird der interne Zähler nicht zurückgesetzt - und so der alte Wert nicht erneut verwendet. Ziel dieses Verhaltens ist es, Inkonsistenzen zu vermeiden.
Unabhängig davon ist die Reihenfolge, in der MySQL die Datensätze speichert. Löscht du einen Datensatz, so wird der Soeicher nicht komplett freigegeben sondern es bleibt eine 'Lücke' zurück. Wird anschließend ein neuer Datensatz erstellt, so kann er die Lücke wieder füllen - die Datensätze sind dann nicht mehr chronologisch abgelegt.
Das mal als kurze Einführung...
Gruß, Philipp
Verfasst: 30.11.2003 00:08
von PhilippK
Eisbär hat geschrieben:Kann man eigentlich so einfach, wenn sich ein neuer User registriert und
noch keinen Beitrag geschrieben hat, seine vorgegebene ID
gegen eine freigewordene ID ändern?
Kurze Antwort: nein
Es gibt nämlich schon zu diesem Zeitpunkt Beziehungen, die durch die Änderung gelöscht werden.
Gruß, Philipp
Verfasst: 30.11.2003 15:35
von Eisbär
Hallo PhilippK,
vielen Dank für diese ausführliche Antwort!!!
Also geht es bei einem neuangemeldeten User auch nicht.
Wieviele ID´s kann das Board verarbeiten?
Verfasst: 30.11.2003 17:06
von Jensemann
Das Board selbst hat kein Limit (na ja, kein relevantes). Das Limit das zählt ist das was die Datenbank an max Größe für den verwendeten Feld typ reserviert.
Das verrät dir die Doku deiner Datenbank, möglicherweise ist dies auch systemsabhängig. Aber ich denke nicht das es für dich wichtig ist dies herauszufinden, mir wäre keine installation bekannt an der man ans Limit gestoßen ist.
Verfasst: 30.11.2003 18:08
von D@ve
Eisbär hat geschrieben:Hallo PhilippK,
vielen Dank für diese ausführliche Antwort!!!
Also geht es bei einem neuangemeldeten User auch nicht.
Wieviele ID´s kann das Board verarbeiten?
Mach Dir mal keine Sorgen, die sind alle als Longint augelegt. Ich hab die Zahlen gerade nicht im Kopf aber Gedanken musst Du Dir erst machen, wenn Du zehnstellige IDs hast.
@Phillip
Ich bin mir eigentlich fast 100% sicher dass die Lücken nicht wieder gefüllt werden zumindestens nicht bei SQL und MySQL.
Gruß, Dave
Verfasst: 30.11.2003 18:29
von Jensemann
Diese wieder zu füllen wäre sinnlos und falsch.
Im falle mysql wird auto increment verwendet, increment also immer + 1, füllen liese sich hiermit nicht vereinbaren.
Bei DBs die kein auto increment verwenden wird die max-id gesucht und inkrementiert, hier lücken zu füllen wäre unnötiger code.
Ausserdem erachte ich das lücken füllen als problematisch, da evtl. nicht-phpbb apps auf einer id noch was zuordnen was so nicht mehr existiert bzw. auf was anderes zeigt.
Evtl. passend zu dieser id geschichte: ich konnte kürzlich einen Server untersuchen nach einem Einbruch, Ursache der sicherheitslücke war das füllen von ID lücken, ein User hatte zugriff auf Dateien dessen owner id mal gelöscht wurde, die Dateien zeigten aber noch auf diese, durch neuanlegen dieser ID gehörten die Daten einem anderen User.
Bezieh das mal auf phpBB. Das ID Lücken füllen schafft mehr Probleme als es löst.
Verfasst: 30.11.2003 19:16
von PhilippK
D@ve,
D@ve hat geschrieben:@Phillip
Ich bin mir eigentlich fast 100% sicher dass die Lücken nicht wieder gefüllt werden zumindestens nicht bei SQL und MySQL.
Wüsste nicht, dass ich so was behauptet hätte...
Gruß, Philipp