Você está na página 1de 23

3

SISTEMA DE ENSINO PRESENCIAL CONECTADO


NOME DO CURSO

CLERISTON DO C. M. NORDER

PRODUÇÃO TEXTUAL DE BANCO DE DADOS II

Londrina
2010
4

CLERISTON DO C. M. NORDER

PRODUÇÃO TEXTUAL DE BANCO DE DADOS II

Trabalho de Análise de Sistemas I, apresentado à


Universidade Norte do Paraná - UNOPAR, como
requisito parcial para a obtenção de média bimestral na
disciplina de Análise de Sistemas I

Orientador: Prof. Roberto Yukio Nishimura.

Londrina
2010
5

SUMÁRIO

1 MODELO RELACIONAL NORMALIZADO................................................................6


2 Padrão SQL..............................................................................................................13
3 PROCESSAMENTO DE TRANSAÇÕES................................................................18
4 CONTROLE DE CONCORRÊNCIA.........................................................................21
REFERÊNCIAS..........................................................................................................25
6

1 MODELO RELACIONAL NORMALIZADO

DEFINIÇÕES BÁSICAS:
MRN pode ser definido como um modelo de dados no qual:
Os conjuntos de dados são representados por TABELAS DE VALORES;
Cada tabela é denominada RELAÇÃO;
Cada tabela é organizada em linhas e colunas;
O número de colunas é denominado GRAU DA RELAÇÃO;
Cada linha ( registro ) é denominada TUPLA;
O conjunto de valores do qual são retirados os elementos das células de uma coluna
é denominada DOMÍNIO.

PROPRIEDADES DO MRN

Cada célula só pode conter, no máximo, um único valor ( podendo ser vazia );
do ponto de vista do usuário, a ordem das linhas é irrelevante;
Não há duas linhas iguais;
Cada coluna tem um nome;
Duas colunas distintas devem Ter nomes diferentes;
Usando-se os nomes para referência às colunas, a ordem destas é é irrevelante;
Cada relação recebe um nome, distinto do nome de qualquer outra relação;
Os valores de uma coluna são retirados todos um mesmo conjunto, denominado
domínio;
Duas ou mais colunas distintas podem ser definidas sobre o mesmo domínio.

ESQUEMA DE UMA RELAÇÃO

É descrito pelo identificador da relação e pelo conjunto de nomes de suas colunas,


conforme:

R ( C1, C2, . . . , Cn )

CARACTERÍSTICAS ESSENCIAIS DO MODELO RELACIONAL

ITENS DE BUSCA:
- Uma relação pode Ter vários itens de busca;
- Um item de busca pode ser composto ( englobar várias colunas concatenadas
numa ordem especificada pelo projetista ).

CHAVES

Dada uma relação R, dizemos que uma coluna D, ou uma concatenação D de


colunas de R é uma chave R se D satisfazer as seguintes restrições:

a- D é um item de busca;
b- D não é vazio para nenhuma linha de R;
c- Dado um valor de D, existe apenas uma linha de R com esse valor em D.
7

(restrições 2 e 3: restrição de integridade de identidade)

INDICAÇÃO DE CHAVES NOS ESQUEMAS

Sublinham-se colunas que as compõe. Se a chave é composta de mais de uma


coluna, indica - se a ordem de concatenação (se não for da esquerda para a direita),
e unem - se os grifos.

CHAVE:
Item de busca, acrescido da restrição de integridade de identidade.

ITEM DE BUSCA:
Produz uma organização interna especial dos arquivos, de forma a se obter maior
eficiência na busca segundo valores ou condições sobre valores dessas colunas.

LIGAÇÕES

Sejam duas relações R1 e R2 do MRN.


Diz - se que existe uma ligação entre R1 e R2 através das colunas ( ou sequência
de colunas ) C1 de R1 e C2 de R2 se:
a- C1 e C2 têm os mesmos domínios;
b- Existem, em alguns instantes, valores comuns em C1 e C2.

Se uma linha L1 de R1 tem em C1 o mesmo valor que uma linha L2 de R2 em C2,


diz - se que L1 e L2 são LINHAS LIGADAS.

LINGUAGENS DE MANIPULAÇÃO

ALGEBRA RELACIONAL
As operações com os dados são expressas por meio de expressões algébricas cujos
operandos são relações.

