Você está na página 1de 36

UNIVERSIDADE SALGADO DE OLIVEIRA

ANLISE DE SISTEMAS HABILITAO EM SISTEMAS DE INFORMAO

Bancos de Dados II
SQL Ambiente de Bancos de Dados

Prof. Ely Edison Matos Verso: 2011/1 1

1. SQL - Structured Query Language ....................................................................... 4 1.1. Histrico ................................................................................................ 4 1.2. Conceitos ............................................................................................... 4 1.3. Linguagem ............................................................................................. 5 1.4. Modelo de Exemplo ................................................................................. 5 MER .................................................................................................. 5 DTR .................................................................................................. 6 SQL .................................................................................................. 6 1.5. DDL (Data Definition Language) ............................................................... 6 Domnios ........................................................................................... 6 Tabelas ............................................................................................. 7 ndices ............................................................................................ 10 1.6. DML (Data Manipulation Language) ........................................................ 11 Inserir registros................................................................................ 11 Remover registros ............................................................................ 11 Atualizar registros ............................................................................ 11 Consultar registros ........................................................................... 12 Vises (views) .................................................................................. 21 1.7. DCL (Data Control Language) ................................................................. 22 GRANT ............................................................................................ 22 REVOKE .......................................................................................... 23 1.8. Stored Procedures ................................................................................ 23 1.9. Triggers ............................................................................................... 24 1.10. Seqncias .......................................................................................... 25 2. PROJETO FSICO ........................................................................................ 26 2.1. Sistemas de arquivos ............................................................................ 26 2.2. Estrutura geral do SGBD ........................................................................ 26 2.3. Meios Fsicos de Armazenamento ............................................................ 26 Cache ............................................................................................. 26 Memria Principal ............................................................................. 27 Armazenamento em Disco ................................................................. 27 Armazenamento em Fita .................................................................... 27 2.4. Organizao de arquivos ........................................................................ 27 Registro de Tamanho Fixo ................................................................. 27 Registro de Tamanho Varivel ............................................................ 28 2.5. Armazenamento no Dicionrio de Dados .................................................. 28 2.6. Gerenciamento de buffers ...................................................................... 29 Estratgia de Substituio ................................................................. 29 2.7. Indexao ............................................................................................ 29 3. AMBIENTE DE BANCO DE DADOS ................................................................. 30 3.1. Modelo de Transao ............................................................................. 30 Exemplo: Transferncia bancria ........................................................ 30 Estados de uma Transao ................................................................ 31 Propriedades das transaes (ACID) ................................................... 31 3.2. Log do Banco de Dados ......................................................................... 31 3.3. Modificao do Banco de Dados Adiada .................................................... 31 Exemplo Modificao BD Adiada ......................................................... 32 3.4. Controle de Concorrncia ....................................................................... 32 Escalonamentos (Schedules) .............................................................. 32 2

Bloqueio (Lock) ................................................................................ 34 3.5. Recuperao de Paradas e Falhas ........................................................... 34 Tipos de falhas ................................................................................. 34 Estratgias tpicas............................................................................. 35 3.6. Segurana e Integridade........................................................................ 35 Segurana ....................................................................................... 35 Integridade ...................................................................................... 35 4. Bibliografia ................................................................................................ 36

1. SQL - STRUCTURED QUERY LANGUAGE


1.1. Histrico
SEQUEL (Structured English Query Language) - Centro de Pesquisa San Jose da IBM (Projeto System R) SQL 1 (SQL-86): Padro ISO/ANSI. No havia clusula para especificar chave; modificado em 1989. SQL 2 (SQL-92): Implementa conexo cliente/servidor. SQL 3: Em fase de aprovao; implementa o Modelo Orientado a Objeto.

1.2. Conceitos
Tabela (table)
Equivale relao, no Modelo Relacional.

Linha (row) - registros


Equivale tupla, no Modelo Relacional.

Coluna (column)
Equivale aos atributos da relao, no Modelo relacional.

Tipos de dados (data type)


Caracter CHAR(n) ou CHARACTER(n) VARCHAR(n) ou CHARACTER VARYING(n) ou CHAR VARYING(n) Numrico SMALLINT, INTEGER FLOAT, DOUBLE PRECISION NUMERIC(precision, scale), DECIMAL(precision,scale) Datas DATE TIME TIMESTAMP BLOB (Binary Large Objects)

Domnios (domain)
Determina os valores possveis para colunas. Domnios normalmente so definidos antes da criao das tabelas, para que possam ser usadas por estas.

Restries (constraint)
Condies necessria para manter a integridade dos dados.

Vises (view)
Uma tabela cujo contedo derivado de outras tabelas.

Banco de dados (database)


Conjunto de tabelas, domnios, restries, vises, etc.

Esquema (schema)
O conceito de uma esquema SQL foi definido com o SQL2 para agrupar tabelas e outros elementos que pertenam a mesma aplicao. Um esquema identificado por um nome, um identificador do usurio ou conta que possui o esquema e descritores de cada elemento do esquema.

Catlogo (catalog) Dicionrio de dados


Em SQL2 um catlogo uma coleo nomeada de esquemas em um ambiente SQL. Pode ser entendido com um BD do sistema, que pode ser consultado, contendo: informaes sobre as tabelas, vises, direitos de acesso, identificaes dos usurios, etc. Sua forma exata uma caracterstica de cada sistema e no da SQL.

1.3. Linguagem
Mais que uma linguagem de consulta, a SQL oferece funes para DEFINIO, MANIPULAO e CONTROLE dos dados de um Banco de dados.

DDL (Data Definition Language)


CREATE: criao de novas estruturas ALTER: alterao de estruturas existentes DROP: remoo de estruturas

DML (Data Manipulation Language)


INSERT: Insero de registros DELETE: remoo de registros UPDATE: atualizao de registros SELECT: Seleo (consulta) de registros

DCL (Data Control Language)


GRANT: concesso de direitos de acesso a tabelas e vises REVOKE: revogao de direitos de acesso a tabelas e vises

1.4. Modelo de Exemplo


O seguinte modelo de dados ser utilizado nos exemplos dos comandos SQL.

MER

DTR

SQL
Create Table NotaVenda ( IdNV Integer NOT NULL, Data Date, Primary Key (IdNV) ); Create Table Produto ( IdProduto Integer NOT NULL, Descricao Varchar(50), PrecoUnitario Numeric(10,2), Quantidade Integer, Tipo Char(20), Primary Key (IdProduto) ); Create Table ItemNota ( IdNV Integer NOT NULL, IdProduto Integer NOT NULL, Quantidade Integer, Primary Key (IdNV,IdProduto) ); Alter Table ItemNota add Foreign Key (IdNV) references NotaVenda (IdNV) on update no action on delete no action ; Alter Table ItemNota add Foreign Key (IdProduto) references Produto (IdProduto) on update no action on delete no action ;

1.5. DDL (Data Definition Language)


Domnios
CREATE DOMAIN
CREATE DOMAIN domnio [AS] <tipo_dado> [DEFAULT {literal | NULL | USER}] [NOT NULL] [CHECK (<condio>)]; Default: valor padro a ser usado se nenhum valor for aplicado. NOT NULL: fora que um valor seja armazenado na coluna. CHECK: testa o valor para verificar se ele satisfaz condio fornecida.

Exemplos CREATE DOMAIN DM_DESCRICAO AS VARCHAR(150); CREATE DOMAIN CODIGOPRODUTO AS INTEGER DEFAULT 9999 CHECK (VALUE > 1000); CREATE DOMAIN TIPOPRODUTO AS VARCHAR(12) CHECK (VALUE IN ('SOFTWARE', 'HARDWARE', 'OTHER', 'N/A'));

ALTER DOMAIN
ALTER DOMAIN nome { SET DEFAULT {literal | NULL | USER} | DROP DEFAULT | ADD [CONSTRAINT] CHECK (<condio>) | DROP CONSTRAINT | TYPE tipo_dado};

DROP DOMAIN
DROP DOMAIN nome;

