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?Ich bin für die Wartung der vom Offshore-Entwicklungsteam erstellten Anwendung zuständig. Jetzt habe ich alle Arten von Problemen in der Anwendung, weil das ursprüngliche Datenbankschema keine PRIMARY KEYS für einige Tabellen enthielt. Lassen Sie also bitte nicht andere Leute wegen Ihres schlechten Designs leiden. Es ist immer eine gute Idee, Primärschlüssel für Tabellen zu haben.
Ich würde gerne etwas Offizielles wie dieses finden - 15.6.2.1 Geclusterte und sekundäre Indizes - MySQL .
Wenn die Tabelle keinen PRIMARY KEY oder geeigneten UNIQUE-Index hat, erzeugt InnoDB intern einen versteckten geclusterten Index namens GEN_CLUST_INDEX auf einer synthetischen Spalte, die Zeilen-ID-Werte enthält. Die Zeilen werden nach der ID geordnet, die InnoDB den Zeilen einer solchen Tabelle zuweist. Die Zeilen-ID ist ein 6-Byte-Feld, das monoton ansteigt, wenn neue Zeilen eingefügt werden. Die nach der Zeilen-ID geordneten Zeilen befinden sich also physisch in der Einfügereihenfolge.
Warum also nicht selbst einen Primärschlüssel oder etwas Ähnliches erstellen? Außerdem kann ORM diese versteckte ID nicht identifizieren, was bedeutet, dass Sie die ID nicht in Ihrem Code verwenden können.
Ich weiß, dass Sie, um bestimmte Funktionen des Gridview in .NET zu nutzen, einen Primärschlüssel benötigen, damit das Gridview weiß, welche Zeile aktualisiert/gelöscht werden muss. In der Regel sollte man einen Primärschlüssel oder einen Primärschlüssel-Cluster haben. Ich persönlich bevorzuge den ersten.
Ich habe immer einen Primärschlüssel, auch wenn ich anfangs noch keinen Zweck dafür im Sinn habe. Es ist schon ein paar Mal vorgekommen, dass ich einen PK in einer Tabelle brauchte, die noch keinen hatte, und es ist immer mühsamer, ihn später einzufügen. Ich denke, es hat mehr Vorteile, wenn man immer einen einbaut.