Konflikt-Äquivalenz

Zwei Schedules sind konflikt-äquivalent, wenn die Reihenfolge aller Aktionen in Konflikt in beiden Schedules gleich sind.

Um die
Konflikt-Äquivalenz zweier Schedules zu überprüfen, konstruiert man die Präzedenzgraphen für Aktionen in Konflikt (Konfliktgraphen) für beide Schedules. Beispielhaft ist hier der Konfliktgraph für den Schedule

r2(X) r1(X) w1(Z) w2(X) w2(Y) c2 w1(Y) c1 r3(X) r3(Y) w3(Z) c3

angegeben:



Für jede
Transaktion fügt man einen Knoten in den Konfliktgraph ein. Dann fügt man für jedes Paar von Aktionen in Konflikt eine Kante ein, die mit dem Namen des betroffenen Datenobjekts beschriftet ist.

Die sechs Kanten kommen wie folgt zu Stande:

Kante "X" von 1 nach 2, weil r1(X) vor w2(X) steht;
Kante "Y" von 2 nach 1, weil w2(Y) vor w1(Y) steht;
Kante "X" von 2 nach 3, weil w2(X) vor r3(X) steht;
Kante "Y" von 2 nach 3, weil w2(X) vor r3(X) steht;
Kante "Y" von 1 nach 3, weil w1(Y) vor r3(Y) steht und
Kante "Z" von 1 nach 3, weil w1(Z) vor w3(Z) steht.

Wenn die Konfliktgraphen der zwei Schedules gleich sind, heißen die Schedules konflikt-äquivalent.

Anstelle nun Konfliktgraphen für jeden seriellen
Schedule zu bilden und dann deren Gleichheit mit dem vorliegenden Graphen zu überprüfen, genügt zur Prüfung auf Konflikt-Serialisierbarkeit die Feststellung, ob der Konfliktgraph einen Kreis enthält oder nicht.

Genau dann, wenn der Konfliktgraph des Schedules keinen Kreis enthält, ist er konflikt-äquivalent zu mindestens einem seriellen
Schedule.

Wenn der Konfliktgraph keinen Kreis enthält, können die
Knoten des Graphen auf mindestens eine Weise topologisch sortiert werden. Die sich ergebende Reihenfolge bestimmt den seriellen Schedule, zu dem der gegebene Schedule konflikt-äquivalent ist.