Tabelas
CREATE TABLE
Criao de tabelas. CREATE TABLE nome_tabela ( <definio_coluna> [, <definio_coluna> | <restrio_tabela> ]); <definio_coluna> = nome_coluna {<tipo_dado> | COMPUTED [BY] (<expr>) | domnio} [DEFAULT {literal | NULL | USER}] [NOT NULL] [<restrio_coluna>] <restrio_coluna> = [CONSTRAINT nome_restrio] { UNIQUE | PRIMARY KEY | REFERENCES outra_tabela [(outra_coluna [,outra_coluna])] [ON DELETE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}] [ON UPDATE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}] | CHECK (<condio>)} <restrio_tabela> = [CONSTRAINT nome_restrio] {{PRIMARY KEY | UNIQUE} (coluna [, coluna]) | FOREIGN KEY (coluna [, coluna]) REFERENCES outra_tabela [ON DELETE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}] [ON UPDATE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}] | CHECK (<condio>)} restrio_coluna: referencia somente uma coluna, aceitando todos os tipos de restries. restrio_tabela: referencia uma ou mais colunas. S no aceita o tipo NOT NULL.

Tipos de restries
[NOT] NULL Indica se a coluna pode ou no receber valores nulos. O default NULL. UNIQUE Indica que a coluna ou combinao de colunas no pode ter valores repetidos. PRIMARY KEY Indica que a coluna ou combinao de colunas forma a chave primria. Chave Estrangeira (REFERENCES ou FOREIGN KEY) Usada a nvel de coluna, indica que a coluna uma chave estrangeira. Usada a nvel de tabela, indica que a coluna ou combinao de colunas uma chave estrangeira. ON UPDATE | ON DELETE: indica a ao a ser tomada quando uma linha na tabela referenciada atualizada ou removida. NO ACTION: o valor da FK no mudado. Pode causar erro na atualizao/remoo da chave primria da tabela referenciada, devido a integridade referencial. a opo default. CASCADE: o valor da FK alterado de acordo com a alterao feita na chave primria. No caso de remoo, as linhas correspondentes so removidas. SET DEFAULT: o valor da FK recebe o valor definido com default para aquela coluna. SET NULL: o valor da FK recebe NULL. CHECK No permite que valores que violem a condio estabelecida sejam gravados na coluna. Exemplos Restries a nvel de Tabela Create Table NotaVenda ( IdNV Integer NOT NULL, Data Date, CONSTRAINT PK_NotaVenda PRIMARY KEY (IdNV) ); Create Table Produto ( IdProduto Integer NOT NULL, Descricao Varchar(50), PrecoUnitario Numeric(10,2), Quantidade Integer, Tipo Char(20), CONSTRAINT PK_Produto PRIMARY KEY(IdProduto), CHECK (TipoProd IN ('HARDWARE','SOFTWARE')) ); Create Table ItemNota ( IdNV Integer NOT NULL, IdProduto Integer NOT NULL, Quantidade Integer, CONSTRAINT PK_ItemNota PRIMARY KEY(IdNV,IdProduto), CONSTRAINT FK_ItemNota_NotaVenda FOREIGN KEY(IdNV) REFERENCES NotaVenda (IdNV) ON DELETE CASCADE, CONSTRAINT FK_ItemNota_Produto FOREIGN KEY(IdProd) REFERENCES Produto (IdProduto) );

Restries a nvel de coluna Create Table NotaVenda ( IdNV Integer NOT NULL PRIMARY KEY, Data Date ); Create Table Produto ( IdProduto Integer NOT NULL PRIMARY KEY, Descricao Varchar(50), PrecoUnitario Numeric(10,2), Quantidade Integer, Tipo Char(20) CHECK (TipoProd IN ('HARDWARE','SOFTWARE')) );

ALTER TABLE
Alterao de tabelas. ALTER TABLE nome_tabela <operao> [, <operao>]; <operao> = {ADD <definio_coluna> | ADD <restrio_tabela> | ALTER [COLUMN] nome_coluna {TO novo_nome | TYPE novo_tipo | POSITION nova_posio} | DROP CONSTRAINT nome_restrio} No h no ALTER TABLE a opo "DROP COLUMN". Para fazer alteraes na definio de tabelas, deve-se: Armazenar o contedo da tabela em uma tabela temporria; Eliminar a tabela antiga; Definir a novatabela; Carregar a nova tabela a partir da tabela temporria.

Exemplos Adicionando ou modificando colunas de uma tabela ALTER TABLE Produto ADD CodigoBarra VarChar(20) NOT NULL; ALTER TABLE NotaVenda ADD NomeVendedor VarChar(50); ALTER TABLE NotaVenda ALTER NomeVendedor TYPE VarChar(70); Adicionando ou removendo uma restrio de uma tabela ALTER TABLE Produto ADD CONSTRAINT UK_Produto_CodBarraProd UNIQUE (CodBarraProd); ALTER TABLE Produto DROP CONSTRAINT UK_Produto_CodBarraProd; Para excluir uma chave estrangeira necessrio que ela tenha recebido um nome quando da sua definio.

DROP TABLE
Remoo de tabelas. DROP TABLE name [CASCADE | RESTRICT]; Exemplo DROP TABLE PRODUTO;

ndices
Os ndices so usados para acelerar a recuperao de dados em resposta a certas condies de pesquisa e reforar as restries de unicidade em colunas. Sugestes para criao de ndices: Colunas usadas freqentemente em condies de pesquisa (clusula WHERE no comando SELECT) FOREIGN KEYS, pois esto geralmente envolvidas em JOINS No h necessidade de indexar colunas: PRIMARY KEYS e UNIQUE KEYS (normalmente o sistema j cria internamente um ndice) Raramente faro parte de condio de pesquisa Possuem um domnio de dados muito pequeno Observaes: ndices no podem ser alterados; devem ser removidos (com DROP) e recriados A deciso de se usar ou no um ndice em resposta a uma solicitao especfica de dado no tomada pelo usurio mas sim pelo sistema

CREATE INDEX
CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]] INDEX nome_ndice ON nome_tabela (nome_coluna [, nome_coluna]); Exemplo CREATE INDEX IDX_Produto_Descricao ON Produto(Descricao);

ALTER INDEX
Usado para ativar/desativar um ndice. ALTER INDEX <nome_ndice> {ACTIVE | INACTIVE};

DROP INDEX
DROP INDEX <nome_ndice>; Exemplo DROP INDEX IDX_Produto_Descricao;

10

1.6. DML (Data Manipulation Language)


Inserir registros
INSERT INTO <nome_tabela> [(nome_coluna [, nome_coluna])] {VALUES (<valor> [, <valor> ]) | <subquery>};

Inserir novas linhas em uma tabela


Sem informar os nome dos campos INSERT INTO Produto VALUES (52,'Pen Drive 2Gb',95.20,20,'HARDWARE','12345'); INSERT INTO Notavenda VALUES (15,'11-14-2002','SILVANA'); Informando os nomes dos campos INSERT INTO Produto (idproduto, descricao, precounitario, quantidade, tipo, codigobarra) VALUES (53,'Drive CDROM', 50.00, 10, 'HARDWARE', '1122')

Copiar linhas de uma outra tabela


CREATE TABLE NotaVendaHistorico ( IdNV CHAR(6) Data DATE ); INSERT INTO NotaVenda SELECT IdNV, DataNV FROM NotaVendaHistorico WHERE IdNV = 10; NOT NULL PRIMARY KEY,

Remover registros
DELETE FROM nome_tabela [WHERE <condio>]; ATENO: Remove todas as linhas da tabela se for omitida a clusula WHERE. Exemplo DELETE FROM Produto WHERE IdProduto = 45; DELETE FROM depto;

Atualizar registros
UPDATE nome_tabela SET nome_coluna = <valor> [, nome_coluna = <valor>] [WHERE <condio>]

11

Atualizar linhas de uma tabela


UPDATE NotaVenda SET NomeVendedor = 'JAIR BATISTA' WHERE IdNV = 12; ATENO: Todas as linhas de uma tabela so atualizadas se for omitida a clusula WHERE.

Atualizar linhas a partir dos valores de uma outra tabela


UPDATE Produto SET Precounitario = Precounitario * 1.1 WHERE IdProduto IN (SELECT IdProduto FROM RemarcarProduto);

