Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » UltraLite - Datenbankverwaltung » UltraLite als MobiLink-Client » UltraLite-Clients » Eindeutigkeit des Primärschlüssels in UltraLite

 

GLOBAL AUTOINCREMENT-Spalten in UltraLite deklarieren

Sie können den Standardwert einer Spalte in einer UltraLite-Datenbank mit dem Typ GLOBAL AUTOINCREMENT deklarieren. Bevor Sie diese Spalten-IDs autoinkrementieren können, müssen Sie die globale Datenbank-ID für die entfernte UltraLite-Datenbank einrichten.

Vorsicht

Global autoincrement-Spaltenwerte, die über die MobiLink-Synchronisation heruntergeladen wurden, aktualisieren den global autoincrement-Wertzähler nicht. Daher kann ein Fehler auftreten, wenn ein MobiLink-Client einen Wert einfügt, der im Wertebereich eines anderen Clients liegt. Um dieses Problem zu vermeiden, stellen Sie sicher, dass jede Kopie Ihrer UltraLite-Anwendung nur Werte in ihrem eigenen Wertebereich einfügt.

Die Datenbankoption global_database_id erlaubt Ihnen, den Wert in Ihrer UltraLite-Datenbank einzustellen. Wenn Sie das Deployment von UltraLite durchführen, müssen Sie jeder Datenbank eine andere Identifizierungsnummer zuordnen.

UltraLite stellt dann Standardwerte für die Spalte bereit, die aus dem Wertebereich stammen, der durch die Nummer der UltraLite-Datenbank bestimmt wird.

UltraLite folgt diesen Regeln:

  • Wenn die Spalte keine Werte aus dem aktuellen Wertebereich enthält, ist der erste Standardwert pn + 1, wobei p für die Partitionsgröße und n für den Wert der globalen ID-Nummer steht.

  • Wenn die Spalte bereits Werte im aktuellen Wertebereich enthält, die alle kleiner als p(n + 1) sind, wird der nächste Standardwert um eins größer als der bisherige Höchstwert in diesem Bereich.

  • Standardspaltenwerte sind von Werten, die sich außerhalb der aktuellen Partition befinden, nicht betroffen, d.h. von Nummern kleiner als pn+ 1 oder größer als p(n + 1). Solche Werte können vorhanden sein, wenn sie von einer anderen Datenbank über MobiLink-Synchronisation repliziert wurden.

    Wenn Sie Ihrer UltraLite-Datenbank beispielsweise die globale ID 1 zugeordnet haben und die Partitionsgröße 1000 ist, werden die Standardwerte in dieser Datenbank aus dem Bereich 1001–2000 ausgewählt. Eine andere Kopie der Datenbank mit der Kennnummer 2 liefert Standardwerte für dieselbe Spalte im Bereich 2001–3000.

  • Da Sie die globale ID-Nummer nicht auf einen negativen Wert setzen können, sind die Werte in der GLOBAL AUTOINCREMENT-Spalte immer positiv. Die maximale Identifizierungsnummer wird nur durch den Spaltendatentyp und die Partitionsgröße beschränkt.

  • Wenn Sie keinen globalen ID-Wert einrichten oder die Werte aus der Partition erschöpft sind, wird NULL in die Spalte eingefügt. Falls NULL nicht zulässig ist, bewirkt der Versuch einer Einfügung in die Zeile einen Fehler.

Wenn die verfügbaren Werte für die als GLOBAL AUTOINCREMENT deklarierten Spalten fast oder vollständig aufgebraucht sind, müssen Sie eine neue globale Datenbank-ID festlegen. UltraLite wählt GLOBAL AUTOINCREMENT-Werte aus der Partition, die durch die globale ID-Nummer angegeben wird, aber nur bis der maximale Wert erreicht ist. Wenn die Werte erschöpft sind, beginnt UltraLite mit der Generierung von NULL. Durch die Zuweisung einer neuen globalen Datenbank-ID-Nummer ermöglichen Sie es UltraLite, geeignete Werte aus einem anderen Wertebereich zu benutzen.

Eine Methode für die Auswahl einer neuen globalen Datenbank-ID besteht darin, einen Pool von nicht verwendeten globalen Datenbank-ID-Werten einzurichten. Dieser Pool wird auf dieselbe Weise wie ein Pool von Primärschlüsseln verwaltet.

Tipp

Die UltraLite-APIs bieten die Möglichkeit, den Anteil der bereits verwendeten Nummern festzustellen. Der Rückgabewert ist ein SHORT-Datentyp im Bereich 0–100, der die Prozentwerte der bislang verwendeten Anzahl von Nummern angibt. Beispiel: Der Wert "99" zeigt an, dass nur sehr wenige noch nicht verwendete Nummern übrig sind und der Datenbank eine neue Identifizierungsnummer zugewiesen werden sollte. Die Methode, diese Identifizierungsnummer festzulegen, hängt davon ab, welche Programmierschnittstelle Sie verwenden.

 Siehe auch