413 Stimmen

Sollte jede einzelne Tabelle einen Primärschlüssel haben?

Ich erstelle eine Datenbanktabelle und habe ihr keinen logischen Primärschlüssel zugewiesen. Sollte jede einzelne Tabelle einen Primärschlüssel haben?

4voto

Shiva Punkte 1361

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.

4voto

kyakya Punkte 1719

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.

3voto

Tacoman667 Punkte 1381

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.

2voto

rvarcher Punkte 1546

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.

2voto

Schildmeijer Punkte 20362

Wenn Sie Hibernate verwenden, ist es nicht möglich, eine Entität ohne einen Primärschlüssel zu erstellen. Dies kann zu Problemen führen, wenn Sie mit einer bestehenden Datenbank arbeiten, die mit einfachen SQL/DDL-Skripten erstellt wurde, und kein Primärschlüssel hinzugefügt wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X