Consultar registros
Forma Bsica
SELECT [DISTINCT] nome_coluna [,nome_coluna...] FROM nome_tabela Seleo de colunas especficas Basta relacionar as colunas desejadas SELECT IdNV, NomeVendedor FROM NotaVenda; Seleo de todas as colunas Substituir os nome das colunas por *. SELECT * FROM Produto; Evitando duplicaes de linhas Usar a palavra DISTINCT na clusula SELECT. SELECT DISTINCT NomeVendedor FROM NotaVenda; Usando Pseudnimos Uma consulta SQL normalmente usa o nome da coluna como cabealho; possvel definir um pseudnimo para a coluna que aparecera no cabealho SELECT IdNV Numero da Nota FROM NotaVenda; Operador AS O operador AS usado para gerar um novo nome para a coluna. Geralmente usado quando o dataset resultante possui alguma coluna derivada. SELECT TipoProd || ' - ' || DescProd AS NomeProduto FROM Produto

Uso clusula WHERE


Usada para filtrar um subconjunto de linhas de uma tabela, com base em uma condio. A condio deve resultar em um valor booleano (Verdadeiro ou Falso).

12

SELECT nome_coluna [,nome_coluna...] FROM nome_tabela [WHERE condio]


Operadores

= <> > < Between <valor> and <valor> In (lista) Like <valor> IS NULL Exemplos SELECT IdProduto, Descricao FROM Produto WHERE Tipo = 'HARDWARE' SELECT * FROM Produto WHERE Precounitario > 10.00

Igual a Diferente de Maior que Menor que Entre dois valores Qualquer valor da lista Corresponde a um padro valor Nulo

SELECT IdProduto, Descricao, Tipo FROM Produto WHERE Precounitario BETWEEN 5.00 AND 10.00 SELECT IdProduto, Descricao, Tipo FROM Produto WHERE IdProduto IN (10, 15, 20) SELECT * FROM NotaVenda WHERE NomeVendedor IS NULL Observaes - LIKE faz reconhecimento de padres: - "_" equivale a qualquer caracter - "%" equivale a qualquer seqncia de caracteres Exemplo: Selecionar todos os produtos com a palavra 'azul' na descrio. SELECT * FROM PRODUTO WHERE Descricao LIKE '%azul%'

- Os operadores BETWEEN, IN, LIKE e IS NULL podem ser negados atravs do operador NOT: NOT BETWEEN, NOT IN , NOT LIKE, IS NOT NULL SELECT IdProduto, Descricao, Tipo FROM Produto WHERE IdProduto NOT IN (10, 15, 20)
Conjuno de Condies

Vrias condies podem ser conectadas na clusula WHERE usando o operador AND.

13

SELECT IdProduto, Descricao FROM Produto WHERE (Tipo = 'HARDWARE') AND (Precounitario > 15.00);
Disjuno de Condies

Uso do operador OR. SELECT IdProduto, Descricao FROM Produto WHERE (Tipo = 'SOFTWARE') OR (Descricao LIKE 'M%');
Operaes no resultado da consulta

So permitidas as operaes de adio, subtrao, multiplicao e diviso. Podem ser usadas as colunas das tabelas e constantes. SELECT Idproduto, Precounitario, Quantidade, (Precounitario * Quantidade) as ValorTotal FROM Produto; SELECT Idproduto, Precounitario, (Precounitario * 1.1) as PrecoComAumento FROM Produto;

Uso da clusula ORDER BY


A clusula ORDER BY usada para ordenar o resultado de uma consulta. SELECT nome_coluna [,nome_coluna...] FROM nome_tabela [WHERE condio] [ORDER BY {nome_coluna, ...} [ASC|DESC]] - ASC (Ascending): Ordem crescente - DESC (Descending): Ordem decrescente SELECT IdProduto, Descricao FROM Produto WHERE Tipo = 'HARDWARE' ORDER BY Descricao; SELECT * FROM NotaVenda ORDER BY Data DESC;

Produto Cartesiano
Todas as linhas da primeira tabela so combinadas com todas as linhas da segunda tabela. Ocorre quando so usadas duas tabelas na clusula FROM e a clusula WHERE omitida. Exemplo Tabela NotaVenda com 14 registros Tabela Produto com 4 registros SELECT IdNv,Idprod FROM NotaVenda, Produto; {gera um resultado com 56 registros}

Juno de Tabelas (Join)


INNER JOIN (default)

As linhas de uma tabela podem ser combinadas s linhas de outra tabela atravs de valores iguais em colunas correspondentes.

14

Sintaxe 1: SELECT nome_coluna [,nome_coluna...] FROM <nome_tabela alias>, <nome_tabela alias> WHERE <condio_join> Sintaxe 2: SELECT nome_coluna [,nome_coluna...] FROM <nome_tabela> [INNER] JOIN <nome_tabela> ON <condio_join>

Exemplo: Join da tabela Produto com a tabela ItemNota: Tabela Produto:

Tabela ItemNota:

As colunas com valores em comum so Produto.IdProduto (PK) e ItemNota.IdProduto (FK). O Join realizado atravs de um produto cartesiano entre as duas tabelas e um filtro para valores iguais nas colunas em comum: SELECT Produto.*, ItemNota.* // projeo das colunas FROM ItemNota, Produto // produto cartesiano WHERE ItemNota.IdProduto = Produto.Idproduto // filtro (condio de join)

15

Para fazer referncia s colunas que possuem o mesmo nome nas duas tabelas, o nome da coluna deve se qualificado, ou seja, deve ser indicada a tabela qual a coluna pertence: Produto.Idproduto, ItemNota.Idproduto Podem ser usados apelidos (aliases) para os nomes das tabelas, simplificando a sintaxe: Tabela Produto, alias p : campo p.idproduto Tabela ItemNota, alias i: campo i.idproduto Exemplos Sintaxe 1: - Sem o uso de Aliases SELECT IdNV, Descricao FROM ItemNota, Produto WHERE ItemNota.IdProduto = Produto.Idproduto - Com o uso de Aliases SELECT i.IdNV, p.Descricao FROM ItemNota i, Produto p WHERE i.IdProduto = p.Idproduto

Exemplo Sintaxe 2: SELECT IdNV, Descricao FROM ItemNota INNER JOIN Produto ON ItemNota.IdProduto = Produto.Idproduto
Outros tipos de Join

A operao OUTER JOIN usada quando necessrio fazer um JOIN de duas tabelas, mesmo que no existam os valores correspondentes em uma das duas tabelas. Pode ser LEFT JOIN, RIGTH JOIN ou FULL JOIN. A operao Self JOIN (join reflexiva) usada quando necessrio fazer um JOIN de uma tabela com ela mesma, comparando linhas de dados dentro de uma nica tabela. Exemplo de Self Join: Listar todos os produtos que tm o mesmo preo. SELECT p1.Descricao, p2.Descricao FROM Produto p1, Produto p2 WHERE p1.Precounitario=p2.Precounitario AND p1.idProduto < p2.Idproduto A comparao dos cdigos de produtos (Idproduto) serve apenas para eliminar duas linhas do mesmo produto e evitar que o mesmo par de produtos (p1,p2) aparea tambm na ordem inversa (p2,p1).

Funes de Manipulao de Valores


Como regra geral, as funes para manipulao de valores so dependentes do SGBD utilizado. Operadores aritmticos + * / soma subtrao multiplicao diviso

16

Funes de converso UPPER(string) Funes de agregao So funes do padro SQL que trabalham sobre um grupos de linhas, retornando um nico valor com resultado. AVG(coluna) COUNT(coluna) MIN(coluna) MAX(coluna) SUM(coluna) Sintaxe: SELECT funo_grupo(nome_coluna) FROM nome_tabela [WHERE condio] [ORDER BY nome_coluna] Exemplos - Quantas notas j foram emitidas? SELECT COUNT(IdNV) FROM NotaVenda; - Qual o valor total em estoque? SELECT Sum(Precounitario * Quantidade) FROM Produto; Mdia dos valores da coluna Quantidade de linhas Menor valor da coluna Maior valor da coluna Soma dos valores da coluna Converte todos os caracteres da string para maisculo

