Cheatah: Datenbank Architektur Frage

Beitrag lesen

Hi,

Ich hab noch einen Frage zur User-ID. Kann ich die einfach mit auto_increment erstellen, oder ist es nicht gut, wenn der erste User dann die ID 1 hat?

der Wert einer ID ist grundsätzlich beliebig. Er muss ausschließlich eine Aufgabe erfüllen: eindeutig zu sein. Ob nun eine 1 drin steht, eine 42, ein "a" oder ein komplexes Objekt, ist ebenso irrelevant wie die Reihenfolge, die die Werte ergeben. Die Markierung einer Spalte als auto_increment ist genau das Mittel, das MySQL vorsieht, um die Eindeutigkeit zu gewährleisten.

Oder man könnte mit einer hohen Zahl anfangen und dann rückwärts zählen, um mögliche Angreifer zu verwirren. ;-)

Ich glaube nicht einmal, dass ein Angreifer das bemerken würde :-)

Was ich übrigens bei auto_increment nie verstanden habe ist, daß die Zahlen ja immer weiter laufen. Und wenn sich zwischendrin ein User abmeldet, dann entsteht ja eine Lücke die nie mehr gefüllt wird.

Ja. Das ist bedeutungslos.

Wenn sich also dauernd User an- und abmelden wird die ID-Zahl immer höher, und erreicht vielleicht irgendwann ein Limit?

Ja, diese Gefahr besteht.

Andererseits ist int unsigned ja doch ganz schön groß. :-)

In der Tat. Dieser User hätte ziemlich viel zu tun ;-)

Aber das führt doch auch gleichzeitig dazu, daß ich andauernd nachschauen muß wie der User heißt, der zu der ID gehört, wenn ich das richtig verstehe.
Nur wenn Du den Namen brauchst. SQL bietet dazu verschiedene Methoden an.
Was meinst Du mit verschiedene Methoden?
Ich dachte eigentlich an sowas wie:
SELECT username FROM user_table WHERE id='1';

Wenn Du präzise nur diese Information suchst, ist das richtig. Ich dachte allerdings eher an Joins und Subselects.

Ist das falsch??? :-(

Falsch ist, wenn es auch nicht unbedingt eine Fehlermeldung verursacht, einen Zahlenwert mittels Quotes künstlich in einen String umzuwandeln. Aber sonst ...

Und auf id kommt ein index beim erstellen.
Ungefähr so: index(id)

Es ist sogar ein Unique Index. Dieser wird automatisch angelegt, wenn eine Spalte als Primary Key markiert ist.

Oder wäre es besser wenn nur die ersten 5 Ziffern von id einen Index haben.

Das wäre ziemlich viel Aufwand, nur um das vermutlich effizienteste System der Datenbank ineffizient zu machen :-)

Ich weiß nicht, ob das bei int geht. Ich meine so wie bei Usernamen (wo ich's ja ab jetzt nicht mehr brauche :-) ):
un varchar(20), index(un(10))

Auch beim Username solltest Du einen Unique Index verwenden (jedoch nicht als Primary Key). Sinnvollerweise geht dieser über den gesamten Bereich, der unique sein soll - also über den kompletten Namen.

Da fällt mir gleich noch was ein. Bei mir heißen die einzelnen Spalten
anstatt "username" zb: "un"
oder anstatt "zeit_des_login" zb: "z"

Nicht gut.

Ist das zuviel Platz gespart,

Nicht, wenn Du MySQL auf einem C-64 installiert hast. Ansonsten nenne die Spalte im Zweifel ruhig "genaue_uhrzeit_zu_der_sich_der_verdammte_user_mal_wieder_eingeloggt_hat".

Oder hab ich endlich mal was richtig gemacht?? *Daumen drück*

Dein Daumendrücken hat gewirkt: Es war _nicht_ richtig. Je mehr Fehler frühzeitig entdeckt werden, umso besser für Dich :-)

Hoffentlich hast Du Recht!

Ich kann mich nicht irren. [dsf 4.14]

Cheatah ;-)

--
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes