phpMyAdmin
 sql >> Datenbank >  >> Database Tools >> phpMyAdmin

Grundlegendes zu Primärschlüssel- und Beziehungsdatenbanken mit MySQL (phpmyadmin)

TL;DR Sie brauchen nicht um eine "Beziehung" zu deklarieren, dh Fremdschlüssel (FK) abzufragen. Aber es ist eine gute Idee . Wenn Sie dies tun, kann ein FK auf einen Primärschlüssel (PK) oder verweisen alle anderen UNIQUE-Spalten.

PKs &FKs werden in einigen Methoden und Produkten fälschlicherweise als "Beziehungen" bezeichnet. Anwendungsbeziehungen werden durch Tabellen dargestellt . (Basistabellen und Abfrageergebnisse.) PKs &FKs sind Einschränkungen:Sie teilen dem DBMS mit, dass nur bestimmte Situationen auftreten können, sodass es feststellen kann, wenn Sie bestimmte Fehler machen. Sie sind keine Beziehungen, sie sind Aussagen, die in allen Datenbankzuständen und Anwendungssituationen wahr sind. Sie müssen keine Einschränkungen kennen, um eine Datenbank zu aktualisieren und abzufragen.

Wissen Sie einfach, was jede Tabelle bedeutet . Basistabellen haben DBA-gegebene Bedeutungen, die Ihnen sagen, was ihre Zeilen bedeuten. Abfragen haben auch Bedeutungen, die Ihnen sagen, was ihre Zeilen bedeuten. Abfragebedeutungen werden aus Basistabellenbedeutungen kombiniert, parallel dazu, wie ihre Ergebniswerte aus Basistabellenwerten und -bedingungen kombiniert werden.

  • image_tbl -- Bild [ID] befindet sich in einem Album namens [AlbumName], heißt [Name], ist auf [DatumUhrzeit] datiert und hat einen Kommentar [Kommentar]
  • album_tbl -- Album [AlbumID] heißt [AlbumName]

Sie haben nicht PKs/UNIQUEs oder FKs zu deklarieren! Aber es ist eine gute Idee weil dann das DBMS unmögliche/fehlerhafte Aktualisierungen verbieten kann. Ein PK/UNIQUE besagt, dass ein Unterzeilenwert für seine Spalten nur einmal vorkommen darf. Ein FK besagt, dass ein Unterzeilenwert für seine Spalten als PK/UNIQUE-Unterzeilenwert in seiner referenzierten Tabelle erscheinen muss. Die Tatsache, dass diese Einschränkungen für Basistabellen gelten, bedeutet, dass bestimmte Einschränkungen für Abfrageergebnisse gelten. Die Bedeutung dieser Abfrageergebnisse richtet sich jedoch nach den Tabellen- und Bedingungskombinationen der Abfrage, unabhängig von diesen Einschränkungen. ZB ob Albumnamen eindeutig sind oder nicht,

  • image_tbl JOIN album_tbl USING albumName -- Bild [ID] befindet sich in einem Album namens [AlbumName], heißt [Name], ist auf [DatumUhrzeit] datiert und hat einen Kommentar [Kommentar] UND Album [AlbumID] heißt [AlbumName]

Das einzige Problem hier ist, dass wenn Albumnamen nicht eindeutig sind, Ihnen der Albumname eines Bildes nicht sagen wird, in welchem ​​Album es sich befindet; Sie wissen nur, dass es in einem Album mit diesem Namen ist. Wenn andererseits Albumnamen eindeutig sind, brauchen Sie album_tbl albumID nicht.

Wenn also Albumnamen eindeutig sind, deklarieren Sie albumName UNIQUE in album_tbl. Identifizieren Sie dann in image_tbl das Album anhand einer PK/UNIQUE-Spalte von album_tbl. Da album_id vermutlich nur zum Identifizieren von Alben vorhanden ist, würden wir normalerweise erwarten, dass es ausgewählt wird. Deklarieren Sie dann in image_tbl diese Spalte als FK, der auf album_tbl verweist.

PS-Indizes beschleunigen im Allgemeinen Abfragen auf Kosten von Zeit und Speicherplatz. Eine Primärschlüsseldeklaration in einer Tabellendeklaration deklariert automatisch einen Index. Es ist eine gute Idee, PK-, UNIQUE- und FK-Spaltensätze zu indizieren.