===== Szeregowalność =====


Plan, w którym każda transakcja jest wykonywana niepodzielnie, nazywa się planem
szeregowym (ang. serial schedule).  Każdy plan szeregowy składa się z ciągu
instrukcji należących do różnych transakcji, przy czym instrukcje jednej
transakcji występują w nim obok siebie.  Wobec tego dla zbioru n transakcji
istnieje n! różnych, poprawnych planów szeregowych. Poprawność każdego planu
szeregowego wynika stąd, że jest on równoważny niepodzielnemu wykonaniu
poszczególnych składowych transakcji w pewnym dowolnym porządku.  

Jeżeli zezwolimy na przeplatanie się instrukcji wchodzących w skład dwu
transakcji, to wynikowy plan przestaje być szeregowy.  Nieszeregowy plan
niekoniecznie musi pociągać za sobą błąd w ostatecznym wyniku wykonania (tzn. że
jest on równoważny planowi szeregowemu). Aby się przekonać, czy tak jest, musimy
zdefiniować pojęcie operacji konfliktowych (ang.  conflicting operations). 

Rozważmy plan P, w którym występują po sobie dwie operacje Oi i Oj należące
odpowiednio do transakcji Ti i Tj. Powiemy, że operacje Oi i Oj pozostają w
konflikcie, jeżeli mają dostęp do tych samych obiektów danych i co najmniej
jedna z nich jest operacją pisania. 

Jeśli dany plan P można przekształcić w plan szeregowy P' za pomocą ciągu zamian
bezkonfliktowych operacji, to mówimy, że plan P jest szeregowalny z
uwzględnieniem konfliktów (ang. conflict serializable). 

