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 folgende Tabelle beschreibt die Customers-, Policy- und SalesReps-Datenbanktabellen, wie unter Partitionen mit Überlappung behandelt.
Tabelle | Beschreibung | ||
---|---|---|---|
Customers |
Alle Kunden, die mit der Firma Geschäfte machen. Die Customers-Tabelle hat die folgenden Spalten:
Die folgenden Anweisungen erstellen diese Tabelle:
|
||
Policy |
Eine Tabelle mit drei Spalten, die die Viele-zu-Viele-Beziehung zwischen Kunden und Handelsvertretern verkörpert. Die Tabelle "Policy" umfasst folgende Spalten:
Die folgenden Anweisungen erstellen diese Tabelle:
|
||
SalesReps |
Alle Handelsvertreter, die für die Firma arbeiten. Die SalesReps-Tabelle hat die folgenden Spalten:
Die folgenden Anweisungen erstellen diese Tabelle:
|
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 ) ); |
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.
Wahrung der referenziellen Integrität, wenn Zeilen Subskribenten neu zugeordnet werden
Die subscribe_by_remote-Option in Viele-zu-Viele-Beziehungen
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |