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

50 wunderschöne FLASH-Website-Designbeispiele

Mit Flash konnten Designer und Entwickler umfangr...

Praktisches Tutorial zum Ändern des MySQL-Zeichensatzes

Vorwort: In MySQL unterstützt das System viele Ze...

Allgemeine Tags in XHTML

Was sind XHTML-Tags? XHTML-Tag-Elemente sind die ...

Implementierungsbeispiel eines Videoplayers basierend auf Vue

Wenn der vorhandene Videoplayer die Anforderungen...

jQuery realisiert dynamische Partikeleffekte

In diesem Artikel wird der spezifische Code von j...

Detaillierte Erklärung zum Kopieren und Sichern von Docker-Containerdaten

Hier nehmen wir den Jenkins-Container als Beispie...

So implementieren Sie eine geplante Sicherung der CentOS MySQL-Datenbank

Das folgende Skript wird für die geplante Sicheru...

Abkürzungszeichen und Akronymzeichen

Die Tags <abbr> und <acronym> stellen ...

Zusammenfassung der 10 gängigen HBase-Betriebs- und Wartungstools

Zusammenfassung: HBase verfügt über zahlreiche Be...

Implementierung der CSS-Rahmenlängensteuerungsfunktion

Wenn die Rahmenlänge früher kleiner als der Conta...

Einführung in Spark und Vergleich mit Hadoop

Inhaltsverzeichnis 1. Spark vs. Hadoop 1.1 Nachte...

MySql schnelles Einfügen von zig Millionen großen Datenbeispielen

Im Bereich der Datenanalyse sind Datenbanken unse...