foreign keys in mysql

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

foreign keys in mysql
hi, ich sitz grad ultra aufm schlauch und wollte mal fragen ob jmd sich mit foreign keys in mysql auskennt.
beim englischen mysql manual hab ich folgedes gefunden bzw. rausgeschmökert

CREATE TABLE parent (id INT NOT NULL,
                    PRIMARY KEY (id)
) TYPE=INNODB;

CREATE TABLE child (id INT, parent_id INT,
                   INDEX par_ind (parent_id),
                   FOREIGN KEY (parent_id) REFERENCES parent(id)
                     ON DELETE CASCADE
) TYPE=INNODB;

eigentlich ist der ganze code klar, nur versteh ich die bedeutung folgender zeile nicht so ganz:

 INDEX par_ind (parent_id) 

hab zwar auch nich soviel ahnung, aber ich würde sagen, das legt einen index auf parent_id an, mit dem namen par_ind.


Hallo,

INDEX ist ein Synonym für KEY. Damit kannst du einen oder mehrere Spalten der Tabelle indizieren bzw. als Schlüssel verwenden. Schlüssel haben z.B. die Eigenschaft, dass sie UNIQUE sind, also kein Schlüssel doppelt vorkommen kann. So ein KEY kann enorm beim Zugriff auf die Tabelle helfen, wenn z.B. der Key darüber entscheiden kann, welche Reihen überhaupt in Frage kommen, muss nicht der Datensatz komplett durchsucht/gelesen werden, sondern nur der Key (zumindest der PRIMARY KEY wird z.B. bei MyISAM-Tabellen komplett in einer eigenen Datei gespeichert).

Du musst einen KEY nicht benennen. Meistens hat man nur eine Spalte im KEY, dann heißt er einfach so wie die Spalte. Man kann aber eben auch einen KEY über mehrere Spalten bilden (wenn nie die gleiche Kombination der einzelnen Werte doppelt auftritt).

Wann sich so ein KEY/INDEX anbietet und wann nicht, muss man sich gut überlegen. Auf jeden Fall sollte jede Tabelle einen sinnvollen PRIMARY KEY haben, meistenst ist das dann ein Surrogatschlüssel.

cu
Ford Prefect


problem gelöst … vergisst den post wieder …

@yves: kann mans irgendwie einrichten das der post in den ersten 15 - 30 mins wieder zurückgezogen werden kann?


[ot]
Ich könnte es Benutzern erlauben, eigene Beiträge zu löschen, das dürfte man dann aber auch, wenn es bereits Antworten gibt. Irgendwie mag ich es nicht, wenn man Dinge löscht, die andere bereits kennen und evtl. sogar verwenden.
[/ot]