Mehrspaltiger Primärschlüssel in MySQL 5
Ich versuche zu lernen, wie zu benutzen Sie die Tasten und um die Gewohnheit zu brechen unbedingt mit SERIAL
Typ-IDs für alle Zeilen in allen Tabellen. Zur gleichen Zeit, ich mache auch viele-zu-viele-Beziehungen, und so erfordern eindeutige Werte entweder in Spalte der Tabellen, die Koordinierung der Beziehungen behindern würde.
Wie kann ich einen Primärschlüssel definieren, der auf einem Tisch, so, dass jeder gegebene Wert kann wiederholt werden, in jeder Spalte, solange die Kombination der Werte über alle Spalten ist nie exakt wiederholt?
InformationsquelleAutor der Frage Kaji | 2010-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zitiert aus dem CREATE TABLE-Syntax Seite:
Etwas wie diese verwendet werden können für multi-Spalten-Primärschlüssel:
Von 13.6.4.4. FOREIGN KEY-Einschränkungen
InformationsquelleAutor der Antwort Adriaan Stander
Primärschlüssel ist ein domain-Konzept, das eindeutig (notwendig und ausreichend) ermittelt, Ihre Einheit unter ähnlichen Entitäten. Eine zusammengesetzte (mehrspaltige) Primärschlüssel macht nur Sinn, wenn ein Teil des Schlüssels bezieht sich auf eine bestimmte Instanz der anderen Entität Domäne.
Lassen Sie uns sagen, Sie haben eine persönliche Sammlung von Bücher. Solange Sie alleine sind, können Sie zählen Sie und ordnen Sie jedem eine Nummer. Die Nummer ist der Primärschlüssel der Domäne Ihrer Bibliothek.
Nun, die Sie Zusammenführen möchten Sie Ihre Bibliothek mit, die von Ihrem Nachbar aber immer noch in der Lage sein, zu unterscheiden, wem ein Buch gehört. Die domain ist jetzt breiter und der primary key ist jetzt (Eigentümer, book_id).
Damit jede primary key-composite sollte nicht die Strategie, sondern Sie sollten es verwenden, wenn erforderlich.
Nun einige Fakten über MySQL. Wenn Sie definieren eine zusammengesetzte primary key-und wollen die RDBSM autoincrement ids für Sie, die Sie wissen sollten über den Unterschied zwischen InnoDB und InnoDB Verhalten.
Sagen wir, wir wollen eine Tabelle mit zwei Felder: parent_id, child_id. Und wir wollen, dass die child_id werden autoincremented.
InnoDB wird autoincrement eindeutig innerhalb Datensätze mit der gleichen parent_id und InnoDB wird autoincrement-einzigartig in der gesamten Tabelle.
In InnoDB-definieren Sie den primären Schlüssel als (parent_id, child_id), und in InnoDB als (child_id, parent_id), weil die autoincremented Feld sollte der linke Bestandteil des Primärschlüssels in InnoDB.
InformationsquelleAutor der Antwort newtover
Der Primärschlüssel ist ein eindeutiger Wert für die Zeile. Es macht keinen Sinn zu zählen Preis, ein Wert, der sich ändern konnte. Stellen Sie, wenn Sie ändern mussten, ist eine große Auswahl an Preisen, dann sind alle diejenigen, die Primärschlüsselwerte ändern würde. Was für ein Chaos das wäre!
InformationsquelleAutor der Antwort Perry