phpbar.de logo

Mailinglisten-Archive

AW: [php] mysql_insert_id

AW: [php] mysql_insert_id

Alexander Meurer php_(at)_phpcenter.de
Mon, 14 Oct 2002 18:16:10 +0200


Hallo Mike,

> Tatsachen? hmm stimmt habe schon viele so Tabellen gesehen:
>
> id autoincrement
> benutzername unique
> ...
>
>
> wenn ich in einer Tabelle eine Spalte habe die UNIQUE sein muss, dann ist
es
> unnötig den Platz zu verschwenden und noch zusätzlich eine autoincrement
> Spalte anzulegen, das führt nur zu einer Verwässerung der Datenbankstruktur
> => unnötiger Platzverbrauch, Fehlerquelle.

das sehe ich etwas anders.
Ich hatte zum Beispiel mal die Aufgabe, ein Buchungssystem für
Konferenzräume zu schreiben. Natürlich bekommt man von den Auftraggebern
die Information, daß alle Räume eine eindeutige Raumnummer haben.

Es gibt jedoch zwei entscheidende Gründe, warum man in diesem Fall die
Raumnummer nicht als Schlüssel verwenden sollte.

1. die Raumnummer ist ein Stringfeld. Der Vergleich zweier Strings
dauert wesentlich länger als der zweier Integerzahlen.
2. die Raumnummer ist zwar eindeutig, aber nicht stabil. Man ist nicht
gefeit vor Managern, welche einen neuen Algorithmus zur Vergabe von
Raumnummern einzuführen (auch wenn die meisten Manager nicht wissen, was
ein Algorithmus ist).

> (ja, ich weiss dass es genau in diesem Fall da es um Benutzerdaten geht mal
> aus Sicherheitsgründen ratsam sein mag im Verlauf der Seiten nur noch eine
> kryptische ID und nicht mehr den Benutzernamen weiterzureichen, es geht mir
> hier aber nur darum dass es eben nicht die hohe Kunst der
> Datenbankerstellung ist _jede_ Tabelle mit einer Autoincrementspalte zu
> versehen sondern eben zu überlegen ob sie es wirklich braucht)

Wie Du siehst, macht es grundsätzlich Sinn, Userdaten (Raumnummer) von
Systemdaten (ID-Spalte) zu trennen. Das hat primär nichts mit Sicherheit
zu tun, sondern damit, (wo wir gerade bei Fehlerquellen sind) daß man
alle Schlüsselwerte in allen abhängigen Tabellen ändern muß, wenn der
User den Hauptschlüssel ändert.
Ich mache mir niemals Gedanken, ob ich die Spalte brauche oder nicht,
denn ich brauche sie fast immer und sie gehört quasi zu meinem Paradigma
der DB-Erstellung.

Ciao
   Alex


php::bar PHP Wiki   -   Listenarchive