CÁLCULO RELACIONAL
Definem - se às relações usando - se predicados da lógica, na mesma linha das
definições usuais de conjuntos.

ÁLGEBRA RELACIONAL

Resultado de uma operação de álgebra relacional é sempre uma nova relação.

OPERAÇÕES DE ALGEBRA RELACIONAL

Operações fundamentais (suficientes para expressar qualquer consulta em álgebra


relacional):
Seleção
Projeção
Produtos cartesiano
8

União
Diferença

Seleção e projeção são chamadas operações UNÁRIAS, uma vez que operam em
uma relação.
Produto cartesiano, união e diferença são chamadas operações BINÁRIAS, uma vez
que operam em pares de relações.

- Operações adicionais ( não acrescentam qualquer poder à álgebra relacional,


porém simplificam consultas comuns ):

Intersecção
Junção theta
Junção natural
Divisão

SELEÇÃO
Seleciona tuplas que satisfazem um dado predicado.

Korth: Predicado ( Relação Argumento )

Furtado: Relação Argumento ( predicado )

PROJEÇÃO

O resultado T é uma relação que contém apenas as colunas indicadas.

Korth: atributos ( Relação Argumento )

Furtado: Relação Argumento [ atributos ]

As tuplas em duplicata que seriam criadas, por não serem considerados os outros
domínios, são eliminadas.

PRODUTO CARTESIANO

A relação T conterá todas as tuplas de R1 concatenadas com todas as tuplas de R2.

A resultante nem sempre apresenta combinações reais.


9

UNIÃO

O resultado T é uma relação que contém todas as tuplas de R1 e R2, sem repetição
(isto é, todas as tuplas que aparecem em uma ou nas duas relações)

As repetições ou duplicatas ( na mesma relação ) são proibidas no modelo relacional


porque uma relação ) é definida como conjunto de tuplas e, em conjuntos, cada
elemento só pode aparecer uma vez.

Para uma operação R U S ser legal, é necessário que duas condições sejam
asseguradas:
- As relações R e S devem ser do mesmo grau, isto é, devem possuir o mesmo
número de atributos.
- Os domínios de cada atributo devem ser os mesmos.

DIFERENÇA

O resultado T é uma relação que contém as tuplas que aparecem em R1 mas em R2


( as relações devem ser união - compatíveis

INTERSECÇÃO

O resultado T é uma relação que contém apenas as tuplas que aparecem em R1 e


R2. As relações devem ser união - compatíveis.

Na expressão de álgebra relacional de use a operação intersecção pode ser


substituída por um par de operações de diferença, como segue:

JUNÇÃO

O resultado T é uma relação que contém, concatenadas, as tuplas de R1 e R2 que


satisfazem uma comparação sobre os domínios indicados.

DIVISÃO

O resultado T é uma relação que contém apenas as tuplas da relação dividendo que
contenham todo o domínio da coluna indicada da relação divisor. A relação
resultante conterá apenas as colunas complementares à coluna dividendo.

ESQUEMA DA OPERAÇÃO:

- Agrupam -se as tuplas de N que têm o mesmo valor para as colunas


complementares à coluna dividendo ( cn ).
- Cria-se a projeção DCcd].
10

- Verificam - se quais os grupos de tuplas de N que que contenham todos os


valores de cd na coluna cn.
- Copia -se na resultante T as colunas complementares da tupla que satisfaz a
condição anterior.

MODULO VIII - NORMALIZAÇÃO DE RELAÇÕES

NORMALIZAÇÃO DE RELAÇÕES

Técnica para simplificação de relações com o fito de evitar as anomalias de


atualização.

ANOMALIAS DE ATUALIZAÇÃO

NA INCLUSÃO:
Repetição da informação.

NA ALTERAÇÃO:
Alteração de várias tuplas.

NA EXCLUSÃO:
Perda de informações.

PRIMEIRA FORMA NORMAL

Uma relação está na primeira forma normal (1FN) se não possuir grupos de
repetição ( ou seja, se todos atributos na relação estiveram baseados em domínios
simples ).

SOLUÇÃO: Desmembrar a relação em uma ou mais relações sem grupos de


