Detaillierte Erläuterung des Anwendungsfalls für MySQL-Fremdschlüssel (FOREIGN KEY)

Detaillierte Erläuterung des Anwendungsfalls für MySQL-Fremdschlüssel (FOREIGN KEY)

Einführung: Die Nachteile der Speicherung aller Daten in einer Tabelle

  1. Die Organisationsstruktur der Tabelle ist komplex und unklar
  2. Platzverschwendung
  3. Sehr schlechte Skalierbarkeit

Um die oben genannten Probleme zu lösen, werden mehrere Tabellen zum Speichern der Daten benötigt.

Es gibt drei Arten von Beziehungen zwischen Datensätzen in Tabellen: Eins-zu-viele, Viele-zu-viele und Eins-zu-eins.

Um die Beziehungen zwischen Tabellen zu verarbeiten, wird FOREIGN KEY verwendet.

Viele-zu-eins-Beziehung:

Routine zum Suchen von Beziehungen zwischen Tabellen

Beispiel: Mitarbeitertabelle: emp-Tabelle Abteilung: dep-Tabelle

Teil 1:

  1. Erstens aus der Perspektive der Tabelle em
  2. Finden Sie heraus, ob mehrere Datensätze in der Emp-Tabelle einem Datensatz in der Dep-Tabelle entsprechen.
  3. Bedeutung der Übersetzung 2:
    Mehrere Datensätze in der linken Tabelle emp ==> mehrere Mitarbeiter. Ein Datensatz in der rechten Tabelle dep ==> eine Abteilung. Endgültiges Übersetzungsergebnis: Können mehrere Mitarbeiter zu einer Abteilung gehören?

Wenn ja, müssen Sie mit Teil 2 fortfahren

Teil 2:

  1. Aus der Perspektive der Tabellenabhängigkeit
  2. Finden Sie heraus, ob mehrere Datensätze in der Dep-Tabelle einem Datensatz in der Emp-Tabelle entsprechen.
  3. Bedeutung der Übersetzung 2:
    Mehrere Datensätze in der rechten Tabelle dep ==> mehrere Abteilungen Ein Datensatz in der linken Tabelle emp ==> ein Angestellter

Endgültiges Übersetzungsergebnis: Können mehrere Abteilungen denselben Mitarbeiter enthalten? Wenn nicht, kann festgestellt werden, dass die Beziehung zwischen emp und dep nur eine einseitige Viele-zu-eins-Beziehung ist. Wie kann dies erreicht werden?
Zu diesem Zeitpunkt können Sie den Fremdschlüssel verwenden. Fügen Sie der emp-Tabelle ein dep_id-Feld hinzu, das auf das ID-Feld der dep-Tabelle verweist.

Welchen Effekt hat der Fremdschlüssel?

Einschränkung 1: Beim Erstellen einer Tabelle müssen Sie zuerst die zugehörige Tabelle dep erstellen, bevor Sie die zugehörige Tabelle emp erstellen können.

Tabelle erstellen dep(
    ID int Primärschlüssel auto_increment,
    dep_name char(10),
    dep_comment char(60)
);
 
Tabelle emp erstellen(
    ID int Primärschlüssel auto_increment,
    Name char(16),
    Geschlecht Aufzählung('männlich','weiblich') nicht null Standard 'männlich',
    dep_id int,
    Fremdschlüssel (dep_id) verweist auf dep(id)
);

Einschränkung 2: Beim Einfügen von Datensätzen müssen Sie zuerst die zugehörige Tabelle dep einfügen, bevor Sie die zugehörige Tabelle emp einfügen.

in dep(dep_name,dep_comment)-Werte einfügen
('Lehre', 'Betreuung von Studierenden und Lehrveranstaltungen'),
('Abteilung Öffentlichkeitsarbeit', 'Umgang mit PR-Krisen'),
(,Technologieabteilung‘, ,Entwicklungsprojekte, Forschungstechnologie‘);
 
in emp(name,gender,dep_id)-Werte einfügen
('monicx0','männlich',1),
('monicx1','männlich',2),
('monicx2','männlich',1),
('monicx3','männlich',1),
('lili','weiblich',3);

Einschränkung 3: Sowohl beim Aktualisieren als auch beim Löschen muss die Beziehung zwischen dem Assoziierten und dem Assoziierten berücksichtigt werden.

Lösung:

1. Löschen Sie zuerst die zugehörige Tabelle emp, dann die zugehörige Tabelle dep und bereiten Sie den Neuaufbau vor

2. Rekonstruktion: Neue Features hinzufügen, synchron aktualisieren, synchron löschen

Tabelle erstellen dep(
    ID int Primärschlüssel auto_increment,
    dep_name char(10),
    dep_comment char(60)
);
 
Tabelle emp erstellen(
    ID int Primärschlüssel auto_increment,
    Name char(16),
    Geschlecht Aufzählung('männlich','weiblich') nicht null Standard 'männlich',
    dep_id int,
    Fremdschlüssel (dep_id) verweist auf dep(id)
    bei Updatekaskade
    bei Löschkaskade
);

Ändern Sie es jetzt:

Das Ergebnis ist:

Jetzt löschen:

Das Ergebnis ist:

Viele-zu-viele-Beziehungen:

