2009-11-20 5 views
8

Wenn ich keinen Primärschlüssel brauche, sollte ich keinen zur Datenbank hinzufügen?Ist es in Ordnung, keinen Primärschlüssel zu verwenden, wenn ich keinen brauche

+16

Es gibt kaum einen Fall, in dem Sie keinen Primärschlüssel benötigen. Wenn eine Tabelle keinen Primärschlüssel hat, handelt es sich im Grunde nicht um eine Tabelle, sondern nur um einen Datenhaufen. –

+2

Es ist vielleicht nicht relevant für Ihre Frage, aber ich muss fragen: * Warum glauben Sie nicht, dass Sie eine brauchen? * –

+0

Können Sie uns mehr Informationen über die Situation geben, mit der Sie es zu tun haben? Primärschlüssel sind nicht immer notwendig, aber wenn wir wüssten, was Sie vorhaben, könnten wir Ihnen vielleicht einen besseren Rat geben. – TLiebe

Antwort

13

Ein Primärschlüssel identifiziert eine Zeile in Ihrer Tabelle eindeutig.

Die Tatsache, dass es indexiert und/oder geclustert ist, ist ein physikalisches Implementierungsproblem und hat nichts mit dem logischen Design zu tun.

Sie brauchen einen für die Tabelle sinnvoll.

3

Wenn Sie keinen Primärschlüssel benötigen, verwenden Sie diesen nicht. Normalerweise brauche ich Primärschlüssel, also benutze ich sie normalerweise. Wenn Sie verwandte Tabellen haben, möchten Sie wahrscheinlich Primär- und Fremdschlüssel.

+0

+1 kurz und süß :) – James

0

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.

+1

Ich verstehe nicht, dass Primärschlüssel bei der Leistung helfen? Wenn Sie sie nicht benötigen, suchen Sie keine Datensätze, indem Sie einen verwenden. Also, es gibt keinen Vorteil. – brainfck

+0

Wofür wird der Tisch dann benutzt? meistens brauchen wir die Tabelle, um einige Informationen zu speichern, und Sie werden nach Werten suchen. –

+1

Luke101 sollte seinen Anwendungsfall posten und wir werden sehen, ob er einen braucht. – brainfck

2

Ja, aber nur im selben Sinne, dass es in Ordnung ist, keinen Sicherheitsgurt zu benutzen, wenn Sie keinen Unfall planen. 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 ist, dass Sie viel eher einen Primärschlüssel als in einem Autounfall benötigen.

Sie sollten auch wissen, dass einige Datenbanksysteme einen Primärschlüssel für Sie erstellen, wenn Sie dies nicht tun, also sparen Sie nicht so viel, was in der Engine vor sich geht.

+5

Ich stimme nicht zu. Ich weigere mich, Sicherheitsgurte zu tragen, da sie mir den vollen Zugang zu meinem Bier versperren. Aber ich werde nie eine Tabelle ohne ein PK erstellen. –

+0

@Rev Gonzo, was Sie brauchen, ist ein strategisch platzierter Bierhalter. Komm schon, es ist 2010. – JeffO

40

Sie benötigen einen Primärschlüssel. Das weißt du noch nicht.

+6

Ich dachte einmal, ich brauche auch keinen Primärschlüssel ... Jetzt weiß ich es besser. – MiseryIndex

+2

+1 Weil dies die Realität am genauesten widerspiegelt. Ich kann Fälle sehen, in denen man nicht einen, aber wenige und weit dazwischen braucht. – Murph

+1

Außer wenn Sie keinen Primärschlüssel benötigen, und Sie wissen es jetzt. Dies ist jedoch ein ungewöhnlicher Fall. Es ist besser, auf Nummer sicher zu gehen und sich für PK zu entscheiden. – MarkPflug

0

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?

+0

warum hätte ich einen Tisch dafür ????? –

+0

Sie müssen eine einzelne Information speichern? So etwas wie eine systemweite Präferenz? Jeder braucht diese Daten, aber Sie wollen nicht eine ganz neue Sache schaffen, nur um dieses eine Stück Daten zu bekommen. – ElGringoGrande

+3

Ah. Aber Sie möchten einen Primärschlüssel für diese Tabelle. Und eine Prüfbedingung, die diesen Primärschlüssel auf einen einzelnen Wert begrenzt. Weil du sonst in 6 Monaten zurückkehrst und feststellst, dass jemand anderes eine weitere Zeile für dich hinzugefügt hat, und die, die deine Bewerbung annimmt, willkürlich ist ... –

0

Ein Primärschlüssel ist 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 bedenken, dass die Definition des Primärschlüssels für Entwickler und die Erstellung von Schemas oder SQL-Dev-Tools nützlich sein kann, da die Metadaten helfen, diese zu verstehen, und einige Tools verlassen sich darauf, um die Primär-/Fremdschlüsselbeziehungen im Modell korrekt zu definieren. Nun

0

...

Jede Tabelle in einer relationalen DB benötigt einen Primärschlüssel. Wie bereits erwähnt, ist ein Primärschlüssel Daten, die einen Datensatz eindeutig identifiziert ...

Sie könnten damit kommen ohne ein "ID" -Feld, wenn Sie eine NM-Tabelle haben, die 2 verschiedene Tabellen verbindet, aber Sie können eindeutig Identifizieren Sie den Datensatz anhand der Werte aus beiden Spalten, denen Sie beitreten. (Composite Primärschlüssel)

eine Tabelle ohne Primärschlüssel zu haben, ist gegen die erste Normalform und hat nichts in einer relationalen DB

2

Nein zu tun, es sei denn, Sie ein Beispiel finden können „Diese Datenbank würden funktionieren so viel besser, wenn table_x keinen Primärschlüssel hat."

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 Ihren Big-Boy an pants und treten Sie der realen Welt der Datenbankimplementierung bei

1

Ja, eine Tabelle sollte IMMER einen Primärschlüssel haben ... es sei denn, Sie müssen die Datensätze darin nicht eindeutig identifizieren (ich mache gerne absolute Aussagen und sofort widersprechen sie)

Wann würden Sie nicht brauchen, um die Aufzeichnungen in einer Tabelle zu identifizieren? Fast nie. Ich habe dies vorher getan, aber für Dinge wie Überwachungsprotokolltabellen. Daten, die nicht aktualisiert werden oder gelöscht, und wird in keiner Weise eingeschränkt werden. Im Wesentlichen strukturierte Protokollierung.

0

Sie sollten immer einen Primärschlüssel haben, auch wenn es nur auf ID ist. Vielleicht möchten Sie lieber NoSQL (nur fragen)?

0

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 dafür, ob 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 Logging-Art-Tabelle, in der Sie einfach einen Eintrag nach dem anderen ablegen (um sie später richtig 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.

Verwandte Themen