Observaes Se o comando SELECT contiver funes de grupo, o resultado ser somente uma linha. Assim, no comando SELECT no podem aparecer resultados individuais junto com expresses que contenham funes de grupo. Neste caso deveramos usar GROUP BY. Por exemplo, o seguinte comando no permitido: SELECT IdNV, Count(IdProduto) FROM ItemNota; Todas as funes de agregao excluem linhas que tenham valor NULO na coluna que est sendo agregada. Por padro estas funes incluem valores duplicados nos clculos. Para excluir duplicidades, deve ser usada a palavra DISTINCT antes do nome da coluna. Exemplo: Quantos produtos diferentes j foram vendidos? SELECT COUNT(IdProduto) FROM ItemNota; --->> Errado, pois conta produtos duplicados Correto: SELECT COUNT(DISTINCT IdProduto) FROM ItemNota;

17

Para contar todas as linhas de uma tabela pode ser usado COUNT(*) (linhas com valores NULOS tambm sero consideradas). Quando usada a clusula WHERE, primeiramente feita a restrio das linhas (indicada pelo WHERE) e somente depois a funo de agregao aplicada. Exemplo: Quantas Notas foram emitida pelo vendedor JOSE? SELECT COUNT(IdNV) FROM NotaVenda WHERE VendedorNome = 'JOSE';

Uso da Clusula GROUP BY


Na grande maioria dos casos, as funes de agregao so usadas em clculos baseados em grupos de linhas da tabela. A clusula GROUP BY usada para dividir as linhas de uma tabela em subgrupos menores. O SQL recupera cada grupo de linhas de acordo com os valores da(s) expresso(es) especificada(s) na clusula GROUP BY. SELECT nome_coluna [, nome_coluna ... ], funo_de_grupo(nome_coluna) FROM nome_tabela [WHERE condio] [GROUP BY expr1, expr2, ...] A clusula GROUP BY dever vir sempre aps a clusula WHERE (ou aps a clusula FROM quando no existir WHERE). Quando a clusula GROUP BY utilizada, possvel combinar resultados individuais com funes de grupo na clusula SELECT, desde que aqueles resultados individuais sejam usados no GROUP BY. Exemplos - Quantas notas de venda foram emitidas por cada vendedor? SELECT NomeVendedor, COUNT(IdNV) FROM Notavenda GROUP BY NomeVendedor;

- Qual a quantidade de produtos por tipo? SELECT Tipo, COUNT(IdProduto) FROM Produto GROUP BY Tipo; - Qual o valor em estoque por tipo de produto? SELECT Tipo, Sum(Precounitario * Quantidade) FROM Produto GROUP BY Tipo; - Qual o valor total de cada nota de venda? (Utilizao de join) SELECT i.IdNV, Sum(p.Precounitario * i.Quantidade) FROM ItemNota i, Produto p WHERE i.IdProduto=p.IdProduto GROUP BY Tipo;

18

Observaes Quando usar GROUP BY todas as colunas que so usadas no SELECT mas no so usadas na funo de grupo devem ser includas na clausula GROUP BY. Usando a clusula WHERE pode-se selecionar as linhas antes de agrup-las. Exemplo: Usando GROUP BY para mltiplas colunas: - Qual a quantidade de notas emitidas em cada dia por cada vendedor? SELECT Data, VendedorNome, COUNT(IdNV) FROM NotaVenda GROUP BY Data, VendedorNome;

Uso da clusula GROUP BY com HAVING


A clusula WHERE no pode ser usada para restringir funes de grupo. Assim, o exemplo seguinte no vlido: SELECT num_depto, AVG(salario_emp) FROM emp WHERE AVG(salario_emp) > 2000 GROUP BY num_depto; ---->>> Errado: WHERE com funo de grupo

Os grupos definidos pela clusula GROUP BY podem ser filtrados pela clusula HAVING. SELECT nome_coluna [, nome_coluna ... ], funo_de_grupo(nome_coluna) FROM nome_tabela [WHERE condio] [GROUP BY expr1, expr2...] [HAVING funo_de_grupo(nome_coluna)] [ORDER BY nome_coluna] Exemplos - Quais os vendedores j emitiram mais de uma nota? SELECT NomeVendedor, COUNT(IdNV) FROM Notavenda GROUP BY NomeVendedor HAVING COUNT(idNv) > 1; - Quais as notas de venda em que a quantidade de produtos vendidos superior a 5? SELECT IdNV, SUM(Quantidade) FROM ItemNota GROUP BY idNV HAVING SUM(Quantidade) > 3; O processamento da instruo SQL pode ser visto da seguinte forma: feito o produto cartesiano das tabelas envolvidas; So selecionadas as linhas da tabela que obedecem ao critrio da clusula WHERE; So criados grupos de linhas que contenham valores idnticos nas colunas do GROUP BY; So selecionados os grupos que atendem ao critrio da clusula HAVING; feita a classificao do resultado pelos valores das colunas da clusula ORDER BY; feita a projeo sobre as colunas especificadas no SELECT.

19

Subqueries
Subqueries so comandos SELECT utilizados em condies de clusulas WHERE ou HAVING, para prover resultados que so utilizados para completar a consulta principal. Uma subquery que retorna apenas uma linha como resultado chamada "single-row subquery". Caso mais de uma linha seja retornada, a subquery chamada "multiple-row subquery". Os operadores = , > , >= , < , <= e <> podem ser usados em comparaes com "single-row subqueries". Os operadores IN, ANY e ALL so usados em "multiple-row subqueries". Exemplos - Listar a descrio dos produtos que tm o mesmo preo unitrio que o produto 10. SELECT Descricao FROM Produto WHERE Precounitario = (SELECT Preciunitario FROM Produto WHERE IdProduto = 10 ); - Listar o nome dos vendedores que emitiram tantas notas de venda quando o vendedor 'PAULO'. SELECT NomeVendedor FROM NotaVenda GROUP BY NomeVendedor HAVING COUNT(IdNv) = (SELECT COUNT(IdNv) FROM NotaVenda WHERE NomeVendedor = 'PAULO');
Operadores ANY e ALL

Quando a subquery retornar mais de um valor, os operadores ANY e ALL podem ser utilizados para compatibilizar o resultado da subquery com o tipo do operador de comparao. <campo> > ANY <subquery> Essa condio ser verdadeira quando <campo> for maior que qualquer um dos resultados da subquery. <campo> < ANY <subquery> Essa condio ser verdadeira quando <campo> for menor que qualquer um dos resultados da subquery. <campo> > ALL <subquery> Essa condio ser verdadeira quando <campo> for maior que todos os resultados da subquery. <campo> < ALL <subquery> Essa condio ser verdadeira quando <campo> for menor que todos os resultados da subquery. Exemplo - Listar os produtos que tenham preo unitrio superior ao preo unitrio de todos os produtos de hardware. SELECT Descricao FROM Produto WHERE Precounitario > ALL ( SELECT Precounitario FROM Produto WHERE Tipo = 'HARDWARE');

20

Operadores IN e NOT IN

Verifica se o dado faz parte ou no da lista fornecida. A lista pode ser formada por valores retornados por uma subquery. Exemplo: Listar as notas de venda e os respectivos vendedores, em que constem mais de 2 produtos vendidos. SELECT IdNV, NomeVendedor FROM NotaVenda WHERE IdNV IN (SELECT IdNV FROM ItemNota GROUP BY IdNV HAVING COUNT(IdProduto) > 2)

Operadores de Conjuntos

Como o resultado de um query um conjunto de linhas voc pode realizar operaes de conjuntos entre queries. o o o UNION : Unio entre os resultados das queries; INTERSECT : Interseo entre os resultados das queries; MINUS : Subtrao entre os resultados das queries.

A operao de unio permite reunir os resultados de duas consultas distintas em um s resultado. Equivale operao de Unio da lgebra Relacional. A operao de unio elimina as linhas duplicadas. Exemplo: Listar todas as Notas de venda que sejam do vendedor 'JUCA', ou em que conste o produto 14. SELECT IdNV FROM NotaVenda WHERE NomeVendedor='JUCA' UNION SELECT IdNV FROM ItemNota WHERE IdProduto=14
Operadores EXISTS e NOT EXISTS

