Seriabilidade

O ideal é que as transações sejam serializáveis. As transações devem ser serializáveis se os resultados da execução de transações simultaneamente são os mesmos que os resultados da execução em série, ou seja, um após o outro. Não é importante qual transação é executada primeiro, apenas que o resultado não reflete nenhuma combinação das transações.

Por exemplo, suponha que a transação A multiplica valores de dados por 2 e a transação B adiciona 1 aos valores de dados. Agora suponha que haja dois valores de dados: 0 e 10. Se essas transações são executados uma após a outra, os novos valores serão 1 e 21 se a transação A for executado primeiro ou 2 e 22 se a transação B for executado primeiro. Mas e se a ordem na qual as duas transações são executados for diferente para cada valor? Se a transação A for executado primeiro no primeiro valor e a transação B for executado primeiro no segundo valor, os novos valores serão 1 e 22. Se essa ordem for invertida, os novos valores serão 2 e 21. As transações serão serializáveis se 1, 21 e 2, 22 são os únicos resultados possíveis. As transações não serão serializáveis se 1, 22 ou 2, 21 for um possível resultado.

Então, por que a serialização é desejável? Em outras palavras, por que é importante que pareça que uma transação termina antes do início da próxima transação? Considere o problema a seguir. Um funcionário está inserindo pedidos ao mesmo tempo em que um funcionário está enviando faturas. Suponha que o vendedor insira um pedido da Empresa X, mas não o confirma; o vendedor ainda está falando com o representante da Empresa X. O funcionário solicita uma lista de todos os pedidos abertos e descobre o pedido para a Empresa X e envia uma fatura. Agora, o representante da Empresa X decide que deseja alterar seu pedido, portanto, o vendedor o altera antes de comprometer a transação. A empresa X obtém uma fatura incorreta.

Se as transações do vendedor e do funcionário fossem serializáveis, esse problema nunca teria ocorrido. A transação do vendedor teria sido concluída antes do início da transação do funcionário, caso em que o funcionário teria enviado a fatura correta ou a transação do funcionário teria sido concluída antes do início da transação do funcionário, caso em que o funcionário não teria enviado uma fatura para a Empresa X.