Was ist das Besondere am Primärschlüssel?
Was ist der Zweck einer Tabelle in einem Schema? Was ist der Zweck eines Schlüssels einer Tabelle? Was ist das Besondere am Primärschlüssel? Die Diskussionen um Primärschlüssel scheinen den Punkt zu verfehlen, dass der Primärschlüssel Teil einer Tabelle und diese Tabelle Teil eines Schemas ist. Was für die Tabelle und die Tabellenbeziehungen am besten ist, sollte den verwendeten Schlüssel steuern.
Tabellen (und Tabellenbeziehungen) enthalten Fakten zu Informationen, die Sie aufzeichnen möchten. Diese Tatsachen sollten in sich geschlossen, aussagekräftig, leicht verständlich und nicht widersprüchlich sein. Aus Entwurfssicht sollten andere Tabellen, die einem Schema hinzugefügt oder daraus entfernt werden, keine Auswirkungen auf die betreffende Tabelle haben. Es muss einen Zweck zum Speichern der Daten geben, die sich nur auf die Informationen selbst beziehen. Um zu verstehen, was in einer Tabelle gespeichert ist, sollte kein wissenschaftliches Forschungsprojekt erforderlich sein. Keine für denselben Zweck gespeicherte Tatsache sollte mehr als einmal gespeichert werden. Schlüssel sind ein Ganzes oder ein Teil der aufgezeichneten Informationen, die eindeutig sind, und der Primärschlüssel ist der speziell festgelegte Schlüssel, der der primäre Zugriffspunkt auf die Tabelle sein soll (dh er sollte aus Gründen der Datenkonsistenz und -verwendung ausgewählt und nicht nur eingefügt werden Performance).
- ASIDE: Der unglückliche Nebeneffekt der meisten Datenbanken, die von Anwendungsprogrammierern entworfen und entwickelt werden (was ich manchmal bin), ist, dass das Beste für die Anwendung oder das Anwendungsframework häufig die Primärschlüsselauswahl für Tabellen bestimmt. Dies führt zu Ganzzahl- und GUID-Schlüsseln (da diese für Anwendungsframeworks einfach zu verwenden sind) und monolithischen Tabellenentwürfen (da diese die Anzahl der Anwendungsframeworkobjekte verringern, die zur Darstellung der Daten im Speicher erforderlich sind). Diese anwendungsgesteuerten Entscheidungen zum Datenbankdesign führen zu erheblichen Datenkonsistenzproblemen, wenn sie in großem Maßstab verwendet werden. Auf diese Weise entworfene Anwendungsframeworks führen natürlich zu Tabellenentwürfen. "Teilaufzeichnungen" werden in Tabellen erstellt und Daten im Laufe der Zeit ausgefüllt. Die Interaktion mit mehreren Tabellen wird vermieden oder führt bei Verwendung zu inkonsistenten Daten, wenn die Anwendung nicht ordnungsgemäß funktioniert. Diese Entwürfe führen zu bedeutungslosen (oder schwer verständlichen) Daten, über Tabellen verteilten Daten (Sie müssen sich andere Tabellen ansehen, um die aktuelle Tabelle zu verstehen) und doppelten Daten.
Es wurde gesagt, dass Primärschlüssel so klein wie nötig sein sollten. Ich würde sagen, dass Schlüssel nur so groß wie nötig sein sollten. Das zufällige Hinzufügen bedeutungsloser Felder zu einer Tabelle sollte vermieden werden. Es ist noch schlimmer, einen Schlüssel aus einem zufällig hinzugefügten bedeutungslosen Feld zu machen, insbesondere wenn dadurch die Verknüpfungsabhängigkeit von einer anderen Tabelle zum Nicht-Primärschlüssel zerstört wird. Dies ist nur dann sinnvoll, wenn die Tabelle keine guten Kandidatenschlüssel enthält. Dieses Vorkommen ist jedoch sicherlich ein Zeichen für ein schlechtes Schemadesign, wenn es für alle Tabellen verwendet wird.
Es wurde auch gesagt, dass sich Primärschlüssel niemals ändern sollten, da das Aktualisieren eines Primärschlüssels immer nicht in Frage kommen sollte. Das Update entspricht jedoch dem Löschen und dem Einfügen. Nach dieser Logik sollten Sie niemals einen Datensatz mit einem Schlüssel aus einer Tabelle löschen und dann einen weiteren Datensatz mit einem zweiten Schlüssel hinzufügen. Durch Hinzufügen des Ersatzprimärschlüssels wird nicht die Tatsache entfernt, dass der andere Schlüssel in der Tabelle vorhanden ist. Das Aktualisieren eines Nicht-Primärschlüssels einer Tabelle kann die Bedeutung der Daten zerstören, wenn andere Tabellen durch einen Ersatzschlüssel von dieser Bedeutung abhängig sind (z. B. eine Statustabelle mit einem Ersatzschlüssel, dessen Statusbeschreibung von "Verarbeitet" in "Abgebrochen" geändert wurde 'würde definitiv die Daten beschädigen). Was immer nicht in Frage kommen sollte, ist die Zerstörung der Datenbedeutung.
Trotzdem bin ich dankbar für die vielen schlecht gestalteten Datenbanken, die heutzutage in Unternehmen existieren (bedeutungslose 1NF-Giganten mit Ersatzschlüsseldaten), denn das bedeutet, dass Menschen, die das richtige Datenbankdesign verstehen, unendlich viel Arbeit haben . Aber auf der traurigen Seite fühle ich mich manchmal wie Sisyphus, aber ich wette, er hatte einen verdammten 401k (vor dem Absturz). Halten Sie sich bei wichtigen Fragen zum Datenbankdesign von Blogs und Websites fern. Wenn Sie Datenbanken entwerfen, suchen Sie nach CJ Date. Sie können auch auf Celko für SQL Server verweisen, jedoch nur, wenn Sie zuerst die Nase halten. Beziehen Sie sich auf der Oracle-Seite auf Tom Kyte.