EXIST: retorna verdadeiro se uma determinada subquery retornar ao menos uma linha e falso caso contrrio. NOT EXIST: retorna o resultado contrrio do operador EXIST. Exemplo: Listar a descrio de todos os produtos que j foram vendidos. SELECT Descricao FROM Produto p WHERE EXISTS ( SELECT IdProduto FROM ItemNota i WHERE p.IdProduto = i.IdProduto )

Vises (views)
Uma viso na terminologia SQL uma tabela que derivada de outras tabelas. Uma viso no precisa existir fisicamente. Por isso, pode ser considerada como uma tabela virtual, isto , uma tabela que realmente no existe como tal, mas sim como derivao de uma ou mais tabelas bsicas. A definio da viso fica armazenada no dicionrio de dados; esta definio mostra como ela derivada das tabelas bsicas. O objetivo bsico no uso de vises restringir o acesso a certas pores dos dados por questes de segurana, alm de pr-definir certas consultas atravs de tabelas virtuais que podero ser utilizadas por outras consultas.

21

CREATE VIEW
CREATE VIEW nome_viso [(nome_coluna [, nome_coluna..])] AS <subquery> Obs : Na clusula AS a Subquerie no pode conter ORDER BY. Exemplos CREATE VIEW VendasPorVendedor AS SELECT NomeVendedor, COUNT(IdNv) FROM Notavenda GROUP BY NomeVendedor; CREATE VIEW VendasPorVendedor(Nome,Quant) AS SELECT NomeVendedor, COUNT(IdNv) FROM Notavenda GROUP BY NomeVendedor; Depois de criada uma viso, ela estar disponvel no Dicionrio de Dados; at este ponto a instruo SELECT no foi executada. SELECT * FROM VendasPorvendedor;

DROP VIEW
DROP VIEW <nome_viso>; Exemplos DROP VIEW VendaPorVendedor; A definio ser removida do Dicionrio de Dados.

1.7. DCL (Data Control Language)


Quando um usurio cria seus objetos (tabelas, vises, procedures, etc) diz-se que ele o OWNER (dono) destes objetos. O conjunto de todos os objetos que pertencem a determinado usurio chamado de ESQUEMA deste usurio. Para acessar os objetos de outro esquema (de outro usurio) basta prefixar o nome do objeto com o nome do usurio que o criou (seu owner). Exemplo SELECT * FROM SCHEMA2.NOTAVENDA; Alguns comandos DCL so dependentes do SGBD utilizado.

GRANT
A instruo GRANT usada para garantir privilgio de acesso (direito de acesso) a um objeto do banco de dados. GRANT <privilgios> ON [TABLE] {nome_tabela | nome_viso} TO {<objeto> | <lista_usurios> | PUBLIC} [WITH GRANT OPTION] Privilgios: SELECT, INSERT, UPDATE, DELETE, ALTER, INDEX, EXECUTE, ALL

22

A opo WITH GRANT OPTION permite que o usurio que est recebendo o privilgio, possa dar GRANT neste objeto a outros usurios. Exemplo GRANT SELECT, INSERT ON NotaVenda TO julio, vera;

REVOKE
A instruo REVOKE usada para remover privilgios de acesso (direito de acesso) a um objeto do banco de dados. REVOKE <privilgios> ON [TABLE] {nome_tabela | nome_viso} FROM {<objeto> | <lista_usurios> | PUBLIC} Exemplo REVOKE SELECT, INSERT ON NotaVenda FROM vera;

1.8. Stored Procedures


Stored Procedures so programas armazenados no banco de dados. A linguagem utilizada para criao destes programas dependente do SGBD utilizado, fornecendo extenses SQL padro. Assim, possvel a criao e uso de variveis, comentrios, instrues de declarao, testes de condies, looping, etc. Uma stored procedure possui total acesso s instrues de manipulao SQL, mas geralmente no podem executar instrues DDL. Tambm pode receber parmetros de entrada e fornecer resultados para outras aplicaes. Entre as principais vantagens do uso de stored procedures esto: Projeto modular: aplicaes que acessam o mesmo banco de dados podem compartilhar stored procedures, eliminando cdigo duplicado e diminuindo o tamanho das aplicaes. Manuteno: quando um procedimento atualizado, todas as mudanas se refletem automaticamente nas aplicaes que usam aquele procedimento. Performance: a stored procedure executada na mquina servidor e no na mquina cliente, reduzindo o trfego na rede. Exemplo de Stored Procedure (Firebird): /* * Stored Procedure: DELETE_EMPLOYEE */ DECLARE VARIABLE any_sales INTEGER; BEGIN any_sales = 0; /* * If there are any sales records referencing this employee, * can't delete the employee until the sales are re-assigned * to another employee or changed to NULL. */ SELECT count(po_number) FROM sales WHERE sales_rep = :emp_num INTO :any_sales;

23

IF (any_sales > 0) THEN BEGIN EXCEPTION reassign_sales; SUSPEND; END /* * If the employee is a manager, update the department. */ UPDATE department SET mngr_no = NULL WHERE mngr_no = :emp_num; /* * If the employee is a project leader, update project. */ UPDATE project SET team_leader = NULL WHERE team_leader = :emp_num; /* * Delete the employee from any projects. */ DELETE FROM employee_project WHERE emp_no = :emp_num; /* * Delete old salary records. */ DELETE FROM salary_history WHERE emp_no = :emp_num; /* * Delete the employee. */ DELETE FROM employee WHERE emp_no = :emp_num; SUSPEND; END

1.9. Triggers
Um trigger um programa armazenado dentro do banco de dados, que executado automaticamente quando certos tipos de eventos acontecem. Estes eventos so baseados em tabelas e colunas. Por exemplo, um trigger pode ser executado quando uma linha includa ou excluda de uma tabela. Os triggers so fundamentais na manuteno da integridade do banco de dados. Podem ser usados para verificar as restries de integridade, criar valores automticos para campos e chaves primrias, notificar uma outra aplicao sobre mudanas ocorridas e guardar informaes em tabelas de histrico. Um trigger deve ser definido para disparar antes (BEFORE) ou depois (AFTER) de uma operao baseada em linhas. As operaes podem ser: INSERT, UPDATE ou DELETE. Exemplo de Trigger (Firebird): Criao de uma tabela para histrico: CREATE TABLE PRODUTO_OLD ( IDPRODUTO CHAR(5) NOT NULL, CHANGE_DATE DATE, UPDATER_ID CHAR(30), PRECOUNITARIOOLD NUMERIC(10,2), PERCENTUAL NUMERIC(5,2) );

24

Trigger para armazenar automaticamente toda mudana de preo: CREATE TRIGGER backup_produto_preco FOR PRODUTO AFTER UPDATE AS BEGIN IF (old.precounitario <> new.precounitario) THEN INSERT INTO PRODUTO_OLD (idproduto, change_date, updater_id, precounitarioold, percentual) VALUES ( old.idproduto, 'NOW', user, old.precounitario, (new.precounitario - old.precounitario) * 100 / old.precounitario ); END;

1.10. Seqncias
Seqncias so objetos do banco de dados criados por um usurio com a finalidade de criar automaticamente nmeros seqenciais. Esses nmeros seqenciais so usados tipicamente como valores para chaves primrias. Aps criada a seqncia, o SGBD se encarrega de automaticamente incrementar (ou decrementar) seu valor. Eles so armazenados e gerados independentemente das tabelas, podendo ser usados por mltiplas tabelas, geralmente em triggers BEFORE INSERT. Exemplo (ORACLE) CREATE SEQUENCE NotaVenda_Num INCREMENT BY 1 START WITH 91 MAXVALUE 100; Exemplo (Firebird) CREATE GENERATOR NotaVenda_Num;

25

2. PROJETO FSICO
2.1. Sistemas de arquivos
A meta de um Sistema Gerenciador de Banco de dados simplificar e facilitar o acesso aos dados. O desempenho de um sistema depende da eficincia das estruturas de dados usadas para representar os dados no Banco de dados e de quo eficientemente o Sistema capaz de operar sobre essas estruturas de dados.

2.2. Estrutura geral do SGBD


