Heim > Datenbank > MySQL-Tutorial > Wie erstellt man korrekt relationale Tabellen ohne automatisch inkrementierende IDs?

Wie erstellt man korrekt relationale Tabellen ohne automatisch inkrementierende IDs?

Linda Hamilton
Freigeben: 2025-01-06 07:54:40
Original
816 Leute haben es durchsucht

How to Properly Create Relational Tables Without Auto-Increment IDs?

SQL: Erstellen einer relationalen Tabelle mit zwei verschiedenen automatischen Inkrementierungen

Problemübersicht

Es ist üblich, zwei Tabellen mit automatisch inkrementierten IDs als primäre Tabellen zu verwenden Schlüssel. Das Erstellen einer dritten relationalen Tabelle zum Herstellen einer Beziehung zwischen diesen beiden Tabellen führt jedoch häufig zu Fehlern. Dies liegt daran, dass entweder nur eine automatisch inkrementierte Spalte zulässig ist oder das Entfernen der automatischen Inkrementierung aus den Anfangstabellen die Erstellung von Fremdschlüsseln aufgrund von Typübereinstimmungsproblemen verhindert.

Missverständnisse über ID-Felder und Primärschlüssel

Es ist wichtig, einige grundlegende Missverständnisse auszuräumen:

  • Automatisch inkrementierte IDs sind technisch oder technisch nicht gleichbedeutend mit Primärschlüsseln relationaler Sinn. Ein Primärschlüssel sollte ein sich nicht wiederholender, logischer Schlüssel sein, der aus den Daten extrahiert wird, und keine willkürliche, vom System generierte Zahl.
  • Die Deklaration eines ID-Felds als Primärschlüssel wandelt es nicht auf magische Weise in einen echten Primärschlüssel um . Es stellt nur die Eindeutigkeit innerhalb der Tabelle sicher, aber nicht die Einzigartigkeit zwischen Tabellen.

Anforderungen an relationale Tabellen

Relationale Tabellen müssen eindeutige Zeilen haben, was durch die Verwendung automatisch inkrementierter IDs nicht garantiert werden kann Primärschlüssel. Um eine relationale Tabelle zu erstellen, müssen wir einen echten Primärschlüssel identifizieren, der aus Datenattributen besteht, die jede Zeile eindeutig identifizieren.

Korrekturmaßnahme

Schritt 1: Definieren Sie einen echten Primärschlüssel

Identifizieren Sie die Datenattribute, die zusammen die Zeilen in jeder Tabelle eindeutig unterscheiden. Deklarieren Sie eine eindeutige Einschränkung für diese Felder, um doppelte Zeilen zu verhindern.

Schritt 2: Eliminieren Sie das ID-Feld

Sobald eindeutige Zeilen sichergestellt sind, werden das überflüssige ID-Feld (und seine unterstützender Index) wird unnötig und kann entfernt werden.

Schritt 3: Erstellen Sie den Assoziativ Tabelle

Die dritte Tabelle, die die beiden Primärtabellen verbindet, sollte einen zusammengesetzten Primärschlüssel haben, der aus den Primärschlüsseln beider übergeordneter Tabellen besteht. Dies stellt eindeutige Zeilen in der assoziativen Tabelle sicher.

Beispiel

Angenommen, wir haben zwei Tabellen: Benutzer und Sport. Um eine Beziehung zwischen ihnen herzustellen, erstellen wir eine dritte Tabelle user_sport:

CREATE TABLE user (
  user_name CHAR(16) NOT NULL PRIMARY KEY,
  name_first CHAR(30) NOT NULL,
  name_last CHAR(30) NOT NULL,
  birth_date DATE NOT NULL
);

CREATE TABLE sport (
  sport_code CHAR(4) NOT NULL PRIMARY KEY,
  name CHAR(30) NOT NULL
);

CREATE TABLE user_sport (
  user_name CHAR(16) NOT NULL,
  sport_code CHAR(4) NOT NULL,
  start_date DATE NOT NULL,
  PRIMARY KEY (user_name, sport_code),
  FOREIGN KEY (user_name) REFERENCES user (user_name),
  FOREIGN KEY (sport_code) REFERENCES sport (sport_code)
);
Nach dem Login kopieren

In diesem Beispiel:

  • user_name ist der Primärschlüssel der Benutzertabelle.
  • sport_code ist der Primärschlüssel der Sporttabelle.
  • (user_name, sport_code) ist der zusammengesetzte Primärschlüssel der user_sport Tabelle, die jede Zeile eindeutig identifiziert.

Durch die Befolgung dieser Prinzipien können wir relationale Tabellen mit eindeutigen Zeilen erstellen, die Datenintegrität sicherstellen und die Probleme vermeiden, die durch die Verwendung automatisch inkrementierter IDs als Primärschlüssel entstehen.

Das obige ist der detaillierte Inhalt vonWie erstellt man korrekt relationale Tabellen ohne automatisch inkrementierende IDs?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage