DB2 Auto erzeugte Spalte / ERSTELLT IMMER Für und Wider über Sequenz

StackOverflow https://stackoverflow.com/questions/1026936

  •  06-07-2019
  •  | 
  •  

Frage

Früher wurden wir mit ‚ ERSTELLT IMMER ‘, um die Werte für einen Primärschlüssel zu erzeugen. Aber jetzt wird vorgeschlagen, dass wir sollen, anstatt ‚ERSTELLT IMMER‘ zu verwenden, Verwendung Sequenz für den Wert des Primärschlüssels bevölkert. Was denken Sie, der Grund dieser Veränderung sein kann? Es dies nur eine Frage der Wahl?

Früher Code:

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER         NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE),
.
.
);

Nun ist es

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER ),
.
.
);

jetzt beim Einfügen, erzeugen Sie den Wert für TAB_P über Folge.

War es hilfreich?

Lösung

Ich neige dazu, Identitätsspalten verwenden mehr als Sequenzen, aber ich werde die beide für Sie vergleichen.

Die Sequenzen können Zahlen für jeden Zweck erzeugen, während eine Identitätsspalte streng auf eine Spalte in einer Tabelle gebunden ist.

Da eine Sequenz ein unabhängiges Objekt ist, kann es Zahlen für mehrere Tabellen erzeugen (oder etwas anderes), und ist nicht betroffen, wenn eine Tabelle gelöscht wird. Wenn eine Tabelle mit einer Identitätsspalte fallen gelassen wird, gibt es keine Erinnerung an das Wert war von dieser Identität Spalte zugewiesen letzte.

Eine Tabelle kann nur eine Identitätsspalte, so, wenn Sie möchten möchten, können mehrere aufeinanderfolgende Zahlen in verschiedenen Spalten in derselben Tabelle, Sequenz Objekte damit umgehen erfassen.

Die häufigste Voraussetzung für eine fortlaufende Nummer Generator in einer Datenbank ist es, einen technischen Schlüssel zu einer Reihe zuzuordnen, die von einer Identitätsspalte gut gehandhabt wird. Für kompliziertere Zahlenerzeugung braucht, bietet ein Sequenzobjekt mehr Flexibilität.

Andere Tipps

Dies könnte wohl sein ids in Fall zu behandeln, gibt es viele Löschungen auf dem Tisch liegen.

Für zB: Bei der Identität, wenn Ihre Ids 1 2 3

Nun, wenn Sie löschen Datensatz 3, wird Ihr Tisch 1 2

Und dann, wenn Ihr Einsatz ein neuer Rekord, werden die IDs sein 1 2 4

Im Gegensatz dazu, wenn Sie keine Identitätsspalt verwenden und erzeugen die ID-Code, dann nach dem neuen Einsatz löschen Sie id als max (id) + 1, so dass der IDs in Auftrag wird berechnet werden können 1 2 3

Ich kann mir keinen anderen Grund, warum eine Identitätsspalte sollte nicht verwendet werden.

Heres etwas, was ich auf der publib Website gefunden:

Vergleich von IDENTITY-Spalten und Sequenzen

Während es Ähnlichkeiten zwischen Identity-Spalten und Sequenzen sind, gibt es auch Unterschiede. Die Eigenschaften jeder kann verwendet werden, wenn Sie Ihre Datenbank und Anwendungen zu entwerfen.

Eine Identitätsspalte weist folgende Merkmale auf:

  • Eine Identitätsspalte kann definiert werden als Teil einer einzigen Tisch, wenn der Tisch geschaffen. Sobald eine Tabelle erstellt, Sie können es nicht ändern, ein hinzufügen Identitätsspalte. (Jedoch bestehende Identitätsspalte Eigenschaften könnte geändert werden.)
  • Eine Identitätsspalte erzeugt automatisch Werte für a Einzeltisch.
  • Wenn eine Identität Spalte als GENERATED definiert IMMER die verwendeten Werte sind immer vom Datenbankmanager generiert. Anwendungen sind nicht erlaubt bieten ihre eigenen Werte während der Veränderung des Inhalts des Tabelle.

Ein Sequenzobjekt hat die folgenden Eigenschaften:

  • Ein Sequenzobjekt ist eine Datenbank, Objekt, das einem nicht gebunden ist Tabelle.
  • A Sequenzobjekt erzeugt sequentielle Werte, die verwendet werden können, in jede SQL- oder XQuery-Anweisung.
  • Da ein Sequenzobjekt kann verwendet werden, von jeder Anwendung gibt es zwei Ausdrücke verwendet, die zur Steuerung Abrufen des nächsten Wertes in der angegebene Sequenz und der Wert vor der Anweisung generiert wird ausgeführt. Der vorherige Wert Ausdruck gibt die zuletzt erzeugten Wert für den angegebenen Sequenz für eine vorherige Aussage in der aktuellen Sitzung. Der nächste VALUE Ausdruck gibt die nächste Wert für die angegebene Sequenz. Das Verwendung dieser Ausdrücke erlaubt es dem gleicher Wert über mehrere verwendet werden SQL und XQuery-Anweisungen innerhalb mehrere Tabellen.

Während diese nicht alle Eigenschaften dieser beiden Elemente sind, werden diese Merkmale, die Sie helfen bei der Bestimmung, die auf Ihrem Datenbank-Design zu verwenden, abhängig und die Anwendungen, die Datenbank mit.

Ich weiß nicht, warum jemand überhaupt eine Identitätsspalte anstatt einer Sequenz verwenden würde. Sequenzen erreichen die gleiche Sache und sind weit mehr geradlinig. Identitätsspalten sind viel mehr Schmerz vor allem, wenn Sie wollen, entlädt und lädt die Daten in anderen Umgebungen zu tun. Ich nicht gehen in alle Unterschiede, wie die Informationen in den Handbüchern zu finden, aber ich kann Ihnen sagen, dass die DBA müssen fast immer zu jeder Zeit einlassen ein Benutzer Daten von einer Umgebung in eine andere migrieren, wenn eine Tabelle mit einer Identität beteiligt ist, weil es verwirrend für die Nutzer bekommen. Wir haben keine Probleme, wenn eine Sequenz verwendet wird. Wir ermöglichen den Benutzern, alle Schema-Objekte zu aktualisieren, damit sie ihre Sequenzen verändern können, wenn sie müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top