Algumas funes do Sistema Gerenciador de Banco de dados podem ser fornecidas pelo Sistema Operacional. Na maioria dos casos, o sistema operacional oferece apenas os servios mais bsicos e o Sistema Gerenciador de Banco de dados(SGBD) deve ser construdo sobre isto. Um SGBD consiste em uma srie de componentes funcionais incluindo: GERENCIADOR DE ARQUIVOS (FILE MANAGER) que gerencia a alocao de espao de armazenamento em disco e as estruturas de dados usadas para representar a informao armazenada em disco. GERENCIADOR DE BUFFER (BUFFER MANAGER) que o responsvel pela transferncia de informaes entre o disco de armazenagem e a memria principal. ANALISADOR DE CONSULTAS (QUERY PARSER) que traduz instrues de uma linguagem de consulta para uma linguagem mais baixo nvel. SELETOR DE ESTRATGIAS (STRATEGY SELECTOR) que tenta transformar uma requisio do usurio em uma forma equivalente, mas mais eficiente, encontrando assim uma boa estratgia para executar a consulta. GERENCIADOR DE AUTORIZAO E INTEGRIDADE (AUTHORIZATION AND INTEGRITY MANAGER) que verifica o cumprimento de restries de integridade(como as restries de chave) e verifica a autorizao de usurios para acessar dados. GERENCIADOR DE RECUPERAO (RECOVERY MANAGER) que assegura a permanncia do Banco de dados em um estado consistente(correto) a despeito de falha do sistema. CONTROLADOR DE CONCORRNCIA (CONCURRENCY CONTROLLER) que assegura que interaes concorrentes no Banco de dados procedam sem conflitos umas com as outras. Adicionalmente, diversas estruturas de dados so requeridas como parte da implementao do sistema fsico: Arquivos de Dados : que armazenam o Banco de Dados propriamente dito Dicionrio de Dados : que armazenam informaes sobre a estrutura do Banco de Dados e informaes de autorizao como restries de chave. ndices : que permitem rpido acesso de dados segundo valores particulares. Dados Estatsticos : que armazenam informaes sobre os dados no Banco de Dados. Esta informao usada pelo seletor de estratgias.

2.3. Meios Fsicos de Armazenamento


Os meios de armazenamento so classificados pela velocidade de acesso aos dados, pelo custo por unidade de dados do dispositivo e por quo confiveis so.

Cache
a mais rpida e mais cara forma de armazenamento. O tamanho da memria cache e o uso do cache gerenciado pelo sistema operacional. No devemos preocupar-nos com o gerenciamento do armazenamento tipo cache no sistema de Banco de Dados.

26

Memria Principal
meio de armazenamento usado para os dados que esto disponveis para ser operados. As instrues de mquina de uso geral operam na memria principal. Embora a memria principal possa conter diversos megabytes de dados, ela geralmente muito pequena para armazenar o Banco de Dados inteiro. O conteudo da memria principal perdido se ocorrer falha de energia ou queda do sistema.

Armazenamento em Disco
o meio principal para o armazenamento de dados de longa permanncia. Tipicamente todo Banco de Dados armazenado em disco. Os dados precisam ser movidos do disco para a memria principal para que sejam processados. Aps as operaes, os dados precisam retornar ao disco. referido como armazenamento de acesso direto, porque possvel ler os dados do disco em qualquer ordem. O armazenamento em disco normalmente sobrevive a falha de energia e queda do sistema.

Armazenamento em Fita
o armazenamento usado primariamente para cpias de reserva e dados histricos. Embora a fita seja bem mais barata que o disco, o acesso aos dados muito lento, uma vez que a fita precisa ser lida seqencialmente a partir do incio. Obs : a transferncia de dados entre o disco e a memria principal feita em unidades chamadas blocos. um bloco uma seqncia contgua de bytes de uma nica trilha de um prato. o tamanho dos blocos varia de 512 bytes a diversos milhares de bytes.

2.4. Organizao de arquivos


Um arquivo organizado logicamente como uma seqncia de registros. Esses registros so mapeados em blocos de discos. Embora os blocos sejam de tamanho fixo determinado pelas caractersticas fsicas do disco e pelo sistema operacional, os tamanhos de registros variam. Em um Banco de dados Relacional, as tuplas de relaes distintas so geralmente de tamanho diferente.

Registro de Tamanho Fixo


Como exemplo vamos considerar um arquivo de registros do tipo DEPSITO: Type DEPSITO = record Nome-Agncia :char(20); Nmero-Conta :inteiro; Nome-Cliente :char(20); Saldo :real; end; Se assumirmos que cada caractere ocupa um byte, que um inteiro ocupa 2 bytes e que um real ocupa 4 bytes, nosso registro DEPSITO mede 46 bytes.

27

Copa Ipanema Leblon Copa Copa Ipanema

1320 1420 1430 1350 1720 1730

Carlos Joo Pedro Mrio Jlio Marta

1000 500 300 3000 1250 2300

Registro de Tamanho Varivel


Surgem em Sistema de Banco de Dados: Armazenamento de mltiplos tipos de registros em um mesmo arquivo Tipos de registros que permitem tamanhos variveis em um ou mais campos Tipos de registros que permitem campos repetidos. Type LISTA-DEPSITO = record Nome-Agncia : char(20); Info-Conta : Array [1- 00) of Record Nmero-Conta :inteiro; Nome-Cliente :char(20); Saldo :Real; End; End; Definimos Info-Conta como um vetor com um nmero arbitrrio de elementos e portanto no h limite quanto ao tamanho de um registro.

copa Ipanema leblon

1320 1420 1430

Carlos Joo Pedro

1000 500 300

1350 1730

Mrio Marta

3000 2300

1720

Jlio

1250

2.5. Armazenamento no Dicionrio de Dados


Consideramos at agora apenas a representao das prprias relaes. Um SGBD Relacional precisa manter dados sobre as relaes. Essa informao chamada de Dicionrio de Dados ou Catlogo de Sistema. Entre os tipos de informaes que o sistema precisa manter esto: Nome das Relaes Nome dos atributos de cada relao Domnio dos atributos Nomes das vises definidas no Banco de Dados e definies destas vises. Restries de integridade para cada relao.

Adicionalmente aos itens acima, muitos sistemas mantm os seguintes dados sobre usurios: Nomes Usurios autorizados Informaes contbeis sobre o usurio Todas estas informaes, de fato, constituem um pequeno banco de dados. alguns sistemas de banco de dados armazenam essas informaes usando estruturas de dados e cdigos especiais. geralmente, prefervel armazenar os dados sobre o banco de dados no prprio banco de dados.

28

usando o banco de dados para armazenar dados do sistema, simplificamos a estrutura geral do sistema e permitindo o uso da fora total do banco de dados para possibilitar acesso rpido a esses dados.

2.6. Gerenciamento de buffers


J discutimos a necessidade do uso de armazenamento em disco para o Banco de Dados e a necessidade de transferir dados entre a memria principal e o disco. Uma meta importante minimizar o nmero de blocos aos quais preciso fazer acesso. Outra forma de reduzir o nmero de acessos a disco manter tantos blocos quanto for possvel na memria principal. A meta maximizar a chance de que quando se fizer o acesso a um bloco, ele esteja na memria principal e assim no seja necessrio nenhum acesso a disco. Como no possvel manter todos os blocos na memria principal, precisamos gerenciar a alocao do espao disponvel na memria principal, para o armazenamento dos blocos. O BUFFER que pode ser traduzido como memria intermediria, aquela parte da memria principal disponvel para o armazenamento de bloco de disco. O subsistema responsvel pela alocao do espao do BUFFER chamado de Gerenciador de Buffer. O Gerenciador de Buffer intercepta todas as requisies de blocos do Banco de Dados feitas pelo restante do sistema. Se o Bloco j estiver no Buffer, passado ao processo requisitante o endereo do bloco na memria principal. Se o bloco no estiver Buffer, o gerenciador de Buffer l o bloco do disco para o Buffer e passa o endereo do bloco na memria principal para o requisitante.

Estratgia de Substituio
Quando no h espao disponvel no Buffer, um bloco precisa ser removido do Buffer antes que um novo possa ser lido. A suposio que os blocos aos quais foram feitos acesso mais recentemente so bons candidatos a serem novamente referenciados. Portanto o bloco a ser substitudo ser aquele usado h mais tempo; isto chamado de Esquema de Substituio de bloco L.R.U. (Least Recently Used), no qual o bloco usado h mais tempo regravado no disco e removido do Buffer.