repetição.
Exemplo:
PEDIDO ( NÚMERO DO PEIDO, DATA DO PEDIDO, DATA DA ENTREGA, CGC
DO CLIENTE, NOME DO CLIENTE, ENDEREÇO DO CLIENTE, ( CÓDIGO DO
ITEM, NOME DO ITEM, QUANTIDADE, PREÇO UNITÁRIO, PREÇO TOTAL ),
TOTAL DO PEDIDO )

Para que a relação "PEDIDO" esteja na 1FN é necessário desmembra-la em duas


relações.

PEDIDO ( NÚMERO DO PEDIDO, DATA DO PEDIDO, DATA DA ENTREGA, CGC


DO CLIENTE, NOME DO CLIENTE, ENDEREÇO DO CLIENTE, TOTAL DO
PEDIDO )

LINHA DO PEDIDO ( NÚMERO DO PEDIDO, CÓDIGO DO ITEM, QUANTIDADE,


PREÇO UNITÁRIO, PREÇO TOTAL )
11

DEPENDÊNCIA FUNCIONAL

Um domínio ( ou sequência de domínios B depende funcionalmente de um domínio (


ou sequência de domínios ) A se para cada valor a de A só existe um valor que
possa aparecer junto com a nas tuplas da relação sendo considerada.

NOTAÇÃO:

F:A-B
B é funcionalmente dependente de A, ou
A determina funcionalmente B

GENERALIZAÇÃO:

F : A1, . . . , Na - B
Um conjunto de domínios A1, . . . , Na determina funcionalmente B

Diz-se que B é parcialmente dependente de A1, . . . , An se nem todos os domínios


A1, . . . , Na são necessários para determinar B

SEGUNDA FORMA NORMAL

Uma relação está na Segunda forma normal (2FN) se:


a) Estiver na 1FN, e,
b) Se todos atributos que não existe são chaves são dependentes de toda a chave
e não apenas de parte dela.

SOLUÇÃO: Desmembrar a relação de modo que não haja atributo não chave
dependente de apenas parte da chave.

LINHA DO PEDIDO ( NÚMERO DO PEDIDO, CÓDIGO DO ITEM, QUANTIDADE,


PREÇO TOTAL )

ITEM ( CÓDIGO DO ITEM, NOME DO ITEM, PREÇO UNITÁRIO )

DEPENDÊNCIA TRANSITIVA

Se A, B e C são domínios, diz - se que C é transitivamente dependente de A se:

A - B, B - C e B- A

TERCEIRA FORMA NORMAL

Uma relação está na terceira forma normal ( 3FN ) se:


12

a) Estiver na 2FN, e,
b) Nenhum atributo não - principal está com dependência transitiva em relação a
alguma chave ( ou seja , se todos atributos não-chaves são independentes entre
si )

SOLUÇÃO:

PEDIDO ( NÚMERO DO PEDIDO, DATA DO PEDIDO, DATA DA ENTREGA, CGC


DO CLIENTE, TOTAL DO PEDIDO )

CLIENTE ( CGC DO CLIENTE, NOME DO CLIENTE, ENDEREÇO DO CLIENTE )

LINHA DO PEDIDO ( NÚMERO DO PEDIDO, CÓDIGO DO ITEM, QUANTIDADE,


PREÇO TOTAL )
13

2 PADRÃO SQL

Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL,


é uma linguagem de pesquisa declarativa para banco de dados relacional (base de
dados relacional). Muitas das características originais do SQL foram inspiradas na
álgebra relacional.

O SQL foi desenvolvido originalmente no início dos anos 70 nos laboratórios


da IBM em San Jose, dentro do projeto System R, que tinha por objetivo demonstrar
a viabilidade da implementação do modelo relacional proposto por E. F. Codd. O
nome original da linguagem era SEQUEL, acrônimo para "Structured English Query
Language" (Linguagem de Consulta Estruturada em Inglês) [1], vindo daí o fato de,
até hoje, a sigla, em inglês, ser comumente pronunciada "síquel" ao invés de "és-kiú-
él", letra a letra. No entanto, em português, a pronúncia mais corrente é a letra a
letra: "ésse-quê-éle".

A linguagem SQL é um grande padrão de banco de dados. Isto decorre da


