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

 

Überlappungspartitionen verwenden

Eine Datenpartitionierung überlappt, wenn die entfernten Datenbanken Daten gemeinsam nutzen. Beispiel: Handelsvertreter haben teilweise dieselben Kunden.

Nehmen wir an, dass drei Tabellen Informationen über die Beziehungen zwischen Handelsvertretern und Kunden speichern: Customers, Policy und SalesReps. Jeder Handelsvertreter betreut mehrere Kunden, und einige Kunden machen mit mehr als einem Handelsvertreter Geschäfte. Die Policy-Tabelle hat Fremdschlüssel zur Customers-Tabelle und zur SalesReps-Tabelle. Es gibt eine Viele-zu-Viele-Beziehung zwischen Customers und SalesReps.

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

Die folgende Tabelle beschreibt die Customers-, Policy- und SalesReps-Datenbanktabellen, wie unter Überlappungspartitionen verwenden behandelt.

Tabelle Beschreibung

Customers

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

  • cust_key   Eine Primärschlüsselspalte, die einen Bezeichner für jeden Kunden enthält.

  • name   Eine Spalte, die den Namen jedes Kunden enthält.

Die folgenden Anweisungen erstellen diese Tabelle:

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

Policy

Eine Tabelle mit drei Spalten, die die Viele-zu-Viele-Beziehung zwischen Kunden und Handelsvertretern verkörpert. Die Tabelle "Policy" umfasst folgende Spalten:

  • policy_key   Eine Primärschlüsselspalte, die einen Bezeichner für die Geschäftsbeziehung enthält

  • cust_key   Eine Spalte mit einem Fremdschlüssel für den Kundenvertreter in einer Geschäftsbeziehung

  • rep_key   Eine Spalte mit einem Fremdschlüssel für den Handelsvertreter in einer Geschäftsbeziehung

Die folgenden Anweisungen erstellen diese Tabelle:

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

SalesReps

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

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

  • name   Der Name jedes Handelsvertreters

Die folgenden Anweisungen erstellen diese Tabelle:

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

Die Viele-zu-Viele-Beziehung zwischen Kunden und Handelsvertretern stellt eine Herausforderung für die korrekte gemeinsame Nutzung der Informationen dar.

Handelsvertreter müssen eine Publikation subskribieren, die die folgernden Informationen bereitstellt:

  • Die gesamte SalesReps-Tabelle   Es gibt keine Qualifizierer für diesen Artikel, daher wird die gesamte SalesReps-Tabelle in die Publikation aufgenommen.
    ...
       TABLE SalesReps,
    ...

  • Diejenigen Zeilen aus der Policy-Tabelle, die die Geschäftsbeziehungen des Handelsvertreters enthalten, der die Daten subskribiert   Dieser Artikel verwendet einen SUBSCRIBE BY-Subskriptionsausdruck, um eine Spalte zu bestimmen, die die Daten unter den Handelsvertretern aufteilt:
    ...
       TABLE Policy
       SUBSCRIBE BY rep_key,
    ...

    Der Subskriptionsausdruck stellt sicher, dass jeder Handelsvertreter nur jene Zeilen der Tabelle erhält, bei denen der Wert der rep_key-Spalte dem Wert entspricht, der in der Subskription angeführt ist.

    Die Partitionierung der Policy-Tabelle ist disjunkt: Es gibt keine Zeilen, die von mehr als einem Subskribenten genutzt werden.

  • Diejenigen Zeilen aus der Customers-Tabelle, die Kunden auflisten, die Geschäftsbeziehungen mit dem Handelsvertreter unterhalten, der die Daten subskribiert   Die Customers-Tabelle hat keine Referenz zum Handelsvertreter-Wert, der in den Subskriptionen verwendet wird, um die Daten aufzuteilen. Dieses Problem kann gelöst werden, indem eine Unterabfrage in der Publikation verwendet wird.

    Jede Zeile in der Customers-Tabelle kann sich auf viele Zeilen in der SalesReps-Tabelle beziehen und von vielen Handelsvertreter-Datenbanken gemeinsam genutzt werden. Das bedeutet, dass es überlappende Subskriptionen gibt.

    Ein Subskriptionsausdruck mit einer Unterabfrage wird verwendet, um die Partition zu definieren. Der Artikel wird folgendermaßen festgelegt:

    ...
       TABLE Customers SUBSCRIBE BY (
          SELECT rep_key
          FROM Policy
          WHERE Policy.cust_key =
             Customers.cust_key
       ),
    ...

    Die Partitionierung der Customers-Tabelle ist nicht disjunkt: Es gibt Zeilen, die von mehr als einem Subskribenten genutzt werden.

Dir folgende Anweisung erstellt die vollständige Publikation:

CREATE PUBLICATION SalesRepData (
   TABLE SalesReps,
   TABLE Policy SUBSCRIBE BY rep_key,
   TABLE Customers SUBSCRIBE BY (
      SELECT rep_key FROM Policy
      WHERE Policy.cust_key =
         Customers.cust_key
   )
);
Mehrwertige Unterabfragen in Publikationen

Die Unterabfrage im Customers-Artikel gibt eine einzelne Spalte (rep_key) in der Ergebnismenge zurück, kann aber mehrere Zeilen ausgeben, die allen jenen Handelsvertretern entsprechen, die mit diesem bestimmten Kunden Geschäfte machen. Wenn ein Subskriptionsausdruck mehrere Werte hat, wird die Zeile an alle Subskribenten repliziert, deren Subskription einem der Werte entspricht. Diese Fähigkeit, mehrwertige Subskriptionsausdrücke zu haben, ermöglicht eine überlappende Partitionierung einer Tabelle.


Referenzielle Integrität bewahren, wenn Zeilen Subskribenten neu zugewiesen werden
Die "subscribe_by_remote"-Option in Viele-zu-Viele-Beziehungen verwenden