Ich erstelle eine Datenbanktabelle und habe ihr keinen logischen Primärschlüssel zugewiesen. Sollte jede einzelne Tabelle einen Primärschlüssel haben?
Antworten
Zu viele Anzeigen?Kurze Antwort: ja .
Lange Antwort:
- Sie müssen Ihre Tabelle mit etwas verbinden können
- Wenn Sie wollen, dass Ihre Tabelle geclustert wird, brauchen Sie eine Art Primärschlüssel.
- Wenn Ihr Tabellendesign keinen Primärschlüssel benötigt, überdenken Sie Ihr Design: Wahrscheinlich fehlt Ihnen etwas. Warum identische Datensätze behalten?
In MySQL erstellt die InnoDB-Speicher-Engine immer einen Primärschlüssel, wenn Sie ihn nicht explizit angegeben haben, wodurch eine zusätzliche Spalte entsteht, auf die Sie keinen Zugriff haben.
Beachten Sie, dass ein Primärschlüssel zusammengesetzt sein kann.
Wenn Sie eine Many-to-many-Verknüpfungstabelle haben, erstellen Sie den Primärschlüssel für alle an der Verknüpfung beteiligten Felder. So stellen Sie sicher, dass Sie nicht zwei oder mehr Datensätze haben, die eine Verknüpfung beschreiben.
Abgesehen von den logischen Konsistenzproblemen ist es für die meisten RDBMS-Engines von Vorteil, diese Felder in einen eindeutigen Index aufzunehmen.
Da für jeden Primärschlüssel ein eindeutiger Index erstellt werden muss, sollten Sie diesen deklarieren, um sowohl logische Konsistenz als auch Leistung zu erhalten.
In diesem Artikel in meinem Blog erfahren Sie, warum Sie immer einen eindeutigen Index für eindeutige Daten erstellen sollten:
P.S. Es gibt einige sehr, sehr spezielle Fälle, in denen Sie keinen Primärschlüssel benötigen.
Meistens enthalten sie Protokolltabellen, die keine jede Indizes aus Leistungsgründen.
Stimmen Sie der vorgeschlagenen Antwort nicht zu. Die kurze Antwort lautet: NO .
Der Zweck des Primärschlüssels besteht darin, eine Zeile in der Tabelle eindeutig zu identifizieren, um eine Beziehung zu einer anderen Tabelle herzustellen. Traditionell wird zu diesem Zweck ein automatisch inkrementierter Integer-Wert verwendet, aber es gibt auch andere Varianten.
Es gibt jedoch Fälle, z. B. die Protokollierung von Zeitreihendaten, in denen die Existenz eines solchen Schlüssels einfach nicht erforderlich ist und nur Speicherplatz beansprucht. Eine Zeile eindeutig zu machen ist einfach ... nicht erforderlich!
Ein kleines Beispiel: Tabelle A: LogData
Columns: DateAndTime, UserId, AttribA, AttribB, AttribC etc...
Kein Primärschlüssel erforderlich.
Tabelle B: Benutzer
Columns: Id, FirstName, LastName etc.
Primärschlüssel (Id), der als "Fremdschlüssel" für die Tabelle LogData verwendet werden kann.
Am besten ist es immer, einen Primärschlüssel zu haben. Auf diese Weise erfüllt er erste Normalform und ermöglicht es Ihnen, den Weg der Datenbank-Normalisierung Pfad.
Wie bereits von anderen erwähnt, gibt es einige Gründe, die gegen einen Primärschlüssel sprechen, aber die meisten werden nicht beeinträchtigt, wenn es einen Primärschlüssel gibt
- See previous answers
- Weitere Antworten anzeigen