sua simplicidade e facilidade de uso. Ela se diferencia de outras linguagens de
consulta a banco de dados no sentido em que uma consulta SQL especifica a forma
do resultado e não o caminho para chegar a ele. Ela é uma linguagem declarativa
em oposição a outras linguagens procedurais. Isto reduz o ciclo de aprendizado
daqueles que se iniciam na linguagem.

Embora o SQL tenha sido originalmente criado pela IBM, rapidamente


surgiram vários "dialectos" desenvolvidos por outros produtores. Essa expansão
levou à necessidade de ser criado e adaptado um padrão para a linguagem. Esta
tarefa foi realizada pela American National Standards Institute (ANSI) em 1986 e ISO
em 1987.

O SQL foi revisto em 1992 e a esta versão foi dado o nome de SQL-92. Foi
revisto novamente em 1999 e 2003 para se tornar SQL:1999 (SQL3) e SQL:2003,
respectivamente. O SQL:1999 usa expressões regulares de emparelhamento,
queries recursivas e gatilhos (triggers). Também foi feita uma adição controversa de
tipos não-escalados e algumas características de orientação a objeto. O SQL:2003
introduz características relacionadas ao XML, seqüências padronizadas e colunas
com valores de auto-generalização (inclusive colunas-identidade).

Tal como dito anteriormente, o SQL, embora padronizado pela ANSI e ISO,
possui muitas variações e extensões produzidos pelos diferentes fabricantes de
sistemas gerenciadores de bases de dados. Tipicamente a linguagem pode ser
migrada de plataforma para plataforma sem mudanças estruturais principais.

Outra aproximação é permitir para código de idioma procedural ser embutido


e interagir com o banco de dados. Por exemplo, o Oracle e outros incluem Java na
base de dados, enquanto o PostgreSQL permite que funções sejam escritas em
Perl, Tcl, ou C, entre outras linguagens.

Palavras-chaves em SQL
14

[editar] DML - Linguagem de Manipulação de Dados

Primeiro há os elementos da DML (Data Manipulation Language - Linguagem de


Manipulação de Dados). A DML é um subconjunto da linguagem usada para inserir,
atualizar e apagar dados.

* INSERT é usada para inserir um registro (formalmente uma tupla) a uma tabela
existente.

* UPDATE para mudar os valores de dados em uma ou mais linhas da tabela


existente.

* DELETE permite remover linhas existentes de uma tabela.

[editar] DDL - Linguagem de Definição de Dados

O segundo grupo é a DDL (Data Definition Language - Linguagem de Definição de


Dados). Uma DDL permite ao utilizador definir tabelas novas e elementos
associados. A maioria dos bancos de dados de SQL comerciais tem extensões
proprietárias no DDL.

Os comandos básicos da DDL são poucos

* CREATE cria um objeto (uma Tabela, por exemplo) dentro da base de dados.

* DROP apaga um objeto do banco de dados.

Alguns sistemas de banco de dados usam o comando ALTER, que permite ao


usuário alterar um objeto, por exemplo, adicionando uma coluna a uma tabela
existente.

outros comandos DDL:

* ALTER TABLE

* CREATE INDEX

* ALTER INDEX

* DROP INDEX

* CREATE VIEW

* DROP VIEW

[editar] DCL - Linguagem de Controle de Dados

O terceiro grupo é o DCL (Data Control Language - Linguagem de Controle de


Dados). DCL controla os aspectos de autorização de dados e licenças de usuários
para controlar quem tem acesso para ver ou manipular dados dentro do banco de
15

dados.

Duas palavras-chaves da DCL:

* GRANT - autoriza ao usuário executar ou setar operações.

* REVOKE - remove ou restringe a capacidade de um usuário de executar


operações.

outros comandos DCL:

* ALTER PASSWORD

* CREATE SYNONYM

[editar] DTL - Linguagem de Transação de Dados

* BEGIN WORK (ou START TRANSACTION, dependendo do dialeto SQL) pode ser
usado para marcar o começo de uma transação de banco de dados que pode ser
completada ou não.

* COMMIT envia todos os dados das mudanças permanentemente.

* ROLLBACK faz com que as mudanças nos dados existentes desde que o último
COMMIT ou ROLLBACK sejam descartadas.

COMMIT e ROLLBACK interagem com áreas de controle como transação e locação.


