18 Stimmen

Sollte eine Datenbanktabelle immer Primärschlüssel haben?

Sollte ich immer einen Primärschlüssel in meinen Datenbanktabellen haben?

Nehmen wir die SO-Kennzeichnung. Sie können das Tag in jeder Revision sehen, es befindet sich wahrscheinlich in einer tag_rev-Tabelle mit der postID und der Revisionsnummer. Würde ich dafür eine PK benötigen?

Auch da es in einer Rev-Tabelle ist und nicht derzeit verwenden die Tags sollte ein Blob von tagIDs statt mehrere Einträge von mehreren post_id tagid Paar sein?

1voto

HLGEM Punkte 91543

Ich bin der festen Überzeugung, dass jede Tabelle eine Möglichkeit zur eindeutigen Identifizierung eines Datensatzes haben sollte. Bei 99 % der Tabellen ist dies ein Primärschlüssel. Bei den übrigen kann man mit einem eindeutigen Index auskommen (ich denke hier an einspaltige Tabellen vom Typ "Look up"). Jedes Mal, wenn ich mit einer Tabelle ohne eine Möglichkeit zur eindeutigen Identifizierung von Datensätzen arbeiten musste, gab es Probleme.

Ich glaube auch, wenn Sie Surrogatschlüssel als PK verwenden, sollten Sie, wo immer möglich, einen separaten eindeutigen Index für jede Kombination von Feldern haben, aus denen der natürliche Schlüssel besteht. Mir ist klar, dass es allzu oft vorkommt, dass man keinen echten natürlichen Schlüssel hat (Namen sind nicht eindeutig oder das, was etwas eindeutig macht, könnte über mehrere Eltern-Kind-Tabellen verteilt sein), aber wenn Sie einen haben, stellen Sie bitte bitte sicher, dass er einen eindeutigen Index hat oder als PK erstellt wird.

0voto

Lluis Martinez Punkte 1917

Wenn es keine PK gibt, wie werden Sie eine einzelne Zeile aktualisieren oder löschen? Das wäre unmöglich! Um ehrlich zu sein, habe ich schon ein paar Mal Tabellen ohne PK verwendet, zum Beispiel um Aktivitätsprotokolle zu speichern, aber selbst in diesem Fall ist es ratsam, eine PK zu haben, weil die Zeitstempel nicht granular genug sein können. Temporäre Tabellen sind ein weiteres Beispiel. Aber nach der relationalen Theorie ist die PK obligatorisch.

0voto

user55474 Punkte 527

Es ist gut, Schlüssel und Beziehungen zu haben. Wenn Ihre Anwendung jedoch gut genug ist, um mit den Beziehungen umzugehen, können Sie die Schlüssel möglicherweise überspringen (obwohl ich empfehle, dass Sie sie haben).

0voto

Matt Dawdy Punkte 18483

Da ich Subsonic verwende, erstelle ich immer einen Primärschlüssel für alle meine Tabellen. Viele DB-Abstraktionsbibliotheken benötigen einen Primärschlüssel, um zu funktionieren.

Hinweis: Das ist keine Antwort auf den "Grand Unified Theory"-Ton Ihrer Frage, aber ich will damit nur sagen, dass Sie in der Praxis manchmal einen Primärschlüssel für jede Tabelle erstellen MÜSSEN.

0voto

lumpynose Punkte 917

Wenn es eine Join-Tabelle ist, dann würde ich nicht sagen, dass Sie einen Primärschlüssel benötigen. Nehmen wir zum Beispiel an, Sie haben die Tabellen PERSONEN, KRANKHEITEN und KRANKHEITEN. Die Tabelle ILLNESSES hat Dinge wie Grippe, Erkältung, usw., jede mit einem Primärschlüssel. PERSONEN enthält die üblichen Informationen über Personen, ebenfalls mit einem Primärschlüssel. Die Tabelle SICKPEOPLE enthält nur Personen, die krank sind, und hat zwei Spalten, PERSONID und ILLNESSID, Fremdschlüssel zurück zu ihren jeweiligen Tabellen und keinen Primärschlüssel. Die Tabellen PERSONS und ILLNESSES enthalten Entitäten und Entitäten erhalten Primärschlüssel. Die Einträge in der Tabelle SICKPEOPLE sind keine Entitäten und erhalten keine Primärschlüssel.

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