2.7. Indexao
Um ndice para um arquivo funciona da mesma forma que um fichrio de uma biblioteca. Se estamos procurando um livro de um determinado autor, observamos o catlogo do autor, e a ficha no fichrio informa onde encontrar o livro. Para facilitar a busca no fichrio, as fichas so mantidas em ordem alfabtica, assim no preciso verificar cada carto para encontrar o que queremos. A fim de permitir um rpido acesso aleatrio aos registros num arquivo, uma estrutura de ndice usada. Cada estrutura de ndice esta associada a uma chave de busca particular(ndice). Assumimos que todos os arquivos so ordenados seqencialmente e assim tem uma chave de busca primria. Tais arquivos, juntamente com um ndice primrio so chamados arquivos seqenciais indexados. So projetados para aplicaes que requerem tanto processamento seqencial do arquivo inteiro como acesso aleatrio para registros individuais. Existem dois tipos de ndices que podem ser usados: ndice Denso Um registro de ndice aparece para cada chave de busca no arquivo. Esse registro contm o valor da chave de busca e um ponteiro para o registro. ndice Esparso Registros de ndices so criados somente para alguns registros. Para localizar um registro, encontramos o registro de ndice com o maior valor da chave de busca que seja menor ou igual ao valor da chave de busca que estamos procurando. Iniciamos com o registro apontado por aquele registro de ndice e seguimos os ponteiros no arquivo at encontrar o registro desejado.

29

3. AMBIENTE DE BANCO DE DADOS


3.1. Modelo de Transao
Uma transao uma unidade de programa que faz o acesso e possivelmente analisa vrios itens de dados. Cada um desses itens lido uma vez pela transao e gravado uma vez se ela atualiza aquele item de dado. Requeremos que as transaes no violem qualquer restrio de consistncia do BD. Isto , se era consistente quando uma transao iniciou, o BD precisa ser consistente quando a transao terminar com sucesso. Entretanto, durante a execuo de uma transao, pode ser necessrio temporariamente permitir a inconsistncia. Essa inconsistncia temporria, ainda que necessria, pode levar a dificuldades se ocorrer uma falha.

Exemplo: Transferncia bancria


Seja T uma transao que transfira $50 da conta A para a conta B. Esta transao pode ser definida como: T : Read (A,a1) a1:= a1 - 50 Write (A,a1) Read (B,b1) b1:= b1 + 50 Write (B,b1) onde A a conta e a1 o saldo

Suponha que logo antes da transao T, os valores das contas A e B sejam $1000 e $2000 respectivamente. Suponha que na memria principal contenha o bloco de buffer de A, mas no o de B. Quando Read (A,a1) executado, a ao que toma lugar atribuir o valor $1000 para a1. Quando Read (B,b1) executado, no entanto, o sistema precisa antes trazer o bloco fsico de B para a memria principal depois, atribuir $2000 a b1.

A=1000

Memria Principal A=1000

B=2000 DISCO Suponha que, durante a execuo da transao T, ocorra uma falha que impea T de completar sua execuo com sucesso. Alm disso, suponha que isto tenha ocorrido depois da operao Write (A,a1), mas antes da operao Write (B,b1). Neste caso os valores das contas A e B no BD no disco so $950 e $2000. Assim como resultado da falha, o estado do sistema no reflete mais o estado real do mundo supostamente refletido pelo BD. Chamamos tal estado inconsistente. Repare que responsabilidade do programador definir adequadamente as vrias transaes para que cada uma preserve a consistncia do BD. Assim, Uma transao ou tem que ser totalmente realizada (completada) ou nada pode acontecer; se ocorrer uma falha durante sua execuo, esta tem que ser desfeita.

30

Estados de uma Transao


Begin_transaction: incio da transao READ/WRITE: operaes sobre os dados End_transaction: trmino da transao Commit: confirmao da transao Rollback: transao abortada

Propriedades das transaes (ACID)


Atomicidade A transao tem que ser completada (com commit ou rollback). Consistncia A transao tem que manter a consistncia do BD (nenhuma violao de integridade). Isolamento Transaes simultneas no podem interferir uma na outra. Durabilidade Uma transao compromissada tem que garantir que seu efeito no BD perdure.

3.2. Log do Banco de Dados


A estrutura mais largamente usada para registrar modificaes no BD o LOG. Cada registro do LOG descreve uma nica gravao no BD e tem os seguintes campos: Nome da Transao : o nome nico da transao que executou a operao Write Nome do item de dado : o nome nico do item de dado gravado Valor antigo : o valor do item de dado anterior a gravao. Novo valor : o valor do item de dado depois da gravao. Outros registros especiais de LOG existem para gravar eventos significativos durante o processamento de transaes, tais como o incio de uma transao, o controle de trmino de uma transao (Sucesso, Aborto). <Ti start> <Ti,Xj,V1,V2> <Ti commit> <Ti abort> A A o A A transao Ti iniciou. transao Ti executou uma gravao num item de dado Xj e Xj tem valor V1 antes da gravao e ter o valor V2 depois. transao Ti terminou com sucesso. transao Ti foi abortada.

Toda vez que uma transao executa uma gravao, essencial que o registro de LOG para essa gravao seja criado antes que o BD seja modificado. Uma vez que um registro de LOG exista, podemos gravar a modificao no BD se isto for desejvel. Temos tambm a habilidade de desfazer uma modificao que j tenha sido gravada no BD. Isto feito usando o campo com o valor antigo do registro do LOG.

3.3. Modificao do Banco de Dados Adiada


A Tcnica de adiar a modificao assegura a atomicidade da transao gravando todas as modificaes do BD no LOG, mas adiando a execuo de todas as operaes Write no BD de uma transao at que a ltima instruo da transao seja executada. Quando uma Transao executa a ltima instruo, a informao no LOG associada transao usada na execuo das gravaes adiadas. A execuo da transao Ti procede da seguinte maneira. Antes que Ti inicie sua execuo, um registro <Ti start> escrito no LOG. Uma operao Write(X,xj) executada por Ti resulta na gravao de um novo registro no LOG. Finalmente quando Ti terminar a ltima instruo, um registro <Ti commit> escrito no LOG. Ai os registros associados transao no LOG so usados na execuo das gravaes adiadas.

31

Exemplo Modificao BD Adiada


T0 : Transao que transfere $50 da conta A para conta B T0 : Read (A,a1) a1 := a1 - 50 Write (A,a1) Read (B,b1) b1 := b1 + 50 Write (B,b1) sendo A conta e a1 o saldo

T1 : Transao que saque $100 da conta C T1: Read (C,c1) c1 := c1 - 100 Write (C,c1)

Suponha que essas transaes seja executadas uma depois da outra na ordem To seguida de T1 e que os valores das contas A, B, C antes da execuo sejam $1000, $2000, $700. Seja a poro do LOG contendo as informaes relevantes sobre essas duas transaes: <To start> <To, A, 1000, 950> <To, B, 2000, 2050> <To, commit> <T1 start> <T1, C, 700, 600> <T1, commit>

3.4. Controle de Concorrncia


Um dos conceitos mais importantes em sistemas modernos a multiprogramao. Com diversas transaes sendo executadas ao mesmo tempo, o processador pode ser compartilhado entre elas. Os benefcios da multiprogramao consistem no aumento da utilizao do processador e uma produo(troughput) maior de transaes, isto , a quantidade de trabalho que realizado em um intervalo de tempo determinado. Assim, em um ambiente multiprogramado, diversas transaes podem ser executadas concorrentemente. necessrio ento que o sistema controle a interao entre as transaes concorrentes a fim de previnir que elas destruam a consistncia do BD. Esse controle conseguido por meio de vrios mecanismos aos quais definimos como ESQUEMAS DE CONCORRNCIA.

Escalonamentos (Schedules)
Quando diversas transaes so executadas concorrentemente, a consistncia do BD pode ser destruda apesar de cada transao individual estar correta. As seqncias de execuo que uma transao deve seguir so chamadas escalonamento. Elas representam a ordem cronolgica na qual as instrues so executadas no sistema.

32