Ambos terminam qualquer transação aberta e liberam qualquer cadeado ligado a
dados. Na ausência de um BEGIN WORK ou uma declaração semelhante, a
semântica de SQL é dependente da implementação.
[editar] DQL - Linguagem de Consulta de Dados

Embora tenha apenas um comando, a DQL é a parte da SQL mais utilizada. O


comando SELECT permite ao usuário especificar uma consulta ("query") como uma
descrição do resultado desejado. Esse comando é composto de várias cláusulas e
opções, possibilitando elaborar consultas das mais simples às mais elaboradas.
[editar] Cláusulas

As cláusulas são condições de modificação utilizadas para definir os dados que


deseja selecionar ou modificar em uma consulta.

FROM - Utilizada para especificar a tabela que se vai selecionar os registros.

WHERE – Utilizada para especificar as condições que devem reunir os registros que
serão selecionados.

GROUP BY – Utilizada para separar os registros selecionados em grupos


específicos.

HAVING – Utilizada para expressar a condição que deve satisfazer cada grupo.
16

ORDER BY – Utilizada para ordenar os registros selecionados com uma ordem


especifica.

DISTINCT – Utilizada para selecionar dados sem repetição.


[editar] Operadores Lógicos

AND – E lógico. Avalia as condições e devolve um valor verdadeiro caso ambos


sejam corretos.

OR – OU lógico. Avalia as condições e devolve um valor verdadeiro se algum for


correto.

NOT – Negação lógica. Devolve o valor contrário da expressão.


[editar] Operadores Relacionais

< – Menor que

> – Maior que

<> – Diferente de

<= – Menor ou Igual que

>= – Maior ou Igual que

= – Igual a

BETWEEN – Utilizado para especificar um intervalo de valores.

LIKE – Utilizado na comparação de um modelo e para especificar registros de um


banco de dados."Like" + extensão % vai significar buscar todos resultados com o
mesmo início da extensão.
[editar] Funções de Agregação

As funções de soma se usam dentro de uma cláusula SELECT em grupos de


registros para devolver um único valor que se aplica a um grupo de registros.

AVG – Utilizada para calcular a média dos valores de um campo determinado.

COUNT – Utilizada para devolver o número de registros da seleção.

SUM – Utilizada para devolver a soma de todos os valores de um campo


determinado.

MAX – Utilizada para devolver o valor mais alto de um campo especificado.

MIN – Utilizada para devolver o valor mais baixo de um campo especificado.


[editar] Sistemas de Banco de Dados que usam SQL
17

* Apache Derby
* Caché
* DB2
* Firebird
* HSQLDB , banco de dados implementado em Java
* Informix
* Ingres
* InterBase
* Microsoft SQL Server
* MySQL
* Oracle
* PointBase PointBase, banco de dados relacional implementado em Java
* PostgreSQL
* SQLite
* LiteBase Mobile Dedicado a plataformas móveis tais como: Palm OS, Pocket PC,
WinCE, Symbian
* Sybase Adaptive Server Enterprise
* Sybase Advantage Database Server
* Teradata Primeiro RDBMS com arquitetura paralela do mercado
18

3 PROCESSAMENTO DE TRANSAÇÕES

Uma transação pode ser definida como um conjunto de


operações(alteração,inclusão,exclusão,atualização,etc.) realizadas nos dados de
uma aplicação em um dado momento. Uma transação tem o seu início no início de
uma sessão e o seu término no encerramento da sessão (fechamento do programa
ou operação.).

O ínicio de uma nova transação é marcada pela diretiva BeginTrans , o


encerramento pela diretiva CommitTrans e o Cancelamento da transação pela
diretiva RollBack.

O processamento da transação é realizado pelo objeto Workspace definido em uma


sessão.Então temos:

* BeginTrans - Inicia uma nova Transação


* CommitTrans - Encerra a transação atual e salva as alterações realizadas durante
o processamento.
* RollBack - Encerra a transação atual e restaura os dados a sua posição quando
do inicio da transação.

O processamento de transações permite a você proteger a integridade dos dados


garantindo que múltiplas alterações em uma ou mais tabelas de dados ocorram de
forma integrada , permitindo que todas as alterações sejam realizadas ou caso
contrário nenhuma alteração ocorra.

