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



## pxlArtizzt (20. August 2004)

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?!


----------



## XChris (20. August 2004)

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


----------



## pxlArtizzt (20. August 2004)

> _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?


----------



## melmager (20. August 2004)

Natürlich ist ein PK Feld keine Pflicht 

Evenuell solltes du dann ein andres Feld als Index setzen


----------



## XChris (20. August 2004)

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


----------



## pxlArtizzt (20. August 2004)

Genau sowas hab ich mir gedacht, gut... Naja, ich werd dann weiterhin keine Tabelle ohne PK erstellen


----------



## Gorcky (20. August 2004)

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.


----------



## pxlArtizzt (20. August 2004)

> _Original geschrieben von Gorcky _
> *Also wäre die IP mit der Zeitangabe zusammen UNIQUE...*



Cool, sowas geht auch? Wie könnte ich das denn realisieren (z.B. mittels phpmyadmin)?


----------