Serializao de escalonamentos
Um escalonamento serial se, para toda transao que participa do escalonamento, todas as operaes da transao so executadas consecutivamente. Caso contrrio o escalonamento nserial. Um escalonamento serializvel se for equivalente a um escalonamento serial.

Exemplo A - Escalonamento serial T0 seguido de T1


Obs : vamos assumir para simplificar que a varivel local temporria tem o mesmo nome do dado que est sendo acessado, sendo assim usaremos Read(A) em lugar de Read(A,a) Vamos assumir que : T0 : Transfere $50 da conta A para conta B T1 : Transfere 10% da conta A para conta B Digamos que os valores das contas A e B sejam $1000 e $2000 T0 ------------------------> Read(A) A := A - 50 Write(A) Read(B) B := B + 50 Write(B) Tempo T1 -------------------------> ------------------------->

Read(A) Temp := A * 0,1 A := A - Temp Write(A) Read(B) B := B + Temp Write (B) Temos como resultado A = $855 e B = $2145 , isto a quantia total de dinheiro nas contas foi preservado (A+B)

Exemplo B - Escalonamento serial T1 seguido de T0


Temos como resultado A = $850 e B = $2150 tambm havendo preservao da soma das contas.

Exemplo C - Escalonamento concorrente serializvel


T0 ------------------------> Read(A) A := A - 50 Write(A) Tempo T1 -------------------------> ------------------------->

Read(A) Temp := A * 0,1 A := A - Temp Write(A) Read(B) B := B + 50 Write(B) Read(B) B := B + Temp Write (B)

33

Temos como resultado o mesmo valor de To seguido de T1, a soma das contas foi preservada. ATENO: Os escalonamentos concorrentes nem sempre resultam um estado correto.

Bloqueio (Lock)
So necesrias tcnicas para se manter o isolamento durante a execuo de transaes simultneas. Uma destas tcnicas o bloqueio (lock). A idia bsica do bloqueio simples. Quando uma transao necessita de uma garantia para que certo objeto, no qual a mesma esta interessada (um registro do BD, em geral) no mude de forma imprevisvel, a transao adquire um bloqueio naquele objeto. Se a Transao A detm um bloqueio exclusivo no registro R, ento uma solicitao da transao B por um bloqueio do registro R, far com que B entre em estado de espera; B continuar esperando at que o bloqueio de A seja liberado. O deadlock pode ocorrer quando duas transaes esto bloqueando um registro e cada uma delas est esperando a outra, para continuar o processamento.

3.5. Recuperao de Paradas e Falhas


Um Sistema de computao, como qualquer outro dispositivo eltrico ou mecnico, est sujeito falhas. Existem vrias causas para essas falhas, incluindo quebra do disco, queda de fora, erros de software, fogo na sala de mquinas, sabotagem, etc. Em cada um desses casos, informaes que se referem ao Sistema de BD se perdem. Uma parte essencial do Sistema de BD um esquema de recuperao responsvel pela deteco de falhas e pela restaurao do BD para um estado consistente que existia antes da ocorrncia da falha. Uma transao uma coleo de operaes que executa uma nica funo lgica numa aplicao no BD. Cada transao uma unidade de Atomicidade. Uma uesto importante no processamento de transaes do BD a preservao da Atomicidade, independente da possibilidade de falha do sistema do computador. Na verdade um ambiente de BD trabalha com base em duas atitudes bsicas: Aes tomadas durante o processamento normal da transao com o objetivo de assegurar que informaes suficientes existam para permitir a recuperao das falhas. Aes tomadas em seguida as falhas para assegurar a consistncia e a atomicidade da transao.

Tipos de falhas
Falha no computador (system crash): um erro de hardware ou software, que pode causar a perda do contedo na memria. Erro de sistema ou de transao: alguma operao na transao pode causar uma falha, tal como, sobrecarga de valor inteiro, ou diviso por zero. Erros locais ou deteco de condies de exceo na transao: durante a execuo, algumas condies podem ocorrer que necessitem do cancelamento da transao, por exemplo, um dado para uma operao pode no ser encontrado. Obrigao de controle de concorrncia: o mtodo de controle de concorrncia pode decidir abortar a transao, para ser recomeada depois, por diversos motivos, como por exemplo deadlock. Falha em disco: alguns blocos do disco podem perder seus dados por causa de um defeito no cabeote de leitura e escrita. Problemas fsicos e sinistros: uma lista infinita de problemas que podem acontecer, tais como falta de energia, fogo, sabotagem, erros de entrada de dados do operador, etc.

34

Estratgias tpicas
Se houver dano extenso a uma grande parte do BD devido a alguma falha catastrfica, o mtodo de recuperao recarrega uma cpia de uma verso antiga do BD e restaura um estado mais recente refazendo transaes comprometidas a partir do log. Usa um backup e geralmente pra o sistema para refazer. Quando o BD apenas se tornar inconsistente devido a alguma falha no catastrfica, a estratgia reverter as alteraes que causaram inconsistncia desfazendo e, algumas vezes, refazendo determinadas operaes de modo a retornar o BD a um estado consistente. Um deadlock, por exemplo, pode causar uma falha deste tipo.

3.6. Segurana e Integridade


SEGURANA : Refere-se proteo de dados contra divulgao, alterao ou destruio no autorizadas. INTEGRIDADE : Refere-se preciso ou validade dos dados Em outras palavras , Segurana garante que os usurios tem permisso para fazer o que estiverem tentando fazer, e Integridade garante que as coisas que esto tentando fazer so corretas.

Segurana
H inmeros aspectos relativos ao problema de segurana, entre os quais: Aspectos legais, Sociais e ticos ( por exemplo, a pessoa que faz a solicitao referente ao crdito de um cliente, tem o direito legal em relao informao solicitada?) Controles Fsicos( por exemplo, a sala do computador deve ficar trancada?) Questes Polticas ( por exemplo, como a empresa decide a quem deve permitir acesso a que?) Problemas Operacionais ( por exemplo, na adoo de esquema de senha, como as prprias senhas so mantidas em segredo?) e finalmente Assuntos que interessam especificamente ao prprio Sistema de BD As Unidades de dados para fins de segurana, isto , o objeto de dados que talvez deva ser protegido individualmente, pode de um lado, referir-se a todo um conjunto de tabelas e , de outro, a um valor de dado especfico em determinada posio, linha e coluna dentro de uma tabela especfica. Um certo usurio ter acesso ou diferentes autoridades sobre objetos( por exemplo autorizao de seleo para uma tabela e atualizao par outra) Todas as decises referentes aso direitos que devem ser concedidos a tal usurio, so decises polticas e no tcnicas. Como tais fogem claramente a competncia do DBMS propriamente dito. Para que o sistema seja capaz de decidir que limitaes se aplicam a determinada solicitao, ele deve saber reconhecer a fonte daquela solicitao, isto , deve ser capaz de reconhecer de que usurio especfico partiu determinada solicitao. Por isso, quando os usurios entram no sistema, exige-se dos mesmos que identifique o seu ID de Usurio e tambm sua senha.

Integridade
O termo refere-se a exatido e preciso dos dados no BD. Os Sistemas atuais ainda so fracos quanto integridade. A verificao da integridade, em sua maior parte feita pelo usurio. Seria prefervel, obviamente, se especificasse as limitaes de integridade de maneira mais direta e assim obtivesse que o sistema executasse a verificao. Na realidade podemos resumir : Limitaes de Domnio Limitaes de chave estrangeira Limitaes funcionais

35

4. BIBLIOGRAFIA
1 ELMASRI, Ramez e NAVATHE, Shamkant B. Fundamentals of Database System. Third Edition. Ed. Addison-Wesley, 2000. 2 KORTH, H. F. e SILBERSCHATZ, A. Sistemas de Banco de Dados. Terceira edio, So Paulo, Ed. McGraw Hill, 1999. 3 HEUSER, Carlos Alberto.Projeto de Banco de Dados. Porto Alegre. Ed. Sagra Luzzato, 1998. 4 - DATE, C. J. Introduo a Sistemas de Banco de Dados, 7o edio americana, Rio de Janeiro, Ed. Campus, 2000. 5 - STEZER, Valdemar W.. Banco de Dados, So Paulo, Ed. Edgar Blucher, 1986.

36