Por exemplo : a transferência de valores de uma conta corrente para a conta de


poupança de uma pessoa precisa ser realizada como uma transação , vejamos os
passos envolvidos:

1. Você deve subtrair valores da conta corrente


2. E deve somar os valores subtraídos da conta corrente à conta de poupança
3. Se alguma das alterações falhar você terá problemas , para evitar isto usaremos
o processamento de transações.

* A escrita do banco de dados que precisa ocorrer como uma unidade deve ser
colocada entre os métodos BeginTrans e CommitTrans
* O método RollBack irá cancelar as modificações feitas desde que BeginTrans foi
ativado.

'Vejamos o exemplo de débito de um valor da Conta Corrente e Crédito na Conta de


Poupança

dim db as database

dim conta as recordset

dim poupanca as recordset


19

set db=OpenDatabase( app.path & "\banco.mdb")

set conta=db.OpenRecordset("tblconta", DbopenTable)

set poupanca=db.OpenRecordset("tblpoupanca", dbOpenTable)

'inicia a transação tratando todas as alterações subsequentes como uma unidade

DBEngine.Workspaces(0).BeginTrans

conta.edit

conta("saldo")=conta("saldo")-valor

conta.update

'se a energia acabar neste ponto o valor não seria subtraido do saldo da conta
corrente

poupanca.addnew

poupanca("saldo")=poupanca("saldo")+valor

poupanca.update

'neste ponto iremos permitir ao usuário salvar as alterações ou abortá-las

