MySQL - Muss jede Tabelle eine Spalte 'id' haben?

pxlArtizzt

Erfahrenes Mitglied
Hallo,

ich wollte mal wissen, ob eigentlich jede Tabelle eine Spalte 'id' haben muss (primary key, auto_increment)... Da ich momentan eine Tabelle erstelle, in welcher ich keine einzelnen Zeilen rausfiltern muss, sondern nur nach gewissen Kategorien suche, womit der Schlüssel id eigentlich total überflüssig wäre.

Gehört sowas zum guten 'SQL-Stil' oder kann man sowas getrost weglassen?!
 
Hallo!

Also grundsätzlich sollte JEDE Tabelle eine ID haben. Möglichst immer einen unnatürlichen Schüßel - will heisen einen automatisch generierten Wert der wirklich nur EINMAL vorkommt.

Aber Du kannst auch OHNE PK und Autoindex arbeiten ....

Ich bin sehr sicher, dass Du Dich wenig mit Relationen beschäftigt hast . PK, Indexe und Normalisierung nützen natürlich etwas, wenn man sie anzuwenden weiß.

Chris
 
Original geschrieben von XChris

Ich bin sehr sicher, dass Du Dich wenig mit Relationen beschäftigt hast . PK, Indexe und Normalisierung nützen natürlich etwas, wenn man sie anzuwenden weiß.

Chris


Wie genau meinst du das? Ich habe bisher immer eine Spalte mit PK drin. Hab das auch immer als wichtig angenommen, nur sehe ich nicht bei jeder Tabelle den Sinn darin. Z.B. eine Tabelle in der man IPs speichert (für einen Who's online-Counter) und da wird doch nur geprüft, ob eine IP in der Tabelle enthalten ist.

Der Gedanke dahinter ist, MySQL etwas zu entlasten und Speicherplatz zu sparen.

Ich gehe mal davon aus, dass ein PK-Feld nicht Pflicht ist. Du hast gesagt, jede Tabelle sollte sie haben, aber wenn ich sie tatsächlich nicht brauche, sind sie doch eigentlich überflüssig, oder?
 
PK dienen zur genauen Identifikation eines Tupels. Du solltest also versuchen so weit als möglich über den PK immer zu gehen. Wenn Du nur EINE Tabelle hast, spielen PK in der Regel keine Rolle und sind überflüßig.

Bei mehrern Tabellen die zueinander eine Relation haben (z.B. Tabelle X mit IP Adressen und Uhrzeit sowie Tabelle Y mit URL usw.) kann man über einen Verweis dann sehr schnell auf Werte zugreifen.

Oder kurz: PK nutzen Dir nur etwas, wenn Du Beziehungen zwischen verschiedenen (oder der selben Tabelle) herstellen mußt.

Chris
 
Wenn Du in einer Tabelle nur IPs speichern willst - also in der Tabelle auch nur eine Spalte mit den IPs hast - ist es meienes Erachtens reichlich sinnlos, wenn Du mehrere Einträge mit derselben IP hast.
Also könntest Du diese Spalte schon mal UNIQUE machen; soll heißen, jede IP darf nur einmal vorkommen.
Dadurch, dass jede IP eindeutig ist, kannst Du sie aber auch gleich wieder als Schlüssel setzen... :)

Wenn wir das Beispiel jetzt mal spasseshalber um eine Zeitangabe erweitern würden, wann eine bestimmte IP online war, dann ist es ja durchaus sinnvoll, dass eine IP öfters vorkommt - aber nicht, dass eine IP zu ein- und derselben Zeit zwei mal online ist. Also wäre die IP mit der Zeitangabe zusammen UNIQUE...

Du siehst, Schlüssel wachsen überall :-)

...aber Grundtenor wie bei den anderen: Du musst nicht, wenn Du nicht willst.
 
Zurück