20 Stimmen

Gründe, die gegen die Verwendung einer automatisch inkrementierenden Zahl für einen Primärschlüssel sprechen

Ich arbeite derzeit an der Datenbank eines anderen Unternehmens, in der die Primärschlüssel über eine Nachschlagetabelle generiert werden, die eine Liste von Tabellennamen und den zuletzt verwendeten Primärschlüssel enthält. Eine gespeicherte Prozedur erhöht diesen Wert und prüft, ob er eindeutig ist, bevor sie ihn an die aufrufende "insert"-SP zurückgibt.

Welche Vorteile hat die Verwendung einer solchen Methode (oder das Generieren einer GUID) anstelle der Verwendung der Identitäts-/Autonummer?

Ich spreche nicht von Primärschlüsseln, die tatsächlich etwas "bedeuten", wie ISBNs oder Produktcodes, sondern nur von den eindeutigen Bezeichnern.

Danke.

5voto

Mein Hauptproblem mit automatisch inkrementierenden Schlüsseln ist, dass sie haben keinen Sinn

Das ist ein Anforderung eines Primärschlüssels ist meiner Meinung nach, dass es keinen anderen Grund für seine Existenz gibt, als einen Datensatz zu identifizieren. Wenn er keine reale Bedeutung hat, dann gibt es auch keinen realen Grund, ihn zu ändern. Im Allgemeinen möchte man nicht, dass sich Primärschlüssel ändern, weil man dann die gesamte Datenbank durchsuchen und ersetzen muss oder Schlimmeres. Ich war überrascht, wie viele Dinge, von denen ich annahm, sie seien eindeutig und unveränderlich, sich Jahre später als falsch herausstellten.

5voto

Hier ist die Sache mit automatisch inkrementierenden Ganzzahlen als Schlüssel:

Sie MÜSSEN den Datensatz veröffentlicht haben, bevor Sie Zugang zu ihm erhalten. Das bedeutet, dass Sie, solange Sie den Datensatz nicht gebucht haben, z. B. keine Bezugsdatensätze vorbereiten können, die in einer anderen Tabelle gespeichert werden, oder einen von vielen anderen möglichen Gründen, warum es nützlich sein könnte, Zugriff auf die eindeutige ID des neuen Datensatzes zu haben, bevor Sie ihn buchen.

Die oben genannten Punkte sind für mich ausschlaggebend, ob ich mich für die eine oder die andere Methode entscheide.

3voto

bobwienholt Punkte 17040

Die Verwendung eines eindeutigen Identifikators würde es Ihnen ermöglichen, Daten aus zwei verschiedenen Datenbanken zusammenzuführen.

Vielleicht haben Sie eine Anwendung, die Daten in mehreren Datenbanken sammelt und dann zu verschiedenen Tageszeiten mit einer Hauptdatenbank "synchronisiert". In diesem Szenario müssten Sie sich keine Sorgen über Primärschlüsselkollisionen machen.

Möglicherweise möchten Sie auch wissen, wie die ID eines Datensatzes lautet, bevor Sie ihn tatsächlich erstellen.

2voto

Corey Trager Punkte 21897

Ein Vorteil ist, dass die Datenbank/SQL plattformübergreifend sein kann. Die SQL kann auf SQL Server, Oracle usw. genau dieselbe sein.

1voto

shyam Punkte 8656

Der einzige Grund, der mir einfällt, ist, dass der Code geschrieben wurde, bevor sequences erfunden wurden und der Code vergessen hat, das nachzuholen ;)

0 Stimmen

Richtig. Die Datenbank für eine unserer ältesten Anwendungen hatte den hausgemachten Ansatz mit einer Sequenztabelle (im Grunde das, was hier beschrieben wird), weil MySQL sie damals nicht unterstützte (oder möglicherweise fehlerhaft war). Die Tabellen gibt es immer noch, aber wir verwenden schon seit Jahren die richtige Lösung.

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