Professional Documents
Culture Documents
FORA
BD II
Banco de Dados II
SQL Ambiente de Bancos de Dados
1. SQL - Structured Query Language...................................................................... 3 1.1. Histrico.................................................................................................... 3 1.2. Conceitos .................................................................................................. 3 1.3. Linguagem ................................................................................................ 4 1.4. Modelo de Exemplo..................................................................................... 4 1.5. DDL (Data Definition Language) ................................................................... 5 1.6. DML (Data Manipulation Language) ........................................................... 11 1.7. DCL (Data Control Language) .................................................................... 22 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 2.4. Organizao de arquivos ........................................................................... 27 2.5. Armazenamento no Dicionrio de Dados...................................................... 27 2.6. Gerenciamento de buffers ......................................................................... 28 2.7. Indexao ............................................................................................... 28 3. AMBIENTE DE BANCO DE DADOS .................................................................... 30 3.1. Modelo de Transao ................................................................................ 30 3.2. Log do Banco de Dados ............................................................................. 31 3.3. Modificao do Banco de Dados Adiada ....................................................... 31 3.4. Controle de Concorrncia .......................................................................... 32 3.5. Recuperao de Paradas e Falhas ............................................................... 34 3.6. Segurana e Integridade ........................................................................... 35 4. Bibliografia.................................................................................................... 36
1.2. Conceitos
Tabela (table)
Equivale relao, no Modelo Relacional.
Coluna (column)
Equivale aos atributos da relao, no Modelo relacional.
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.
Esquema (schema)
O conceito de uma esquema SQL foi definido com o SQL2 para agrupar tabelas e outros elementos que pertenam a mesma aplicao.
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.
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 ;
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 } | 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 }] [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. Legenda: [ : Opcional | : ou
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 EX01:
Restries a nvel de Tabela: CREATE TABLE TABDEPTO( NUMDEPTO INTEGER, NOMEDEPTO VARCHAR(15), LOCALDEPTO VARCHAR(15), CONSTRAINT PKTABDEPTO primary key (NUMDEPTO), CONSTRAINT UKNOMEDEPTO UNIQUE(NOMEDEPTO) );
CREATE TABLE TABEMP( NUMEMP INTEGER, NOMEEMP VARCHAR(30), SALARIOEMP DECIMAL(8,2), SEXOEMP CHAR(1), CARGOEMP VARCHAR(30), NUMDEPTO INTEGER NOT NULL, CONSTRAINT PKTABEMP PRIMARY KEY (NUMEMP), CONSTRAINT CKSEXOEMP check (SEXOEMP IN('M','F')), CONSTRAINT FKTABEMPTABDEPTO FOREIGN KEY(NUMDEPTO) REFERENCES DEPTO(NUMDEPTO) ON DELETE CASCADE ); Restries a nvel de Coluna: CREATE TABLE DEPTO( NUMDEPTO INTEGER NOT NULL PRIMARY KEY, NOMEDEPTO VARCHAR(15) unique, LOCALDEPTO VARCHAR(15) ); CREATE TABLE NUMEMP NOMEEMP SALARIOEMP SEXOEMP CARGOEMP NUMDEPTO ); Exemplos EX02: EMP( INTEGER NOT NULL PRIMARY KEY, VARCHAR(30), DECIMAL(8,2), CHAR(1) check (SEXOEMP IN('M','F')), VARCHAR(30), INTEGER NOT NULL REFERENCES DEPTO(NUMDEPTO) ON DELETE CASCADE
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 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};
10
DROP INDEX
DROP INDEX <nome_ndice>; Exemplo DROP INDEX IDX_Produto_Descricao;
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;
11
Atualizar registros
UPDATE nome_tabela SET nome_coluna = <valor> [, nome_coluna = <valor>] [WHERE <condio>]
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.
12
= <> > < Between <valor> and <valor> In (lista) Like <valor> IS NULL Exemplos
Igual a Diferente de Maior que Menor que Entre dois valores Qualquer valor da lista Corresponde a um padro valor Nulo
SELECT IdProduto, Descricao FROM Produto WHERE Tipo = 'HARDWARE' SELECT * FROM Produto WHERE Precounitario > 10.00 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%'
13
- 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)
2. Conjuno de Condies
Vrias condies podem ser conectadas na clusula WHERE usando o operador AND.
SELECT IdProduto, Descricao FROM Produto WHERE (Tipo = 'HARDWARE') AND (Precounitario > 15.00);
3.
Disjuno de Condies
Uso do operador OR. SELECT IdProduto, Descricao FROM Produto WHERE (Tipo = 'SOFTWARE') OR (Descricao LIKE 'M%');
4.
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;
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
14
Tabela Produto com 4 registros SELECT IdNv,Idprod FROM NotaVenda, Produto; {gera um resultado com 56 registros}
As linhas de uma tabela podem ser combinadas s linhas de outra tabela atravs de valores iguais em colunas correspondentes. 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>
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
16
Funes de agregao So funes do padro SQL que trabalham sobre um grupos de linhas, retornando um nico valor com resultado.
Mdia dos valores da coluna Quantidade de linhas Menor valor da coluna Maior valor da coluna Soma dos valores da coluna
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;
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;
Exemplo: Quantos produtos diferentes j foram vendidos? SELECT COUNT(IdProduto) FROM ItemNota; --->> Errado, pois conta produtos duplicados Correto: SELECT COUNT(DISTINCT IdProduto) FROM ItemNota; Para contar todas as linhas de uma tabela pode ser usado COUNT(*) (linhas com valores NULOS tambm sero consideradas). Usando COUNT(atributo) considera apenas NOT NULL. Usando COUNT(distinct atributo) considera somente valores distintos. 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?
17
- 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 I.IdNV;
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:
18
- Qual a quantidade de notas emitidas em cada dia por cada vendedor? SELECT Data, VendedorNome, COUNT(IdNV) FROM NotaVenda GROUP BY Data, VendedorNome;
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.
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 cinco vezes o preo unitrio do produto 10.
19
SELECT Descricao FROM Produto WHERE Precounitario = (SELECT (Precounitario * 10) 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');
6.
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');
7. 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
20
8.
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
9. 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.
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;
21
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.
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 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.
22
REVOKE <privilgios> ON [TABLE] {nome_tabela | nome_viso} FROM {<objeto> | <lista_usurios> | PUBLIC} Exemplo REVOKE SELECT, INSERT ON NotaVenda FROM vera;
23
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) ); 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,
24
1.10. Sequncias
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;
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.
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 gigabytes 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.
27
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. 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.
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
28
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
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
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
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.
31
T1:
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>
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 no serial. Um escalonamento serializvel se for equivalente a um escalonamento serial.
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)
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.
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.
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
Bibliografia Bsica: DATE, C. J., Introduo a Sistemas de Banco de Dados, 8a edio. Editora Campus, 2004.
Bibliografia Complementar: ELMASRI, E. R., NAVATHE, S., Sistemas de Banco de Dados. 4a 2005. edio. Addyson Wesley,
KORTH, H. F, SILBERSCHATZ, A. Sistema de bancos de dados. 5a edio. So Campus, 2006. MACHADO, F. N. R.. ABREU, Prtica. Editora rica. 1999.
Paulo:
36