Ein Primärschlüssel identifiziert eine Zeile in Ihrer Tabelle eindeutig.
Die Tatsache, dass es indiziert und / oder geclustert ist, ist ein physikalisches Implementierungsproblem und steht in keinem Zusammenhang mit dem logischen Design.
Sie brauchen einen für die Tabelle, um einen Sinn zu ergeben.
Ja, aber nur so, dass es in Ordnung ist, keinen Sicherheitsgurt zu benutzen, wenn Sie nicht vorhaben, einen Unfall zu haben. Das heißt, es ist ein kleiner Preis, für einen großen Vorteil zu zahlen, wenn Sie es brauchen, und selbst wenn Sie denken, dass Sie es nicht brauchen, werden Sie Chancen in der Zukunft haben. Der Unterschied besteht darin, dass Sie viel häufiger einen Primärschlüssel benötigen als einen Autounfall.
Sie sollten auch wissen, dass einige Datenbanksysteme einen Primärschlüssel für Sie erstellen, wenn Sie dies nicht tun, damit Sie nicht so viel sparen, was in der Engine vor sich geht.
Nein, es sei denn, Sie finden ein Beispiel für "Diese Datenbank würde so viel besser funktionieren, wenn table_x keinen Primärschlüssel hätte."
Sie können argumentieren, niemals einen Primärschlüssel zu verwenden, wenn Leistung, Datenintegrität und Normalisierung nicht erforderlich sind. Sicher- heits- und Sicherungs- / Wiederherstellungsfunktionen sind möglicherweise nicht erforderlich, aber schließlich ziehen Sie Ihre Big-Boy-Hosen an und treten der realen Welt der Datenbankimplementierung bei.
Ja, eine Tabelle sollte IMMER einen Primärschlüssel haben ... es sei denn, Sie müssen die darin enthaltenen Datensätze nicht eindeutig identifizieren. (Ich mache gerne absolute Aussagen und widerspreche ihnen sofort)
Wann müssen Sie die Datensätze in einer Tabelle nicht eindeutig identifizieren? Fast nie. Ich habe das schon vorher für Dinge wie Audit-Log-Tabellen getan. Daten, die nicht aktualisiert oder gelöscht werden und in keiner Weise eingeschränkt werden. Im Wesentlichen strukturierte Protokollierung.
Ein Primärschlüssel hilft immer bei der Abfrageleistung. Also, wenn Sie jemals mit dem "Schlüssel" zu einem "Fremdschlüssel" abfragen müssen, oder als Nachschlagen verwendet werden, dann ja, craete einen Fremdschlüssel.
Ich weiß es nicht. Ich habe ein paar Tische benutzt, wo es nur eine einzige Reihe und eine einzige Spalte gibt. Wird immer nur eine einzelne Zeile und eine einzelne Spalte sein. Es gibt keine Fremdschlüsselbeziehungen.
Warum sollte ich einen Primärschlüssel darauf legen?
Ein Primärschlüssel wird hauptsächlich formell definiert, um die referenzielle Integrität zu unterstützen. Wenn die Tabelle jedoch sehr klein ist oder wahrscheinlich keine eindeutigen Daten enthält, ist dies ein unnötiger Overhead. Das Definieren von Indizes für die Tabelle kann normalerweise dazu verwendet werden, einen Primärschlüssel zu implizieren, ohne ihn formal zu deklarieren. Sie sollten jedoch berücksichtigen, dass das Definieren des Primärschlüssels für Entwickler und Schemagenerierung oder SQL-Entwicklungstools nützlich sein kann, da die Metadaten zum Verständnis beitragen und einige Tools darauf angewiesen sind, um die Primär- / Fremdschlüsselbeziehungen im Modell korrekt zu definieren / p>
Nun ...
Jede Tabelle in einer relationalen Datenbank benötigt einen Primärschlüssel. Wie bereits erwähnt, sind Primärschlüssel Daten, die einen Datensatz eindeutig identifizieren ...
Es könnte passieren, dass Sie kein "ID" -Feld haben, wenn Sie eine N-M-Tabelle haben, die zwei verschiedene Tabellen verbindet, aber Sie können den Datensatz durch die Werte aus beiden Spalten eindeutig identifizieren. (Zusammengesetzter Primärschlüssel)
Eine Tabelle ohne Primärschlüssel ist gegen die erste Normalform und hat in einem relationalen DB nichts zu tun
Das hängt sehr davon ab, wie sicher Sie sein können, dass Sie keinen brauchen. Wenn Sie nur den geringsten Zweifel haben, fügen Sie einen hinzu - Sie werden sich später selbst bedanken. Ein Indikator ist, wenn die Daten, die Sie speichern, zu einem bestimmten Zeitpunkt mit anderen Daten in Ihrer Datenbank in Beziehung stehen könnten.
Ein Anwendungsfall, den ich mir vorstellen kann, ist eine Art Logging-Tabelle, in der Sie einfach einen Eintrag nach dem anderen ablegen (um sie später korrekt zu verarbeiten). Wahrscheinlich brauchen Sie dort keinen Primärschlüssel, wenn Sie genügend Daten speichern, um die relevanten Nachrichten herauszufiltern (wie ein Datum). Natürlich ist es fraglich, ein RDBMS dafür zu verwenden.
Tags und Links sql primary-key database-design normalization