If MsgBox("Confirma a operação : Debito em Conta Corrente e Crédito em Poupança


? ", vbYesNo) = vbYes Then

DBEngine.Workspaces(0).CommitTrans 'salva as alterações

Else

DBEngine,Workspaces(0).RollBack 'aborta as alterações

End If

Podemos aninhar no máximo até cinco transações sendo que cada nível precisa ser
encerrado antes que as transações de nível mais alto sejam executadas.

Quando usamos consultas ação há uma transação implícita sendo executada , de


forma que se a consulta falhar as alterações não serão realizadas.

Quando múltiplas alterações precisam ser realizadas em uma ou mais tabelas, a


utilização de transações aumenta a velocidade do processo, pois os dados serão
armazenados em um cache de memória antes de serem escritos nos arquivos e
assim o acesso a disco diminui. No momento que o cache encher um arquivo em
disco de transferência temporário será usado e o desempenho cai.
20

Se você fechar o objeto Workspace sem salvar or encerrar as transações


pendentes, as transações são automaticamente canceladas.(RollBack).

Se você usar o método CommitTrans ou o método RollBack sem iniciar uma


transação com BeginTrans, o Jet retorna um erro.

Se você usar os métodos addNew, Edit ou Update dentro de um loop que editará
mais que um registro , a versão 3.0 de Jet Engine, pode tratar o loop como uma
transação implícita. Isto significa que as atualizações não serão necessariamente
efetuadas nos arquivos. Naturalmente isto afetará o tratamento de erros , o bloqueio
de páginas e visibilidade das alterações para outros usuários. Para garantir que as
alterações sejam imediatamente escritas nos arquivos encerre cada bloco
Edit/Update dentro de uma transação explicita. Vejamos um exemplo abaixo:
While NOT RS.EOF

WS.BeginTrans
RS.Edit

. . . 'código com as alterações

RS.Update
WS.CommitTrans
RS.Movenext
WEND

Quando você inicia uma transação, o Jet Engine grava esta operação em um
arquivo no diretório definido pela variável TEMP de seu ambiente na estação. Se o
arquivo de log da transação esgota o espaço disponível no diretório TEMP, o Jet
dispara o erro 2004.
21

4 CONTROLE DE CONCORRÊNCIA

O conceito de concorrência em banco de dados trata dos métodos


necessários para que mais de um agente (usuário ou programa) possa acessar um
conjunto de dados compartilhados entre todos eles. Também este controle deve
garantir transparência e independência, para que outros agentes não precisem
saber ou interagir entre si para resolver o acesso ao recursos em questão.

O estudo da concorrência é feito sobre o conceito de transações em banco de


dados. Transação é uma unidade lógica, que consiste de uma série de operações
executadas, onde o sistema de banco de dados precisa manter certas propriedades
para garantir o sucesso sem perda de informações lógicas.

Controle de Concorrência e Escalonamento

Independente do tipo de controle de concorrência efetuado o banco de


dados deve garantir as propriedades ACID:

- Atomicidade: uma transação é uma unidade atômica de processamento que deve


ser executada integralmente, ou totalmente desfeita.

- Consistência: a execução de uma transação deve levar o banco de dados de um


estado consistente a outro. Isto significa respeitar todas as restrições de integridade
como unicidade de chaves e integridade referencial.

- Isolamento: a execução de uma transação não pode ser afetada por outras sendo
executadas concorrentemente, para isso suas atualizações não devem ser
efetivadas até que se tenha uma confirmação (COMMIT).

- Durabilidade: os efeitos de uma transação confirmada não podem ser desfeitos, a


menos que outra transação modifique tais dados, sendo que deve-se prevenir falhas
durante a efetivação da transação .

Além destas propriedades, o SGBD precisa garantir que seu módulo de


escalonamento de transações não cause perda de informações no momento em que
tenta aplicar um conjunto de transações que pode estar desordenado. Para isso é
necessário que o escalonador garanta que uma transação confirmada não pode ler
dados de uma transação abortada. Portanto o escalonamento é dito recuperável se
uma transação só se confirma depois que todas as outras, das quais ela leu dados,
já estiverem confirmadas. Em casos de aborto de uma transação, o escalonador
deve garantir que todas as outras transações, que leram dados modificados por esta
transação abortada, também sejam abortadas em cascata.

Modelo de Concorrência em Multiversões (MVCC)

Um dos modelos adotados para prover controle concorrente é o MVCC -


Multiversion Concurrency Control. Segundo este modelo, uma transação manipula
uma porção de dados (uma versão da base) como a base estava a certo tempo
22

atrás, sem importar o estado atual da camada física dos dados.

Esta alternativa protege a transação de visualizar dados inconsistentes que


poderiam ser causados por outras transações concorrentes que atualizaram a
mesma porção de dados. Assim este modelo respeita o princípio do Isolamento para
cada sessão de utilização da base de dados.

O modelo MVCC por escapar de metodologias de tratamento de lock


explícitas, diminui a contenção de locks de forma a permitir uma melhor performance
em ambientes com vários usuários da base de dados. A principal vantagem é que
internamento o banco resolve os conflitos entre locks de leitura e escrita de forma
simples: uma transação nunca pode ler blocos sendo escritos e nunca pode
escrever em blocos sendo lidos. A noção de blocos comumente, nos bancos
relacionais, está diretamente ligada ao conceito de linhas de uma tabela, apesar de
pode ser aplicado à tabela como um todo.

Os bancos relacionais PostgreSQL e MySQL, por exemplo, implementam


este modelo de controle de concorrência, nas suas versões mais novas.

Isolamento das transações

O isolamento de transações é mais uma alternativa de funcionamento do


controle de concorrência para auxiliar na difícil tarefa de manter a integridade dos
dados em momentos de múltiplas transações. Existem quatro níveis possíveis de
isolamento, mas cada banco de dados define sua operação interna de acordo com
seu projeto e por vezes, os níveis SERIALIZABLE e READ
COMMITED são os mais usados:

● SERIALIZABLE: Só permite que escalas serializáveis sejam executadas. Bloqueia


os dados até o final da transação, e impede a inserção de novas tuplas nas tabelas
em uso. É o modo mais restritivo, ou seja, o que resulta em menor concorrência.

● REPEATABLE READ: Bloqueia os dados até o final da transação, garantido que


os valores dos dados acessados não serão modificados por outras transações, mas
permite a inserção de novas tuplas na tabela, podendo originar "tuplas fantasma".

● READ COMMITED: Bloqueios são usados durante o acesso ao dado. Com isso,
os valores dos dados acessados podem ser modificados por outras transações, e
podem surgir "tuplas fantasma".

● READ UNCOMMITED: Não usa bloqueio, podendo resultar em leitura de dados


sendo escritos (dirty read), valores dos dados acessados podem mudar durante a
transação, e tuplas podem ser inseridas ou removidas durante a transação. É o
modo menos restritivo, que resulta em maior concorrência, mas que deve ser usado
somente quando não se tem nenhum compromisso com a consistência do resultado.

Protocolos de Bloqueio

Além dos recursos já apresentados é comum disponibilizar formas de locking


explícito, para impedir que um dado seja modificado enquanto uma transação esteja
23

acessando-o. Normalmente pode-se usar:

• Bloqueio compartilhado (S): permite somente leitura e é obtido se não houver


bloqueio exclusivo

• Bloqueio exclusivo (X): permite leitura e escrita e é obtido se não houver nenhum
outro bloqueio

Para respeitar o protocolo de bloqueio todas as transações devem solicitar


bloqueio compartilhado ou exclusivo antes de acessar um dado e liberar o bloqueio
quando não for mais necessário. Caso um bloqueio seja solicitado mas o dado já
estiver bloqueado, então a transação entra em espera até que o bloqueio seja
liberado.

Um dos problemas do uso de bloqueio explícito é que pode gerar situações


de starvation. Esta acontece quando uma transação T1 solicita um bloqueio
compartilhado e outra T2 bloqueio exclusivo, mas enquanto isso outras operações
também solicitam bloqueios compartilhado. Tal situação pode causar que nunca T2
obtenha seu bloqueio exclusivo, uma estratégia para resolver o problema é garantir
que não seja concedido um novo bloqueio compartilhado antes que a transação que
solicitou o bloqueio exclusivo o obtenha.

A situação de deadlock também é uma possibilidade, quando uma transação


T1 faz um bloqueio de um recurso A do banco, a transação T2 faz outro bloqueio do
recurso B, mas para a T1 completar sua execução ainda precisa do bloqueio do
recurso B (pendente por T2) e T2, por sua vez, antes de finalizar tenta bloquear o
recurso A (pendente por T1). T al situação pode ser contornada pelo SGBD, por
exemplo, pelo rollback de uma das duas transações.

Controle com base em timestamps

Na resolução da concorrência por timestamps cada transação ganha uma


marca de tempo (TS - timestamp) e seus dados utilizados também obtêm marcas de
tempo de escrita e leitura (W-TS e R-TS). O critério de ordenação das operações por
marcas de tempos segue o critério:

No caso da transação T quer er ler um dado Q:


1. Se o TS (timestamp) de T é menor que o W-TS (timestamp de escrita) de Q,
então T é abortada e desfeita, pois T quer ler um dado que já foi sobrescrito.

2. Se o TS de T é maior ou igual ao W-TS de Q então a operação T é executada e


se R-TS (timestamp de leitura) de Q é menor que o TS de T, então o novo R-TS de
Q é exatamente o TS de T.

No caso da transação T quer er alterar um dado Q:

1. Se o TS (timestamp) de T é menor que o R-TS (timestamp de leitura) de Q, então


T é abortada e desfeita, pois T não pode alterar um dado que já foi lido.
24

2. Se o TS (timestamp) de T é menor que o W-TS (timestamp de escrita) de Q,


então T é abortada e desfeita, pois T quer alterar um dado que já é obsoleto.

3. Em caso contrário a operação é executada e o novo W-TS de Q é exatamente o


TS de T.

O controle de concorrência é um requisito fundamental para qualquer banco


que seja acessado por mais que um usuário-aplicação ao mesmo tempo. A
manipulação explícita leva ao programador -usuário a difícil tarefa de controle dos
bloqueios e resolução de situações indesejáveis como deadlocks, que são até
difíceis de identificar em tempo de execução.

Desta forma, torna-se interessante a escolha de um banco que tome decisões


automáticas sobre os processos relacionados ao controle de concorrência como o
MVCC. Os conceitos sobre serialização são igualmente importantes para um devido
tratamento dos dados e podem ser ajustados através das linguagens de acesso
(normalmente SQL, nos bancos relacionais) em tempo de execução.
25

REFERÊNCIAS

DATE, C. J., Introdução a Sistemas de Banco de Dados, 4a edição, Editora


Campus, Rio de Janeiro, 1991

SETZER, V.W. Banco de Dados: Conceitos, Modelos, Gerenciadores, Projeto


lógico e físico. São Paulo: Edgard Blücher, 1989

Wikipédia - http://pt.wikipedia.org/wiki/Brasil

Material Didático das Aulas

Você também pode gostar