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

SQL Anywhere 11.0.1 (Deutsch) » SQL Remote » SQL Remote-Replikationsplanung » SQL Remote-Replikation planen und einrichten

 

Disjunkte Datenpartitionen verwenden

Eine Datenpartitionierung ist disjunkt, wenn die entfernten Datenbanken keine Daten gemeinsam nutzen. Beispiel: Jeder Handelsvertreter hat seinen eigenen Kundenstamm und teilt keine Kunden mit anderen Handelsvertretern.

Im folgenden Beispiel speichern drei Tabellen Informationen über die Interaktionen zwischen Handelsvertretern und Kunden: Customers, Contacts und SalesReps. Jeder Handelsvertreter bedient mehrere Kunden. Bei manchen Kunden gibt es einen einzigen Kontakt, während andere Kunden mehrere Kontakte haben.

Die Contacts-Tabelle hat einen Fremdschlüssel zur Customers-Tabelle. Die Customers-Tabelle hat einen Fremdschlüssel zur SalesReps-Tabelle.
Beschreibung der Contacts-, Customers- und SalesReps-Tabellen

Die folgende Tabelle beschreibt die Customers-, Contacts- und SalesReps-Datenbanktabellen, wie unter Disjunkte Datenpartitionen verwenden beschrieben.

Tabelle Beschreibung Tabellendefinition

Contacts

Alle einzelnen Kontakte, die mit der Firma Geschäfte machen. Jeder Kontakt gehört einem einzigen Kunden. Die Contacts-Tabelle enthält folgende Spalten:

  • contact_key   Ein Bezeichner für jeden Kontakt. Dies ist der Primärschlüssel.

  • name   Der Name jedes Kontakts

  • cust_key   Ein Bezeichner für den Kunden, dem der Kontakt gehört. Dies ist ein Fremdschlüssel zur Customers-Tabelle.

CREATE TABLE Contacts (
   contact_key  CHAR(12) NOT NULL,
   name  CHAR(40) NOT NULL,
   cust_key  CHAR(12) NOT NULL,
   FOREIGN KEY  REFERENCES Customers,
   PRIMARY KEY  (contact_key)
);

Customers

Alle Kunden, die mit der Firma Geschäfte machen. Die Customers-Tabelle enthält die folgenden Spalten:

  • cust_key   Ein Bezeichner für jeden Kunden. Dies ist der Primärschlüssel.

  • name   Der Name jedes Kunden

  • rep_key   Ein Bezeichner für den Handelsvertreter in einer Geschäftsbeziehung. Dies ist ein Fremdschlüssel zur Tabelle "SalesReps".

CREATE TABLE Customers (
   cust_key CHAR(12) NOT NULL,
   name CHAR(40) NOT NULL,
   rep_key CHAR(12) NOT NULL,
   FOREIGN KEY REFERENCES SalesReps,
   PRIMARY KEY (cust_key)
);

SalesReps

Alle Handelsvertreter, die für die Firma arbeiten. Die SalesReps-Tabelle enthält die folgenden Spalten:

  • rep_key   Ein Bezeichner für jeden Handelsvertreter. Dies ist der Primärschlüssel.

  • name   Der Name jedes Handelsvertreters

CREATE TABLE SalesReps (
   rep_key CHAR(12) NOT NULL,
   name CHAR(40) NOT NULL,
   PRIMARY KEY (rep_key)
);

Ein Handelsvertreter muss eine Publikation subskribieren, die die folgenden Informationen bereitstellt:

  • Eine Liste aller Handelsvertreter, die für die Firma arbeiten   Die folgende Anweisung erstellt eine Publikation, die die gesamte SalesRep-Tabelle publiziert:
    CREATE PUBLICATION SalesRepData (
       Table SalesReps ...)
    );  

  • Eine Liste der ihm zugeordneten Kunden    Diese Informationen sind in der Customers-Tabelle verfügbar. Die folgende Anweisung erstellt eine Publikation, die die Customers-Tabelle publiziert, die die Zeilen enthält, die mit dem Wert der rep_key-Spalte in der Customers-Tabelle übereinstimmen:
    CREATE PUBLICATION SalesRepData (
       TABLE Customers SUBSCRIBE BY rep_key ...
    );

  • Eine Liste der Kontaktinformationen für seine zugeordneten Kunden    Diese Informationen sind in der Contacts-Tabelle verfügbar. Die Contacts-Tabelle muss unter den Handelsvertretern aufgeteilt werden, aber es gibt keine Referenz zum rep_key-Wert in der SalesRep-Tabelle. Um dieses Problem zu lösen, verwenden Sie eine Unterabfrage im Contacts-Artikel, die die rep_key-Spalte der Customers-Tabelle referenziert.

    Die folgende Anweisung erstellt eine Publikation, die die Contacts-Tabelle mit den Zeilen enthält, die eine Referenz auf die rep_key-Spalte in der Customers-Tabelle enthalten:

    CREATE PUBLICATION SalesRepData ( ...
       TABLE Contacts
          SUBSCRIBE BY (SELECT rep_key
             FROM Customers
             WHERE Contacts.cust_key = Customers.cust_key )
    );

    Eine Zeile in der Customers-Tabelle hat den cust_key-Wert in der aktuellen Zeile der Contacts-Tabelle, und die WHERE-Klausel in der SUBSCRIBE BY-Anweisung stellt sicher, dass die Unterabfrage nur einen einzigen Wert zurückgibt.

Dir folgende Anweisung erstellt die vollständige Publikation:

CREATE PUBLICATION SalesRepData (
   TABLE SalesReps
   TABLE Customers
      SUBSCRIBE BY rep_key
   TABLE Contacts
      SUBSCRIBE BY (SELECT rep_key
         FROM Customers
         WHERE Contacts.cust_key = Customers.cust_key )
);

BEFORE UPDATE-Trigger verwenden