Zwischen den Datensätzen der beiden Tabellen besteht eine bidirektionale Viele-zu-Eins-Beziehung, die als Viele-zu-viele-Beziehung bezeichnet wird.

Wie erreicht man das?

Erstellen Sie eine dritte Tabelle mit einem Feldfremdschlüssel, der ID der linken Tabelle, und einem Feldfremdschlüssel, der ID der rechten Tabelle.

Tabelle erstellen Autor(
    ID int Primärschlüssel auto_increment,
    Name Zeichen(16)
);
 
Tabelle Buch erstellen(
    ID int Primärschlüssel auto_increment,
    bname char(16),
    Preis int
);
 
in Autor(Name)-Werte einfügen
('monicx1'),
('monicx2'),
('monicx3')
;
in Buchwerte (bname, Preis) einfügen
('Python vom Eingang zum Grab', 200),
('Liunx vom Eintritt bis zum Tod', 400),
('Java vom Eingang bis zum Grab', 300),
('PHP vom Eingang bis zum Grab', 100)
;
#Erstellen Sie die dritte Tabelle:
Tabelle author2book( erstellen
    ID int Primärschlüssel auto_increment,
    Autor_ID int,
    Buch-ID int,
    Der Fremdschlüssel (Autor-ID) verweist auf den Autor (ID).
    bei Updatekaskade
    beim Löschen der Kaskade,
    Fremdschlüssel (Buch-ID) verweist auf Buch (ID)
    bei Updatekaskade
    bei Löschkaskade
);
 
in author2book(author_id,book_id)-Werte einfügen
(1,3),
(1,4),
(2,2),
(2,4),
(3,1),
(3,2),

In einer Eins-zu-eins-Beziehung entspricht ein Datensatz in der linken Tabelle eindeutig einem Datensatz in der rechten Tabelle und umgekehrt.

Tabelle Kunde erstellen(
    ID int Primärschlüssel auto_increment,
    Name char(20) nicht null,
    qq char(10) nicht null,
    Telefon char(16) nicht null
);
 
Tabelle „Student“ erstellen (
    ID int Primärschlüssel auto_increment,
    class_name char(20) nicht null,
    customer_id int unique, #Dieses Feld muss eindeutig sein. Der Fremdschlüssel (customer_id) verweist auf den Kunden (id). #Zu diesem Zeitpunkt muss die Eindeutigkeit des Fremdschlüsselfelds garantiert sein.
    bei Löschkaskade
    bei Updatekaskade
);

Dies ist das Ende dieses Artikels über den detaillierten Fall der Verwendung von MySQL-Fremdschlüsseln (FOREIGN KEY). Weitere relevante Inhalte zur Verwendung von MySQL-Fremdschlüsseln (FOREIGN KEY) finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Wie erreicht MySQL die Parallelität mehrerer Versionen?
  • Detaillierte Erläuterung der MySQL-Filterreplikationsideen
  • So verwenden Sie gespeicherte Prozeduren in MySQL, um schnell 1 Million Datensätze zu generieren
  • Die Python-Schnittstellenautomatisierung analysiert kurz den Betriebsprozess der PyMySQL-Datenbank
  • MySQL-Transaktionskontrollfluss und ACID-Eigenschaften
  • Mysql verwendet gespeicherte Prozeduren, um schnell Millionen von Datenbeispielcodes hinzuzufügen
  • Implementierung zum Entfernen überlappender Zeiten und Berechnen der Zeitdifferenz in MySQL
  • In der MySQL-Datenbank werden datetime, bigint und timestamp zur Darstellung der Zeitauswahl verwendet. Welches davon ist für die Zeitspeicherung am effizientesten?
  • Spezifische Verwendung von MySQL-Globalsperren und Sperren auf Tabellenebene
  • Analyse der MySQL-Absturzwiederherstellung basierend auf Redo Log und Undo Log

<<:  5 Gründe, warum sich Responsive Webdesign nicht lohnt

>>:  Erste Schritte mit TS (TypeScript) im Vue-Projekt

Artikel empfehlen

HTML-Optimierung beschleunigt Webseiten

Offensichtliches HTML, verstecktes „öffentliches ...

Detailliertes Beispiel des Kettenprogrammierstils von jQuery

Das Implementierungsprinzip der Kettenprogrammier...

Implementierung des CSS-Quellcodes für herzförmige Ladeanimationen

Lassen Sie mich Ihnen ohne weitere Umschweife den...

Beispielcode zur Implementierung von dynamischem Skinning mit vue+element

Manchmal kann das Thema eines Projekts nicht jede...

Linux-Systemreparaturmodus (Einzelbenutzermodus)

Inhaltsverzeichnis Vorwort 1. Allgemeine Fehlerbe...

Verwendung des Docker-Systembefehlssatzes

Inhaltsverzeichnis Docker-System df Docker-System...

Zusammenfassung der häufigsten Fehler im Webdesign

Bei der Gestaltung einer Webseite passieren Desig...

Ein kurzer Vortrag über das Klonen von JavaScript

Inhaltsverzeichnis 1. Oberflächliches Klonen 2. T...

Zusammenfassung des fragmentierten Wissens zum Docker-Management

Inhaltsverzeichnis 1. Übersicht 2. Anwendungsbeis...

Installationsschritte für das grafische MySQL-Verwaltungstool Navicat

Inhaltsverzeichnis Vorwort 1. Stellen Sie das Ins...