Prof. Jos Roberto de Arajo Fontoura Prof. Fernando Cardeal Modelo = Modelo a representao abstrata e simplificada de um sistema real, com a qual se pode explicar ou testar o seu comportamento, em seu todo ou em partes.
Modelo - Exemplo = Uma planta baixa de um apartamento venda no jornal de domingo. = Modelo a representao abstrata e simplificada de um sistema real. = Logo, o modelo no o objeto real mas algo que o representa, com maior ou menor fidelidade. O Papel do Objeto Observado = Objeto Observado o objeto que serve de referncia para ser mapeado pelo observador.
O Objeto Observado pode ser real ou imaginrio. Principais Questionamentos QUANTO A MODELAGEM DE DADOS
= O que percebemos ?
= Como eles nos so apresentados ?
= O que devemos buscar ? Modelagem como um Processo Estruturado. Etapas:
= Abrangncia
= Nvel de Detalhamento
= Tempo para Produo do Modelo
= Recursos Disponveis O Processo de Modelagem Modelagem como um Processo Estruturado. Definies:
= Abrangncia Refere-se a profundidade da observao do objeto.
Exemplo: Um artista no bosque ao iniciar uma pintura j deve ter em mente se observar toda a paisagem para pint-la ou se focar sua ateno apenas em uma nica rvore. O Processo de Modelagem Modelagem como um Processo Estruturado. Etapas:
= Nvel de Detalhamento Refere-se ao nvel de representao da realidade observada.
Exemplo: No bosque observado, o artista pintar inclusive o ninho de passarinho que est em determinada rvore ou somente a rvore ? O Processo de Modelagem Modelagem como um Processo Estruturado. Etapas:
= Tempo para Produo do Modelo Tem relao intrnseca com a abrangncia e o nvel de detalhamento.
Exemplo: Um artista pode querer pintar todo o bosque, com todos os ninhos, entretanto s tem o dia de hoje para faz-lo. O Processo de Modelagem Modelagem como um Processo Estruturado. Etapas:
= Recursos Disponveis Refere-se a quantidade e qualidade dos recursos deixados disposio para serem utilizados.
Exemplo: O artista pode querer pintar o riacho, mas no dispe da cor necessria para faz-lo naquele momento, ou no tem a quantidade necessria
O Processo de Modelagem Modelagem como um Processo Estruturado. Etapas :
= A observao dos Objetos = O entendimento dos Conceitos = A Representao dos Objetos = A Verificao de Fidelidade e Coerncia = A validao do Modelo
Execuo da Modelagem Modelagem como um Processo Estruturado. Etapas :
= A observao dos Objetos
Elementos como: entrevistas, anlise de documentos, reunies, questionrios e outros mtodos so importantes na obteno das caractersticas do objeto.
Execuo da Modelagem Modelagem como um Processo Estruturado. Etapas :
= O entendimento dos Conceitos
O entendimento dos conceitos se refere na verdade s regras de como se comportam determinados eventos na empresa, ou seja, as regras de negcio. Execuo da Modelagem Modelagem como um Processo Estruturado. Etapas :
= A Representao dos Objetos
A dominao de determinada tcnica de representao de dados de extrema importncia, entretanto caso no tenhamos absorvido o funcionamento interno da empresa (regra de negcio), de nada adiantar ser expert nessa ou naquela tcnica. Execuo da Modelagem Modelagem como um Processo Estruturado. Etapas :
= A Verificao de Fidelidade e Coerncia
Aps a utilizao de uma determinada tcnica, deve- se observar atentamente se o modelo resultante representa fielmente o que foi observado do funcionamento da empresa. Execuo da Modelagem Modelagem como um Processo Estruturado. Etapas :
= A validao do Modelo
Consiste na verdade em testar o modelo. Se em um primeiro teste no conseguimos descobrir algo que possa ser melhorado, devemos realmente ficar preocupados.
Execuo da Modelagem Objetivo do Modelo de dados = Representar um ambiente observado; = Servir de instrumento para a comunicao; = Favorecer o processo de verificao e validao; = Capturar aspectos de relacionamentos entre os objetos observados; = Servir como referencial para a gerao de estruturas de dados; = Estabelecer conceitos nicos a partir de vises diversas. Objetivo do Modelo de dados = Representar um ambiente observado:
Abstrair do ambiente observado o seu funcionamento, ou seja as regras impostas pelo negcio ou pelas pessoas. Seja um sistema de informaes, uma descrio de execuo de tarefas ou um processo de fabricao. Objetivo do Modelo de dados = Representar um ambiente observado:
Abstrair do ambiente observado o seu funcionamento, ou seja as regras impostas pelo negcio ou pelas pessoas. Seja um sistema de informaes, uma descrio de execuo de tarefas ou um processo de fabricao. Objetivo do Modelo de dados = Representar um ambiente observado; = Servir de instrumento para a comunicao; = Favorecer o processo de verificao e validao; = Capturar aspectos de relacionamentos entre os objetos observados; = Servir como referencial para a gerao de estruturas de dados; = Estabelecer conceitos nicos a partir de vises diversas. O Que Banco de Dados um sistema computadorizado de registros, onde os usurios podem: Acrescentar novos arquivos ao Banco de Dados Inserir dados em arquivos existentes Buscar dados em arquivos existentes Excluir dados em arquivos existentes Alterar dados em arquivos existentes Remover Arquivos existentes do Banco de Dados Banco de Dados Integrado a unificao de vrios arquivos que, de outro modo, seriam distintos, com a eliminao de qualquer redundncia parcial ou total entre esses arquivos. Compartilhado quando diferentes usurios podem ter acesso aos mesmos dados, possivelmente ao mesmo tempo. Usurios Programadores de Aplicaes So responsveis pelas aplicaes que acessam os bancos de dados, essas escritas em alguma linguagem. Usurios Finais Os que acessam o banco de dados interativamente por meio de uma das aplicaes. DBA Administrador de Banco de Dados o responsvel pela manuteno do banco de dados operacional. Dados Dados Persistentes So os dados que efetivamente esto no banco, no so transitrios como os dados ainda na memria, e uma vez aceito no mesmo s podem ser removidos por alguma requisio explcita ao SGBD. Dados Um modelo de dados uma definio abstrata, autnoma e lgica dos objetos, operadores e outros elementos que, juntos, constituem a mquina abstrata com a qual os usurios interagem. Os objetos nos permitem modelar a estrutura dos dados e os operadores nos permitem modelar seu comportamento. Dados Implementao uma representao fsica em uma mquina real dos componentes da mquina abstrata que, juntos, constituem esse modelo. Banco de Dados Abordagem dos Bancos de Dados Os dados podem ser compartilhados; A redundncia pode ser reduzida; A inconsistncia pode ser evitada (at certo ponto); O suporte a transaes pode ser fornecido; A integridade pode ser mantida; A segurana pode ser reforada; Requisitos contraditrios podem ser equilibrados; Os padres podem ser impostos.
Banco de Dados Independncia de Dados Fsica Imunidade de programas de aplicao a alteraes no modelo de armazenar fisicamente os dados e obter acesso a eles. Arquitetura Vises Interno; Conceitual; Externo. Arquitetura Mapeamentos Conceitual / Interno Define a correspondncia entre a viso conceitual e o banco de dados armazenado. Externo / Conceitual Define a correspondncia entre uma viso externa especfica e a viso conceitual. Arquitetura DBA Administrador de Banco de Dados Define o Esquema Conceitual Define o Esquema Interno Tem Contato com o Usurio Define Restries de Segurana e Integridade Define Normas de Descarga e Recarga Monitora o Desempenho e Responde a Requisitos de Mudanas S.G.B.D Definies de Dados; Manipulao de Dados; Otimizao e Execuo; Segurana e Integridade de Dados; Recuperao de Dados e Concorrncia; Dicionrio de Dados; Desempenho.
Banco de Dados Relacional Modelo Relacional Aspecto Estrutural: Os dados no banco so percebidos pelo usurio unicamente como tabelas. Aspecto de Integridade:Essas tabelas satisfazem a certas restries de integridade. Aspecto Manipulador:So manipuladores os operadores de restrio, projeo e juno. Banco de Dados Relacional Aspecto de Restrio extrai linhas especificas de uma tabela; Aspecto de projeo extrai colunas especificas de uma tabela; Aspecto de juno une duas tabelas com base em valores comuns em uma tabela comum. Banco de Dados Relacional Modelo Relacional consiste em cinco componentes: Uma coleo ilimitada de tipos escalares (incluindo o tipo booleano ou valor verdade) Um gerador de tipo de relao e uma interpretao pretendida para esses tipos de relaes gerados Recursos para definio de RelVars desse tipo de relaes gerados Um operador de atribuio relacional para atribuio de valores de relaes a essas RelVars Uma coleo ilimitada de operadores relacionais genricos (a lgebra relacional) para derivar valores de relaes a partir de outros valores de relaes SQL Definio de Dados (DDL) Introduo Exemplos de SGBDs que seguem o padro SQL: Oracle, DB2, Sybase, Informix, SQLServer, entre outros. Principais Intrues da linguagem de definio de dados (DDL Data Definition Language) CREATE TABLE ALTER TABLE DROP TABLE CREATE VIEW DROP VIEW CREATE INDEX DROP INDEX Tabelas bsicas Tabela do sistema relacional consiste em Uma linha de cabealho (que especifica uma ou mais colunas) + Zero ou mais linhas de valores de dados (cada linha contm um valor de dado para cada coluna especificada na linha do cabealho) Os nmeros da linhas variam em funo do momento No existe ordem das linhas. As linhas de uma tabela relacional so consideradas desordenadas. Uma relao um conjunto matemtico (conjunto de linhas) conjuntos em matemtica no tm ordenao Tabelas bsicas Tabela autnoma (tem existncia prpria) que recebe um nome As tabelas construdas como resultado de uma consulta no tem nome prprio e tem uma existncia efmera Uma tabela definida com as seguintes caractersticas Nome da tabela Nomes das colunas, tipos de dados e tamanhos Restries de Integridade (depende de cada SGBD) O comando SQL utilizado para a definio de tabelas o CREATE TABLE CREATE TABLE Sintaxe
Restrio de coluna: refere-se apenas coluna em questo Restrio de tabela: refere-se toda linha, normalmente utilizada para referncias entre mais de uma coluna Restries de Integridade (Oracle) NULL (NOT NULL) A clusula NOT NULL garante que a coluna no poder conter valores nulos Nulo um valor especial, usado para representar valor desconhecido ou no aplicvel. Operaes aritmticas com um valor nulo tm como resultado nulo NULL no zero NULL no espao vazio Os nicos operadores que podem ser utilizados para comparao com valor nulo so: IS NULL e IS NOT NULL se A e B tm valor null: A IS NULL TRUE A = NULL Unknown A = B FALSE A = NULL Unknown Restries de Integridade (Oracle) UNIQUE Uma coluna com restrio de UNIQUE, assim como uma chave primria, no pode conter valores repetidos na tabela PRIMARY KEY (chave primria)
CREATE TABLE DEPARTAMENTO ( Cod_Depto Smallint NOT NULL, Nome_Depto VARCHAR(20) NOT NULL, PRIMARY KEY (Cod_Depto) ) ou CREATE TABLE DEPARTAMENTO ( Cod_Depto Smallint NOT NULL PRIMARY KEY, Nome_Depto VARCHAR(20) NOT NULL ) Restries de Integridade (Oracle) FOREIGN KEY (chave estrangeira)
CREATE TABLE FUNCIONARIO ( Cod_Depto Smallint NOT NULL,
FOREIGN KEY (Cod_Depto) REFERENCES DEPARTAMENTO); ou
CREATE TABLE FUNCIONARIO ( Cod_Depto Smallint NOT NULL REFERENCES DEPARTAMENTO); Restries de Integridade (Oracle) CHECK Define uma condio que deve ser satisfeita Permite a comparao de colunas da mesma tabela Definio de esquemas - Exemplo Exemplo de definio de esquemas Oracle (ANSI SQL-89) CREATE TABLE DEPARTAMENTO ( Cod_Depto Smallint NOT NULL, Nome_Depto VARCHAR(20) NOT NULL, PRIMARY KEY (Cod_Depto) ); CREATE TABLE FUNCIONARIO ( Cod_Func Integer NOT NULL, Cod_Depto Smallint NOT NULL, Nome VARCHAR(40) NOT NULL, Projeto CHAR(10) DEFAULT 'DISPONIVEL' , Data_Admissao DATE, Salario NUMBER(10,2) CHECK (Salario >= 500), Cod_Ger Integer, PRIMARY KEY (Cod_Func), FOREIGN KEY (Cod_Ger) REFERENCES FUNCIONARIO, FOREIGN KEY (Cod_Depto) REFERENCES DEPARTAMENTO); Restries de Integridade Nomeando Restries de Integridade
No Oracle, as restries de integridade (constraints) podem ter um nome, sendo que possvel ligar ou desligar estas restries (til em caso de importao de dados)
Sintaxe Oracle: [CONSTRAINT nome_constraint] restrio Restries de Integridade Exemplo de constraints
CREATE TABLE FUNCIONARIO ( Cod_Func INTEGER NOT NULL, Cod_Depto SMALLINT NOT NULL, Nome VARCHAR(40) NOT NULL, Projeto CHAR(10) DEFAULT 'DISPONIVEL', Data_Admissao DATE, Salario NUMBER(10,2) CONSTRAINT maior5002 CHECK (Salario >= 500), Cod_Ger INTEGER, CONSTRAINT XPKFUNCIONARIO PRIMARY KEY (Cod_Func), CONSTRAINT XFK_FUNC_FUNC FOREIGN KEY (Cod_Ger) REFERENCES FUNCIONARIO, CONSTRAINT XFK_FUNC_DEPTO FOREIGN KEY (Cod_Depto) REFERENCES DEPARTAMENTO); Integridade Referencial Manuteno da Integridade Referencial Cod_Depto
Nome_Depto
Cod_Func
Cod_Depto
Nome
Projeto
Data_Admissao
Salario
Cod_Ger
Integridade Referencial Como o SGBD garante a Integridade Referencial: Restrict Comando SQL Efeito TABELA-PAI TABELA-FILHO INSERT Sempre OK se o valor da PK for nico OK se o valor da FK existe como PK UPDATE Permitido se a operao no deixar FKs nas tabelas-filho sem valor correspondente na PK da tabela-pai Permitido se o novo valor da FK ainda referencie um valr existente de PK.
DELETE Permitido se nenhuma linha na tabela-filho referencia o valor da PK Sempre OK Integridade Referencial Como o SGBD garante a Integridade Referencial: ON DELETE CASCADE Oracle CREATE TABLE FUNCIONARIO (
FOREIGN KEY (Cod_Depto) REFERENCES DEPARTAMENTO ON DELETE CASCADE);
Outras formas de manuteno da integridade referencial devem ser implementadas atravs de Triggers TABELA-PAI TABELA- FILHO INSERT Idem anterior Idem anterior UPDATE Idem anterior Idem anterior DELETE OK OK ALTER TABLE Permite a alterao da definio de uma tabela aps sua criao, mesmo que a j exista contedo Pode-se: Adicionar uma coluna Modificar uma coluna (tipo de dado, tamanho, default) Adicionar ou remover restries (Oracle) Habilitar ou desabiltar restries Colunas no podem ser removidas via ALTER TABLE ALTER TABLE Sintaxe:
ALTER TABLE DEPARTAMENTO ADD (DESCRICAO CHAR(20) )
ALTER TABLE FUNCIONRIO MODIFY (DESCRICAO CHAR(40) ) ALTER TABLE Mudanas de tipos de dados em atributos existentes usualmente so operacionalizadas atravs da deleo da tabela (drop) e nova criao (create), recarregando os dados No SGBD Oracle a mudana de um tipo de dado ou diminuio do tamanho pode ser realizada via ALTER TABLE se tabela estiver vazia A insero de um novo atributo em uma tabela com contedo deve ser realizada inicializando o mesmo com valor nulo Usualmente usa-se o comando ALTER TABLE para a criao das chaves estrangeiras, evitando-se assim o problema das relaes de precedncia (como a seguir) ALTER TABLE Sintaxe de alteraes sobre restries ALTER TABLE nome_tabela [DROP CONSTRAINT []] [MODIFY nome_coluna []] [ENABLE CONSTRAINT []] [DISABLE CONSTRAINT []] Exemplos: CREATE TABLE FUNCIONARIO ( Cod_Func INTEGER NOT NULL, Cod_Depto SMALLINT NOT NULL,
Cod_Ger INTEGER NULL, PRIMARY KEY (Cod_Func) ); ALTER TABLE Exemplos: (sem nomear a FK)
ALTER TABLE FUNCIONARIO ADD (FOREIGN KEY (Cod_Ger) REFERENCES FUNCIONARIO) ;
(nomeando a FK)
ALTER TABLE FUNCIONARIO ADD (CONSTRAINT FK_FUNC_DEPTO FOREIGN KEY (Cod_Depto) REFERENCES DEPARTAMENTO) ; DROP TABLE Remove uma tabela e todas as suas linhas
Sintaxe:
DROP TABLE nome_tabela [CASCADE constraints] Outros Comandos RENAME (Oracle) Altera o nome de uma tabela, viso, sequence o sinnimo Exemplo: RENAME PESSOA TO FUNCIONARIO
TRUNCATE (Oracle) Remove todas as linhas de uma tabela e libera o espao fsico usado pela mesma Exemplo: TRUNCATE FUNCIONARIO Outros Comandos Comentrios em tabelas (Oracle) Adiciona texto com comentrios de uma tabela Exemplo:
COMMENT ON TABLE FUNCIONARIO IS Informacoes sobre os funcionarios Tipos de Dados Comit ANSI definiu um conjunto de tipos de dados (padro ANSI) Os SGBDs utilizam os tipos de dados ANSI (nem todos) alm de outros tipos especficos Tipos de dados mais comuns (ANSI) INTEGER: valor inteiro, usalmente implementado com preciso de 32-bits, que pode ser usado para armazenar valores no intervalo de x+- 2.147.483.647 (-2 31 a 2 31 -1) SMALLINT: valor inteiro, usalmente implementado com preciso de 16-bits, que pode ser usado para armazenar valores no intervalo de +- 32.767 Tipos de Dados Tipos de dados mais comuns (ANSI) NUMERIC (p[,q]), DEC ou DECIMAL (p[,q]): nmero decimal em ponto fixo com quantidade total de p dgitos e q dgitos decimais. Exemplo: DECIMAL(6,2) representa +- 9999,99 FLOAT(n): nmero em ponto flutuante com preciso n REAL: nmero em ponto flutuante com preciso pr- definida, usualmente de 32 bits (single) DOUBLE: nmero em ponto flutuante com preciso pr- definida, usualmente de 52 bits (double) CHAR (n): cadeia de caracteres de comprimento fixo Tipos de Dados Tipos de dados mais comuns (ANSI) CHAR VARYING(n): cadeia de caracteres de comprimento varivel e tamanho mximo n DATE: data-calendrio, em formato dependente da implementao TIME: tempo-do-dia TIMESTAMP: combinao de date e time Tipos de dados Oracle VARCHAR2(tamanho): Tamanho obrigatrio e o mximo 2000 NUMBER(p,e): preciso entre 1 a 38, escala de -84 a 127 Tipos de Dados Tipos de dados Oracle LONG: caracteres at 2GB (Oracle) - usado para textos. Uma tabela somente pode possuir um campo LONG DATE: Informao de data e tempo: sculo, ano, ms, dia, hora, minuto, segundo RAW(tamanho): dados binrios at 255 bytes CHAR(tamanho): Tamanho fixo at 255 bytes, default 1 LONG RAW: dados binrios at 2GB (Oracle) Tipos de Dados Converso de tipos de dados ANSI para Oracle O Oracle aceita criao de tabelas com tipos de dados ANSI, convertendo para seus tipos de dados internos
Tipo SQL ANSI Tipo Oracle CHARACTER(n), CHAR(n) CHAR(n) CHARACTER VARYING(n), CHAR VARYING(n), VARCHAR(n) NUMERIC(p,s), DECIMAL(p,s), DEC(p,s) NUMBER(p,s) INTEGER, INT, SMALLINT NUMBER(38) FLOAT(b), DOUBLE PRECISION, REAL NUMBER Tipos de Dados Tipo de dado DATE Datas so armazenadas em formato interno de 7 bytes, sendo necessrio uso de funo de converso TO_DATE ou o formato padro DD-MES-AA Armazenamento de data sem tempo definido: usa tempo default que 12:00:00am Data default primeiro dia do ms corrente Data e hora corrente: SYSDATE Operaes aritmticas sobre DATE SYSDATE + 1 = amanh SYSDATE - 7 = semana passada SYSDATE + (10/1440) = agora + 10 minutos Tipos de Dados Operaes aritmticas sobre DATE multiplicao e diviso: no aplicvel exemplo de funes especficas ADD_MONTHS MONTHS_BETWEEN Regras para comparao de tipos de dados caracter Tipo Regra Resultado CHAR blank-padded a = a VARCHAR2 non-padded a > a Sequences Objeto do esquema que pode gerar nmeros seqenciais nicos (usados para gerncia de pks) Representado como inteiros de 38 dgitos Independentes das tabelas Armazenados como linhas em uma nica tabela da tablespace SYSTEM Pode-se definir valor inicial e incremento CREATE SEQUENCE seq_pedido START WITH 100 INCREMENT BY 2; Referenciados pelas pseudocolunas CURRVAL (valor atual) e NEXTVAL (prximo valor), que podem ser prefixados com o nome da sequence. Ex: seq_pedido.nextval e seq_pedido.currval SQL Manipulao de Dados (DML) Sumrio JOIN INNER JOIN OUTER JOIN SELF JOIN GROUP BY HAVING ORDER BY Junes Para a consulta de dados de mais de uma tabela usa-se a operao de juno As linhas das tabelas so combinadas usando valores comuns, normalmente de chaves primrias e estrangeiras A condio de juno especificada na clusula WHERE
SELECT FROM tabela1, tabela2 WHERE tabela1.coluna1 = tabela2.coluna2 q Condio de juno Junes Aconselha-se que os nomes das colunas sejam precedidos pelos nomes das tabelas por motivos de clareza Nos casos em que o mesmo nome aparece em mais do que uma tabela na juno, esta prefixao obrigatria para a resoluo de ambigidades Quando a condio de uma juno a igualdade, a juno chamada de Equijoin Em um Equijoin a tabela resultante apresenta as colunas da condio de juno em duplicidade Equijoin Numero Pedido Cod_ Func Cod_ Cliente Data_ Pedido Data_ Entrega Numero_ Pedido Cod_ Produto Qtdade 100 F10 C23 01/05/1998 01/05/1998 100 P01 1 101 F03 C21 01/05/1998 02/05/1998 100 P05 2 102 F10 C21 02/05/1998 100 P02 5 101 P01 5 102 P01 5 102 P02 2
Join Mltiplas tabelas: Uma juno pode utilizar mais do que duas tabelas:
SELECT Cod_Filme, Nome_Filme FROM FILME, PRODUCAO, PAIS WHERE PAIS.Nome = Brasil AND PRODUCAO.Nome = PAIS.Nome AND PRODUCAO.Cod_Filme = FILME.Cod_Filme Sinnimos Um sinnimo (alias) uma palavra que colocada aps o nome da tabela na clusula FROM, podendo ser usada para referenciar esta tabela nas demais clusulas Sinnimos so utilizados para simplificar e facilitar a leitura de consultas extensas Join Sinnimos SELECT c.nome Nome do Cliente, c.cod_regiao Codigo Regiao, r.nome Nome Regio FROM CLIENTE.c, REGIAO.r WHERE c.cod_regiao = r.cod
Alm da igualdade outras condies podem ser utilizadas em uma juno Join Nome Cargo Salario Faixa Menor_Salario Maior_Salario Joo Analista 1200,00 F10 0,01 200,00 Ana Programador 800,00 F20 200,01 500,00 Maira Analista 1500,00 F30 500,01 1000,00 Pedro Programador 1200,00 F40 1000,01 1500,00 Vera Gerente 3000,00 F50 15001,00 3000,00
FUNCIONRIO TABELA_SALARIAL SELECT f.nome, f.cargo, f.salario, t.faixa FROM FUNCIONARIO f, TABELA_SALARIAL t WHERE f.salario BETWEEN t.menor_salario AND t.maior_salario Nome Cargo Salario Faixa
Produto Cartesiano Quando omite-se a clusula WHERE operao realizada o produto cartesiano, onde todas as linhas da primeira tabela so combinadas com todas as linhas da segunda tabela SELECT FROM tabela1, tabela2
Inner Join Somente as linhas que satisfazem a condio de juno fazem parte da tabela resultante de um JOIN. Esta operao tambm chamada de INNER JOIN Em algumas situaes necessrio que todas as linhas de uma tabela estejam presentes no resultado, mesmo que no satisfaam as condies. Estes casos no so resolvidos com o uso do INNER JOIN, mas com o uso de uma extenso do operador de juno denominado OUTER JOIN Inner Join Exemplo
Se fosse utilizada a seguinte sentena (INNER JOIN) para apresentar TODOS os funcionrios da empresa com a lista de pedidos realizados SELECT F.Cod_Func, F.Nome, Numero_Pedido, Cod_Cliente FROM FUNCIONARIO F, PEDIDO P, WHERE F.Cod_Func = P.Cod_Func Numero Pedido Cod_ Func Cod_ Cliente Data_ Pedido Data_ Entrega Cod_Func Cod_ Filial Nome 1 1 1 01-May-98 01-May-98 1 348 JOAO DA SILVA 2 1 2 01-May-98 02-May-98 2 348 JOSE DA SILVA 3 3 1 02-May-98 03-May-98 3 348 SILVA DA SILVA 4 4 3 03-May-98 4 345 GAUCHO DA FRONTEIRA 5 4 3 13-May-98
Inner Join
No teramos o resultado desejado, pois como pode ser visto os dados do funcionrio JOSE DA SILVA no aparecem na tabela resultante acima Cod_Func Nome Numero Pedido Cod_ Cliente 1 JOAO DA SILVA 1 1 1 JOAO DA SILVA 2 2 3 SILVA DA SILVA 3 1 4 GAUCHO DA FRONTEIRA 4 3 4 GAUCHO DA FRONTEIRA 5 3
Outer Join O objetivo de um OUTER JOIN permitir a representao na tabela resultante de TODAS as linhas de uma tabela, mesmo aquelas que no atendam s condies de juno O resultado de um OUTER JOIN formado da seguinte forma, sendo que as linhas da tabela que no tem correspondncia so complementadas com nulos: OUTER JOIN = Resultado do INNER JOIN + Linhas da tabela sem correspondncia Outer Join Exemplo:
Foram definidos trs tipos de OUTER JOIN entre duas tabelas: Left, Right e Full Outer Join Sintaxe SQL-92: tab1 NATURAL (LEFT | RIGHT | FULL) OUTER JOIN tab2 tab1 (LEFT | RIGHT | FULL) OUTER JOIN tab2 ON condio Numero Pedido Cod_ Func Cod_ Client e Data_ Pedido Data_ Entrega Cod_ Func Cod_ Filial Nome 1 1 1 01-May-98 01-May-98 1 348 JOAO DA SILVA 2 1 2 01-May-98 02-May-98 2 348 JOSE DA SILVA 3 3 1 02-May-98 03-May-98 3 348 SILVA DA SILVA 4 4 3 03-May-98 4 345 GAUCHO DA FRONTEIRA 5 4 3 13-May-98
Linha sem correspondncia Outer Join LEFT OUTER JOIN Left Outer Join = Inner Join + linhas no participantes da tabela esquerda SELECT F.Cod_Func, F.Nome, Numero_Pedido, Cod_Cliente FROM FUNCIONARIO F, PEDIDO P WHERE F.Cod_Func NATURAL LEFT OUTER JOIN P.Cod_Func Cod_ Func Nome Numero Pedido Cod_ Cliente 1 JOAO DA SILVA 1 1 1 JOAO DA SILVA 2 2 3 SILVA DA SILVA 3 1 4 GAUCHO DA FRONTEIRA 4 3 4 GAUCHO DA FRONTEIRA 5 3 2 JOSE DA SILVA
Linhas sem correspondncia so complementadas com nulos Outer Join RIGHT OUTER JOIN Right Outer Join = Inner Join + linhas no participantes da tabela direita FULL OUTER JOIN Full Outer Join = Inner Join + linhas no participantes de ambas tabelas Sintaxe Oracle: Colocar o sinal (+) na condio de juno, ao lado da coluna que conter valores nulos em caso de no haver correspondncia de valores SELECT FROM tabela1, tabela2 WHERE tabela1.coluna1 ( + ) = tabela2.coluna2 Outer Join Sintaxe Oracle: O operador de OUTER JOIN somente pode aparecer em um dos lados da expresso Uma condio envolvendo um OUTER JOIN no pode usar o operador IN assim como no pode estar ligada a outra condio pelo operador OR
SELECT F.Cod_Func, F.Nome, Numero_Pedido, Cod_Cliente FROM FUNCIONARIO F, PEDIDO P WHERE F.Cod_Func = P.Cod_Func (+)
Equivale a um left outer join Self Join Juno de linhas de uma mesma tabela Nem sempre uma juno envolve duas tabelas. Algumas vezes necessrio juntar uma tabela com ela mesma, criando um SELF JOIN. Para realizar esta operao necessrio simular a existncia de duas tabelas, o que feito atravs da criao de dois sinnimos para a mesma tabela na clusula FROM Ex.: listar os nomes de todos os gerentes SELECT DISTINCT ger.nome Nome Gerente FROM FUNCIONARIO func, FUNCIONARIO ger WHERE func.Cod_Ger = ger.Cod_Func Self Join Cod_Func Nome Cod_ Ger 1 JOAO DA SILVA 4 2 JOS DA SILVA 1 3 SILVA DA SILVA 1 4 GAUCHO DA FRONTEIRA
Func Ger Cod_Func Nome Cod_ Ger 1 JOAO DA SILVA 4 2 JOS DA SILVA 1 3 SILVA DA SILVA 1 4 GAUCHO DA FRONTEIRA
Agrupamentos As funes de grupo operam sobre grupos de tuplas (linhas) Retornam resultados baseados em grupos de tuplas em vez de resultados de funes por tupla individual As clusulas GROUP BY e HAVING podem ser adicionadas ao comando SELECT, aumentando sua funcionalidade para a manipulao de grupos agregados GROUP BY A clusula GROUP BY do comando SELECT utilizada para dividir tuplas em grupos menores Agrupamentos GROUP BY Combina linhas em grupos, produzindo uma linha resultante para cada grupo A clusula GROUP BY pode ser usada para dividir as tuplas de uma tabela em grupos menores As funes de grupo devolvem uma informao sumarizada para cada grupo Formando grupos: Listar os nomes dos funcionrios e os cdigos das filiais onde eles trabalham SELECT Nome, Cod_Filial, Salario FROM FUNCIONARIO Nome Cod_Filial Salario JOAO DA SILVA 348 1800,00 JOSE DA SILVA 348 1400,00 SILVA DA SILVA 348 1700,00 GAUCHO DA FRONTEIRA 345 1800,00 Agrupamentos GROUP BY Exemplo: Listar a quantidade de funcionrios lotados por filial
SELECT Cod_Filial, COUNT(*) Quantidade FROM FUNCIONRIO GROUP BY Cod_Filial
A tabela resultante apresenta uma linha para cada Cod_Filial O COUNT(*) mostra a quantidade de linhas de cada Cod_Filial (grupo), ordenados por Cod_Filial (a ordenao pode ser modificada atravs da clusla Order By)
Cod_ Filial Quantidade 345 1 348 3 Agrupamentos
GROUP BY Exemplo: SELECT Cod_Filial, COUNT(*) Quantidade FROM FUNCIONRIO WHERE Cod_Filial = 348 AND Salario > 1500,00 GROUP BY Cod_Filial
Todas as colunas que aparecem na clusula SELECT que no estejam em funes de agregao devem estar na clusula GROUP BY A coluna que aparece na clusula GROUP BY no necessita estar na clusula SELECT, embora os resultados tenham maior significado nestes casos
Cod_ Filial Quantidade 348 2 Agrupamentos HAVING A clusula HAVING pode ser utilizada para especificar quais grupos devero ser exibidos, portanto restringindo-os Estabelece condies que restringem os grupos resultantes Restringe a participao de grupos na tabela resultante Agrupamentos HAVING Exemplo: Selecionar os cdigos de filiais e a mdia dos salrios das filiais cuja mdia maior do que R$ 1.500,00
SELECT Cod_Filial, AVG(Salario) FROM FUNCIONARIO WHERE AVG(Salario) > 1500,00 GROUP BY Cod_Filial
SELECT Cod_Filial, AVG(Salario) FROM FUNCIONARIO GROUP BY Cod_Filial HAVING AVG(Salario) > 1500,00 Funes de agregao no podem ser utilizadas na clusula WHERE - Agrupamentos Etapas no uso da clusula HAVING 1. As linhas so agrupadas 2. As funes de agrupamento so aplicadas sobre o grupo 3. Grupos que satisfazem as condies da clusula HAVING so apresentados Agrupamentos ORDER BY Ordena as linhas resultantes ASC (default) e DESC Pode-se ordenar por mais de uma coluna possvel ordenar por uma coluna que no conste na clusula SELECT (Oracle) Exemplos: SELECT Nome, Cod_Filial, Data_Admissao FROM FUNCIONARIO ORDER BY Nome
SELECT Nome FUNCIONARIO, Cod_Filial, Data_Admissao FROM FUNCIONARIO ORDER BY Data_Admissao DESC, FUNCIONARIO Seqncia no comando SELECT Seqncia no comando "Select": SELECT coluna(s), funo de agrupamento FROM tabela(s) WHERE condio(es) da(s) tupla(s) GROUP BY condio(es) do(s) grupo(s) de tupla(s) HAVING condio(es) do(s) grupo(s) de tupla(s) ORDER BY coluna(s); A SQL far a seguinte avaliao: a) WHERE, para estabelecer tuplas individuais candidatas (no pode conter funes de grupo) b) GROUP BY, para fixar grupos c) HAVING, para selecionar grupos para exibio NORMALIZAO Medidas informais para projeto de esquemas relacionais (Elmasri & Navathe 94) 1. Assegurar semntica dos atributos 2. Reduzir valores redundantes em tuplas 3. Reduzir valores nulos em tuplas 4. No permitir tuplas esprias (cm chaves primrias diferentes das usadas para as entidades representadas)
Estas medidas so dependentes entre si Normalizao preocupa-se com itens 2 e 4 Semntica dos atributos Significado dos nomes de atributos especifica como interpretar os valores armazenados nas tuplas
Regra 1: Projete um esquema de relao de forma que seja fcil explicar seu significado. No combine atributos de mltiplos tipos de entidades e relacionamentos em uma nica relao.
Intuitivamente, se um esquema de relao corresponde a um tipo de entidade ou um tipo de relacionamento, o significado tende a ser claro. Valores redundantes em tuplas Eliminar informaes redundantes tem como objetivo: minimizar o espao de armazenamento evitar anomalias de atualizao anomalias de insero anomalias de atualizao anomalias de excluso consistente com a primeira medida (de certa forma, outra maneira de express-la)
Normalizao o enfoque formal para avaliar esta medida
Regra 2: Projete os esquemas de relaes de forma que no ocorram anomalias de insero, atualizao ou excluso Valores nulos Quando alguns atributos no se aplicam a certas tuplas, so introduzidos valores nulos Leva a: desperdcio de espao de armazenamento dificuldades para compreender o significado do atributo nulo pode significar: atributo no se aplica a esta tupla valor do atributo desconhecido valor conhecido mas ainda no foi fornecido dificuldades para operaes como JOIN e funes de agregao, como COUNT, SUM Regra 3: Evite colocar em uma relao atributos que possam apresentar valores nulos Tuplas esprias Tuplas esprias aparecem como resultado da juno natural de tabelas onde o atributo de juno no chave primria em nenhuma das tabelas Ex.: uma chave primria pode ser propositadamente omitida, por no ser relevante para os leitores do arquivo Deve-se introduzir, j na forma no normal, a chave primria usual da tabela, como se ela aparecesse no arquivo no normalizado
Regra 4: Projete relaes de forma que elas possam ser juntadas (operao JOIN) com condies de igualdade sobre atributos que sejam chave primria ou estrangeira, de forma a garantir que no aparecero tuplas esprias Normalizao Conforme visto at agora, agrupamento de atributos para formar relaes feito com base em: bom senso do projetista mapeamento de um esquema E-R para um esquema relacional Perguntas a responder: por que foi decidido este agrupamento e no outro? como medir a qualidade e adequao do projeto?
Teoria da normalizao introduz um formalismo para medir por que um conjunto de relaes (agrupamento de atributos) melhor do que o outro desenvolvida no contexto do modelo relacional Normalizao Objetivo Evitar anomalias de atualizao e inconsistncia de dados Reagrupar informaes para eliminar redundncia de dados eliminar estruturas inexistentes no modelo ER (atributos multivalorados) Processo uma tabela no normalizada transformada sucessivamente em diversas tabelas normalizadas quando aplicado a cada arquivo em um sistema de computador, possvel obter o diagrama E-R para o sistema (engenharia reversa) Observao: no reflete consideraes de performance pode no ser conveniente normalizar completamente Normalizao Proposta inicial de Codd (1972) apresenta trs formas normais: Primeira (1FN), Segunda (2NF) e Terceira (3FN) Uma definio mais forte da Terceira Forma Normal foi proposta mais tarde por Boyce e Codd (FNBC) Posteriormente foram definidas a Quarta (4FN) e Quinta (5FN) Formas Normais Princpio da Normalizao: esquemas de relaes considerados no satisfatrios so decompostos um esquema de relao quebrado em esquemas menores que, juntos, reconstrem a relao original Anomalias de Atualizao Exemplo de atributos que se repetem na entidade PEDIDO: cdigo do produto unidade do produto descrio do produto Primeira Forma Normal Atualmente, j considerada parte da definio formal de uma relao Historicamente, foi definida para proibir: atributos multivalorados em registros: campos repetitivos com nmero varivel de ocorrncias atributos compostos em registros: itens de grupo quaisquer combinaes destes Relao na Primeira Forma Normal Uma relao est na 1FN quando todos os domnios de atributos so atmicos (simples, indivisveis) e qualquer atributo em uma tupla possui um nico valor. No possui tabelas aninhadas Primeira Forma Normal Entidade PEDIDO no normalizada Primeira Forma Normal Entidades na 1FN Relao no normalizada Exemplo de uma relao no normalizada
DEPARTAMENTO Dept GerDep t LocalDept Num Nome D10 Pesquisa 101 Rio de Janeiro So Paulo Porto Alegre D20 Administra o 204 So Paulo Rio de Janeiro D30 Recursos Humanos 270 Porto Alegre Passagem para a Primeira Forma Normal Representao do esquema de uma relao no normalizada
DEPARTAMENTO (Dept (Num, Nome), GerDept, {LocalDept})
Chaves identificam atributos multivalorados - representam uma tabela aninhada Parnteses contm atributos componentes Duas solues para chegar a relaes na 1FN: 1. remover cada tabela aninhada, criando uma tabela separada 2. repetir todos os valores de atributos, para cada um dos valores da tabela embutida introduz redundncia Em ambas solues, eliminar itens de grupo Passagem para a Primeira Forma Normal Primeira soluo Esquemas resultantes em 1FN DEPARTAMENTO (NumDept, NomeDept, GerDept) DEPT-LOCAIS (NumDept, LocalDept)
Chaves primrias das tabelas resultantes: cada tabela aninhada tem como chave primria a combinao de sua chave primria e a chave primria da tabela externa Passagem para a Primeira Forma Normal DEPARTAMENTO NumDept NomeDept GerDept D10 Pesquisa 101 D20 Administrao 204 D30 Recursos Humanos 270 DEPT-LOCAIS NumDept LocalDept D10 Rio de Janeiro D10 So Paulo D10 Porto Alegre D20 So Paulo D20 Rio de Janeiro D30 Porto Alegre Passagem para a Primeira Forma Normal Segunda soluo Esquemas resultantes em 1FN DEPARTAMENTO (NumDept, NomeDept, GerDept, LocalDept) Chave primria da tabela resultante: combinao da chave primria da tabela aninhada com a chave primria da tabela externa
Passagem para a Primeira Forma Normal
DEPARTAMENTO NumDept Nome GerDept LocalDept D10 Pesquisa 101 Rio de Janeiro D10 Pesquisa 101 So Paulo D10 Pesquisa 101 Porto Alegre D20 Administrao 204 So Paulo D20 Administrao 204 Rio de Janeiro D30 Recursos Humanos 270 PortoAlegre Dependncia Funcional Segunda e Terceira Formas Normais tratam do relacionamento entre atributos chave e no chave So definidas em termos de dependncia funcionais
Representao: A B Diz-se que: B um fato sobre A A determina B Um atributo (ou conjunto de atributos) B de uma relao R depende funcionalmente de um atributo (ou conjunto de atributos) A se, a qualquer instante do tempo, cada valor de A em R est associado com o mesmo valor em B
Dependncia Funcional Dependncia funcional TOTAL (Completa) a cada valor da chave (e no parte dela), est associado um valor para cada atributo Dependncia funcional PARCIAL atributo s depende de parte da chave primria concatenada e no dela como um todo Dependncia funcional TRANSITIVA um atributo ou conjunto de atributos A depende de outro atributo B que no pertence chave primria, mas dependente funcional desta. Assim, A dependente transitivo de B Em PEDIDO, ENDEREO, CIDADE, UF, CGC e INSCRIO-ESTADUAL so dependentes transitivos do atributo CLIENTE Exemplos de dependncias funcionais Matrcula Nome Curso NomeCurso NomeCurso Curso
Nome Curso Matrcula Curso ALUNO Matrcula Nome Curso NomeCurso 0080/86 Carla 020 Computao 1248/94 Vera 020 Computao 0712/92 Vera 101 Msica 1108/94 Joo 150 Medicina 0890/92 Paulo 108 Psicologia 0080/86 Carla 101 Msica Segunda Forma Normal Pressupe chave primria composta Toda a relao na 1FN que possua um nico atributo como chave primria j est na 2FN Para verificar se uma relao est violando a 2FN, devem ser verificadas relaes que: possuam chave primria composta possuam pelo menos um atributo no chave Uma relao est na 2FN quando, alm de estar na 1FN, cada atributo no chave primria depende funcionalmente de toda a chave primria (e no parte dela). No contem dependncias parciais. Segunda Forma Normal Exemplo de relao na 1FN e no na 2FN:
Problemas quando no se tem 2FN (anomalias de atualizao):
endereo de um depsito repetido para todas as peas mudana de endereo -> atualizao de todas as tuplas deste depsito podem ocorrer inconsistncias nos dados como guardar o endereo de um depsito que no tem pea armazenada? Passagem para a Segunda Forma Normal Devem ser removidos da relao original todos os atributos que violam a 2FN, criando uma outra relao Para verificar se h violao da 2FN, para cada atributo no chave, perguntar:
o atributo depende de toda a chave primria ou de parte dela?
Esquemas resultantes em Segunda Forma Normal:
ESTOQUE (Pea, Depsito, Quantidade) ENDEREO-DEPSITO (Depsito, EndereoDepsito) Passagem para a Segunda Forma Normal Passagem para a Segunda Forma Normal Terceira Forma Normal Violada quando um atributo no chave um fato sobre outro atributo no chave Exemplo de relao na 2FN e no na 3FN: EMPREGADO (CodEmpregado, CodDepto, LocalizaoDepto)
Problemas quando no se tem 3FN: anlogos aos anteriores Uma relao est na 3FN quando, alm de estar na 2FN, cada atributo no chave primria depende diretamente da chave primria (isto , no h dependncias transitivas) Passagem para a Terceira Forma Normal Devem ser removidos da relao original todos os atributos que violam a 3FN, criando uma outra relao Para verificar se h violao da 3FN, para cada atributo no chave, perguntar:
o atributo depende de algum outro atributo que no a chave primria ?
Esquemas resultantes em Terceira Forma Normal:
EMPREGADO (CodEmpregado, CodDepto) DEPARTAMENTO (CodDepto, LocalizaoDepto) Passagem para a Terceira Forma Normal Passagem para a Terceira Forma Normal Passagem para a Terceira Forma Normal Passos da Normalizao 1. Passagem para a Primeira Forma Normal 2. Passagem para a Segunda Forma Normal 3. Passagem para a Terceira Forma Normal OBS.: pode-se fugir normalizao, quando problemas de performance forem prioritrios Exemplo:
PESSOA (Cdigo, Nome, Rua, Nmero, Cidade, Estado, CEP) No est na 3FN
PESSOA (Cdigo, Nome, Rua, Nmero, CEP) CEPs (CEP, Cidade, Estado) Relaes em 3FN Exemplo para normalizar Histrico do Aluno Matrcula: 2675/92 Curso: Cdigo: 020 Nome: Cincia da Computao Endereo: Rua So Vicente, 434 Total de crditos: 160 Mdia: C Cdigo Nome Discipli. Crditos Semestre Conceito INF125 INF131 INF132 Algoritmos Pascal Banco de Dados 4 3 92/1 92/1 92/2 92/2 93/1 B E D D A Forma normal de BOYCE/CODD (FNBC) Quarta e Quinta Formas Normais Dependncias multivaloradas Tratam de fatos multivalorados (no tratados pela 3FN) Definidas em termos de dependncias multivaloradas Dependncias multivaloradas requerem que outras tuplas estejam presentes em uma relao Seja uma relao R com trs atributos, X, Y e Z. A dependncia multivalorada X Y requer que sempre que existirem duas tuplas quaisquer (x1, y1, z1) e ( x2, y2, z2) existiro tambm as duas tuplas (x1, y2, z1) e (x2, y1, z2) Dependncia multivalorada Exemplos: Curso Professor Curso Livro
Relao no normalizada Curso Professor Livro Banco de Dados Heuser Cirano Lia Elmasri&Navathe Korth&Silberschatz Outros exemplos de dependncias multivaloradas: Empregado Projeto Pessoa Habilidade Empregado Equipamento Pessoa Lngua domina Empregado Dependente Dependncia multivalorada Representao em uma relao normalizada A tabela est representando dois relacionamentos: relacionamento que associa curso a professor relacionamento que associa curso a livro
introduz redundncia Curso Professor Livro Banco de Dados Banco de Dados Banco de Dados Banco de Dados Banco de Dados Banco de Dados Heuser Heuser Cirano Cirano Lia Lia Elmasri&Navathe Korth&Silberschatz Elmasri&Navathe Korth&Silberschatz Elmasri&Navathe Korth&Silberschatz Quarta Forma Normal Esquemas resultantes na Quarta Forma Normal
CURSO-PROFESSOR (Curso, Professor) CURSO-LIVRO (Curso, Livro) Curso Professor Banco de Dados Banco de Dados Banco de Dados Heuser Cirano Lia Curso Livro Banco de Dados Banco de Dados Elmasri&Navathe Korth&Silberschatz Uma relao est na Quarta Forma Normal (4FN) se est na 3FN e no contm mais de uma dependncia multivalorada Quarta Forma Normal Quinta Forma Normal Trata com casos onde a informao pode ser reconstruda a partir de relaes menores, diminuindo a redundncia
Exemplos: Representantes representam indstrias Indstrias fabricam produtos Representantes vendem produtos Neste caso: Joo no vende carro da GM (s da Ford) Joo no vende caminho da Ford (s da GM) Representante Indstria Produto Joo Joo Ford GM Carro Caminho Quinta Forma Normal Supondo a seguinte regra vlida: Se um representante vende um certo produto e representa uma indstria que faz este produto, ento ele vende este produto desta indstria Todas as combinaes possveis devem ser representadas: Problemas de atualizao: O que acontece se Joo deixa de vender carro? Representante Indstria Produto Joo Joo Joo Joo Carlos Ford Ford GM GM Ford Carro Caminho Carro Caminho Carro Quinta Forma Normal A relao deve ser reconstruda a partir da juno das trs tabelas: Representante Indstria Joo Joo Carlos Ford GM Ford Representante Produto Joo Joo Carlos Carro Caminho Carro Indstria Produto Ford Ford GM GM Carro Caminho Carro Caminho Uma relao est na Quinta Forma Normal (5FN) se a sua informao no pode ser reconstruda a partir de relaes com um nmero menor de atributos (excludos os casos em que a decomposio resulta em relaes com a mesma chave primria) Normalizao Elimina redundncia em uma relao Deve-se cuidar com redundncias entre relaes
Exemplo:
LOTAO (Empregado, Departamento) DEPARTAMENTO (Departamento, Localizao) EMP-LOCALIZAO (Empregado, Localizao)
SQL Embutida Introduo = O mtodo usual para o desenvolvimento de aplicaes de bancos de dados a utilizao de comandos SQL dentro das linguagens de programao = Nestes casos o SQL chamado SQL embutido e as linguagens so chamadas linguagens hospedeiras = Linguagens hospedeiras definidas pela ANSI como padro para SQL embutido: C, Cobol, Fortran, PL/I, ADA, Pascal e Mumps Introduo = Exemplos de outras linguagens, utilizadas em ambiente cliente-servidor: = Delphi = Visual Basic = Power Builder = SQLWindows = linguagens proprietrias (ex. Developer/2000) Formas de Implementao = Dentre as formas para a implementao de SQL em linguagens hospedeiras, pode-se citar: = A linguagem hospedeira faz chamadas de funes/procedures que interagem com o mecanismo do banco de dados, passando o comando SQL como parmetro em um string = Comandos SQL so utilizados de forma integrada dentro da prpria linguagem de programao. Nestes casos deve ser utilizado um pr-compilador para a traduo dos comandos SQL Variveis compartilhadas = O banco de dados acessado somente por comandos SQL = A troca de informaes entre o banco de dados e o programa hospedeiro feita atravs do uso de variveis ditas compartilhadas (chamadas de variveis hospedeiras, que so declaradas na linguagem hospedeira e podem ser usadas em qualquer parte do programa, inclusive em comandos SQL) = Exemplo de declarao de variveis compartilhadas na linguagem C: EXEC SQL BEGIN DECLARE SECTION; int v_cod_cliente, v_numero_pedido ; char v_razao_social[50], v_endereco[50] ; char SQLSTATE; EXEC SQL END DECLARE SECTION Variveis compartilhadas = Quando referenciadas dentro dos comandos SQL as variveis devem ser prefixados por dois pontos ( : ), assim: = Inserindo dados, usando as variveis de entrada V_Cod_Cliente e V_Razao_Social:
EXEC SQL INSERT INTO CLIENTE (Cod_Cliente, Razao_Social) VALUES (:V_Cod_Cliente, :V_Razao_Social); Controle de Erros = Cada vez que uma funo da biblioteca SQL executada, um cdigo atribudo varivel SQLSTATE, servindo para indicar a ocorrncia de problemas durante a execuo do comando = Se SQLSTATE = 00000 ento no houve erro = Se SQLSTATE = 02000 ento no foi encontrada nenhuma linha = De forma alternativa, alguns SGBDs como Oracle e Informix utilizam a varivel SQLCODE (Padro ANSI mais antigo) = Se o SQLCODE zero indica operao realizada com sucesso, se igual a 100, no more data/not found e se negativo representa um cgido de erro ocasionado pela execuo do comando Expresso WHENEVER = Uma forma bastante utilizada para o controle de erros SQL dentro de um programa a expresso WHENEVER = O comando WHENEVER permite ao programa transferir o controle para uma rotina de tratamento de erros quando da ocorrncia de erros ou warnings em comandos SQL embutidos = Esta expresso pode ser declarada no programa hospedeiro, especificando o processamento que deve ser realizado quando a condio de erro ocorrer na execuo de um comando SQL Expresso WHENEVER = Aps a declarao de WHENEVER a definio passa a valer para todos os comandos SQL que aparecem no programa fonte = Exemplos de uso no Oracle: EXEC SQL WHENEVER NOT FOUND GOTO label EXEC SQL WHENEVER SQLWARNING CONTINUE EXEC SQL WHENEVER SQLERROR STOP SELECT Embutido = A utilizao do comando SELECT pode ser feita de duas formas, dependendo se o resultado da consulta retorna uma ou vrias linhas = SELECT que retorna uma nica linha = Neste caso a linha pode ser armazenada em variveis compartilhadas, uma para cada coluna da tupla, inserindo-se a clsula INTO no prprio comando SELECT = No exemplo a seguir so utilizadas as variveis de entrada V_Numero_ Pedido e as variveis de sada V_Cod_Cliente e V_Razao_Social SELECT que retorna uma nica linha = Neste ponto deve-se testar se SQLSTATE igual a 00000 e em caso positivo imprimir os valores de :V_Cod_Cliente e :V_Razao_Social
EXEC SQL SELECT Cod_Cliente, Razao_Social FROM CLIENTE, PEDIDO INTO :V_Cod_Cliente, :V_Razao_Social WHERE CLIENTE.Cod_Cliente = PEDIDO.Cod_Cliente AND PEDIDO.Numero_Pedido = :V_Numero_Pedido; = Neste exemplo, se o resultado da execuo do comando SELECT apresentar uma nica linha ento os valores resultantes da consulta sero atribudos s variveis compartilhadas :V_Cod_Cliente e :V_Razao_Social = Se o resultado da consulta for vrias linhas, ou mesmo nenhuma, ento no feita atribuio de valores s variveis e um cdigo apropriado atribudo variavel de estado (SQLSTATE) SELECT que retorna uma nica linha = Se a execuo do comando SQL retorna mais do que uma linha a atribuio no pode ser feita diretamente s variveis, por incompatibilidade entre a estrutura resultante (um conjunto de linhas) e as estruturas de dados da linguagem de programao = Neste caso necessrio o uso de um CURSOR SELECT que retorna mais que uma linha = Um cursor uma estrutura que abrange a tabela resultante, chamada de conjunto ativo, permitindo que cada linha deste conjunto ativo seja percorrida individualmente como se houvesse um ponteiro e atribuindo valores s variveis compartilhadas = Para a utilizao de um cursor so utilizadas quatro operaes: = DECLARE Exec SQL DECLARE nome_do_cursor CURSOR FOR consulta = OPEN Exec SQL OPEN nome_do_cursor = FETCH Exec SQL FETCH FROM nome_do_cursor INTO variveis = CLOSE Exec SQL CLOSE nome_do_cursor Cursores = DECLARE = Esta a primeira operao a ser realizada para o uso de um cursor. Sua funo especificar as caractersiticas do cursor e alocar memria para o mesmo = OPEN = Somente aps declarado um cursor pode ser aberto. Esta operao determina a execuo do comando SELECT associado e detecta eventuais erros no mesmo. Aps a execuo do comando OPEN o cursor est ativado, pronto para a recuperar a primeira linha da tabela resultante (conjunto ativo) Operaes = FETCH = Com a operao FETCH o programa acessa uma das linhas da tabela resultante, extraindo os valores para as variveis compartilhadas. O comando FETCH utilizado uma ou mais vezes, buscando sempre a prxima linha do conjunto ativo. Se todas as linhas j tiverem sido lidas, nenhuma linha retornada e o valor da varivel de controle de execuo indicar no more data/not found = CLOSE = Aps acessar a ltima linha do cursor o programa deve fechar o cursor. Neste momento o conjunto ativo liberado e o cursor no pode mais ser utilizado. Entretanto o mesmo pode ser reinicializado por outro comando OPEN, que determinar uma nova execuo do sentena SQL Operaes = Esquema geral de uso de um cursor Operaes DECLARE OPEN FETCH CLOSE VAZIO ? Sim No EXEC SQL DECLARE C_Item_Pedido CURSOR FOR SELECT Cod_Produto, Quantidade x Preco_Unitario FROM PRODUTO P, ITEM_PEDIDO IP WHERE P.Cod_Produto = IP.Cod_Produto AND IP.Numero_Pedido = :V_Numero_Pedido; EXEC SQL OPEN C_Item_Pedido; EXEC SQL WHENEVER NOT FOUND GOTO fim_processamento;
Item_pedido Produto C EXEC SQL DECLARE C_Item_Pedido CURSOR FOR
C EXEC SQL OPEN C_Item_Pedido; Exemplo Cod_Produto Quantidade X Preo_Unitario
C_Item_pedido C_Item_pedido Cod_Produto Quantidade X Preo_Unitario 1 10.00 2 5.50
Cursor pronto para a leitura da primeira linha C EXEC SQL WHENEVER NOT FOUND GOTO fim
C EXEC SQL FETCH C_Item_Pedido INTO :V_Cod_Prod, :V_Total_Item; Exemplo C_Item_pedido Cod_Produto Quantidade X Preo_Unitario 1 10.00 2 5.50
:V_Cod_Prod := 1, :V_Total_Item := 10.00 A partir deste ponto, qualquer execuo de um comando SQL dentro do programa que resulte na situao de NOT FOUND ocasionar o desvio para a procedure determinada C V_Total_Pedido := 0 + 10.00 EXEC SQL FETCH C_Item_Pedido INTO :V_Cod_Prod, :V_Total_Item;
C V_Total_Pedido := 10.00 + 5.50 Exemplo C_Item_pedido Cod_Produto Quantidade X Preo_Unitario 1 10.00 2 5.50
fim: Valor total do pedido numero 1: R$ 15.50 EXEC SQL CLOSE C_Item_Pedido;
Exemplo C_Item_pedido Cod_Produto Quantidade X Preo_Unitario 1 10.00 2 5.50
Not found (provoca o desvio para fim: ) Cod_Produto Quantidade X Preo_Unitario
C_Item_pedido = Quando o cursor abrange uma base-table, isto , uma tabela fisicamente armazenada e no uma viso ou tabela resultante de uma query, este cursor tambm pode ser utilizado para atualizao e deleo dos dados desta tabela = A sintaxe dos comandos UPDATE e DELETE para uso dentro de cursores a mesma j apresentada, com exceo da clusula WHERE cuja nica expresso permitida WHERE CURRENT OF <nome_do_cursor>, indicando que o comando se aplica apenas linha corrente do cursor = O programa da aplicao deve ler as linhas da base- table e decidir quais devero ser atualizadas antes de executar os comandos UPDATE e DELETE Cursores para alterao dos dados = Exemplo: Apagar todos os produtos cuja quantidade em estoque seja menor do que 10, aumentando-se o preo unitrio em 10% caso contrrio: EXEC SQL DECLARE C_Produto CURSOR FOR SELECT Quantidade_Estoque FROM PRODUTO EXEC SQL OPEN C_Produto; EXEC SQL WHENEVER NOT FOUND GOTO fim_processamento;
LOOP EXEC SQL FETCH C_Produto INTO :V_ Quantidade_Estoque; if (:V_ Quantidade_Estoque < 10) EXEC SQL DELETE FROM PRODUTO WHERE CURRENT OF C_Produto; else EXEC SQL UPDATE PRODUTO SET Preco_Unitario = Preco_Unitario * 1.2 WHERE CURRENT OF C_Produto;
END LOOP; fim_processamento: EXEC SQL CLOSE C_ Produto; Cursores para alterao dos dados = Os comandos INSERT, UPDATE e DELETE podem ser aplicados para a modificao de uma ou vrias linhas sem a necessidade do uso de cursores = Exemplos:
EXEC SQL UPDATE PRODUTO SET Preco_Unitario = Preco_Unitario * 1.10 WHERE Cod_Fornecedor = :V_Cod_Fornecedor;
EXEC SQL DELETE FROM PRODUTO WHERE Cod_Fornecedor = :V_Cod_Fornecedor;
EXEC SQL INSERT INTO PRODUTO SELECT * FROM NOVOS_PRODUTOS; Alterao dos dados sem cursores = Normalmente a leitura das linhas em um cursor feito seqencialmente, iniciando-se na primeira linha e acessando-se as demais em ordem at a ltima linha = Algumas implementaes de banco de dados apresentam scrollable cursors que alm desta opo permitem a leitura de linhas para frente e/ou para trs = O cursor deve ser declarado como SCROLL:
EXEC SQL DECLARE CURSOR nome_do_cursor SCROLL CURSOR FOR consulta Scrolling Cursors = O comando FETCH deve especificar o tipo de leitura desejada
= Exemplo: EXEC SQL FETCH LAST FROM nome_cursor INTO :variavel Scrolling Cursors Opo de scroll Significado NEXT PRIOR linha seguinte corrente (default) linha anterior corrente FIRST LAST primeira linha do cursor ltima linha do cursor RELATIVE +n RELATIVE -n n tuplas adiante em relao corrente n tuplas atrs em relao corrente ABSOLUTE +n ABSOLUTE -n acessa tupla da posio n a partir do incio acessa tupla da posio n a partir do fim
= Alm do uso de comandos SQL pr-definidos (SQL esttico) pode-se usar comandos mais genricos (SQL dinmico) embutidos em programas na linguagem hospedeira = Em um SQL dinmico os comandos somente so definidos em tempo de execuo e por isso no podem ser compilados ou pr-processados = Um exemplo desta situao um programa que l um string digitado pelo usurio que uma consulta SQL e processa esta consulta = Comandos para execuo de consultas com SQL dinmico: = EXEC SQL PREPARE = Prepara o comando SQL para execuo = EXEC SQL EXECUTE = Determina a execuo do comando SQL = EXEC SQL EXECUTE IMMEDIATE = Combina as duas formas anteriores SQL Dinmico EXEC SQL PREPARE SQLQuery FROM SELECT * FROM PEDIDO;
EXEC SQL EXECUTE SQLQuery
/* l a varivel :V_query */
EXEC SQL PREPARE SQLQuery FROM :V_query;
EXEC SQL EXECUTE SQLQuery
EXEC SQL EXECUTE IMMEDIATE :V_query SQL Dinmico - Exemplos SQL - Subconsultas Subconsultas (Subqueries) Pode ser visto como um SELECT aninhado com outro SELECT, INSERT, UPDATE ou DELETE Pode ser aninhada: dentro de uma clusula WHERE ou HAVING em um SELECT, INSERT, UPDATE ou DELETE principal dentro de outra subquery Deve estar entre parnteses Uma subquery introduzida com operadores (=,<>, >, >=, <, <=) deve retornar um nico valor Uma subquery introduzida com IN, deve retornar uma lista de valores Subconsultas (Subqueries) Uma subconsulta uma expresso SELECT FROM WHERE aninhada dentro de tal expresso So usadas para representar o conjunto de valores a procurar atravs do predicado IN O sistema avalia a consulta em geral, sendo que, primeiramente, avalia a subconsulta aninhada A subconsulta retorna um valor a ser utilizado em uma comparao na consulta geral (consulta mais externa) Subconsultas (Subqueries) Uma sentena SELECT pode ser utilizada dentro de outra sentena SELECT O SELECT aninhado chamado de subquery (subconsulta) Estrutura da consulta: SELECT ... FROM ... WHERE ...
(SELECT ... FROM ... WHERE ...); Consulta Externa Sbconsulta Subconsultas A subconsulta seleciona e retorna valores para o SELECT externo O resultado da execuo da subconsulta pode retornar nenhum valor: Nenhuma linha retorna, equivalendo a um valor nulo um nico valor: Retorna exatamente uma linha/coluna ou o resultado de uma expresso de agregao um conjunto de valores: Retorna mais de uma linha/coluna Subconsultas Sintaxe:
O SELECT interno deve ser escrito entre parnteses SELECT ... FROM ... WHERE [coluna,] [operador,] [expresso]
(SELECT ... FROM ... ); SQL - Subqueries CodDepto NomeDepto Local CodEmp Nome Cargo Chefe DataAdm Salrio Comisso CodDepto Empregado Departamento Dependente CodDep NomeDep CodEmp Subconsultas Estrutura de uma subconsulta (subquery) simples ( SELECT [ALL | DISTINCT] lista_coluna FROM { nome_tabela | nome_view },.. { nome_tabela | nome_view } [ WHERE condio(s) ] [ GROUP BY expresso ] [ HAVING condio(s) ] ) Exemplo: Listar todos os funcionrios que possuem dependentes SELECT Nome FROM emp WHERE cod_emp IN (SELECT CodEmp FROM Dependentes) SELECT Nome, Cargo, Salrio FROM emp WHERE Salrio = (SELECT MIN(Salrio) FROM emp) Selecionar o nome, cargo e salrio do empregado que possui o menor salrio Nome Cargo Salrio Roberto Balconista 800 Subconsultas - Exemplos SELECT Nome, Cargo FROM emp WHERE Cargo = (SELECT Cargo) FROM emp WHERE Nome = Patrcia); Selecionar o nome, cargo de todos os empregados que possuem a mesma profisso do empregado Patrcia. Nome Cargo Juliana Gerente Patricia Gerente Luciana Gerente Subconsultas - Exemplos SELECT Nome, Salrio, CodDepto FROM emp WHERE Salrio IN (SELECT MIN(Salrio) FROM emp GROUP BY CodDepto); Selecione o nome, salrio, nmero do departamento dos empregados que recebem o menor salrio de cada departamento Nome Salrio CodDepto Roberto 800 20 Carla 950 30 Eduardo 1300 10 Subconsultas - Exemplos SELECT CodDepto, AVG(salrio) FROM emp GROUP BY CodDepto HAVING AVG(salrio) > (SELECT AVG(salrio) FROM emp WHERE CodDepto = 30) Selecionar o nmero dos departamentos onde os empregados recebem um salrio mdio maior que a mdia salarial do departamento 30 CodDepto Mdia 10 2916,67 20 2175,00 Subconsultas - Exemplos Tipos de Subconsultas Correlata (correlated) Uma subconsulta dita correlata quando o valor resultante do SELECT aninhado depende do valor produzido pelo SELECT externo. Como depende do SELECT externo uma subconsulta correlata deve ser executada repetidas vezes, uma para cada valor produzido pelo SELECT externo
Tipos de Subconsultas No correlata (uncorrelated) Os demais tipos de subconsultas so ditas no correlatas Uma subconsulta no correlata executada apenas uma vez, e antes da execuo do SELECT externo Muitas vezes uma consulta aninhada tambm pode ser escrita usando-se uma nica clusula SELECT. Exemplo: Obter os nomes de fornecedor dos fornecedores que fornecem a pea P2: SELECT nome_fornec FROM FORNECEDOR WHERE cod_fornec IN (SELECT cod_fornec FROM PEAS WHERE cod_pea = P2) SELECT nome_fornec FROM FORNECEDOR, PEA WHERE FORNECEDOR.cod_fornec = PEA.cod_fornec AND PEA.cod_pea = cod_pea = P2 = Expresses de especificao As seguintes expresses podem ser utilizadas para a especificao de subconsultas ALL ANY IN EXISTS ALL / IN Numa subconsulta usando a expresso ALL a comparao deve ser verdadeira para cada um (todos) dos valores retornados Se o valor retornado tiver sido nenhum valor, a comparao ser verdadeira Exemplo: SELECT Cod_Func, Salario FROM FUNCIONARIO WHERE Salario > ALL ( SELECT salario FROM FUNCIONARIO WHERE cod_filial = 348 ) C C Cod_ Func Salario 5 1900,00 6 2000,00 7 1850,00 Salario 1800,00 1700,00 1400,00 ALL / IN A consulta anterior mostra os funcionrios cujo salrio maior do que o salrio de TODOS os funcionrios da filial 348 Inicialmente, e uma nica vez, executada a subconsulta, obtendo-se o resultado auxiliar C Aps, so selecionadas as tuplas da tabela FUNCIONRIO cujo salrio maior do que todas as tuplas obtidas em C, gerando a tabela resultante C ALL / IN Se a subconsulta retornar algum valor nulo a comparao ser falso No exemplo, se houvesse na filial 348 um funcionrio cujo valor de salrio fosse null o SELECT externo no apresentaria nenhuma linha como resposta. Dica Oracle: Para solucionar esses casos, usar a funo NVL(coluna,valor) que retorna um valor quando ocorre um null em coluna. No exemplo, se escrevermos SELECT NVL(Salario,0), quando o salrio for null ser convertido para zero !=ALL / NOT IN Quando o operador com a expresso ALL for a desigualdade ( != ALL) o mesmo pode ser substitudo por NOT IN. Resultados semelhantes podem ser obtidos utilizando-se o operador de DIFERENA disponvel em alguns SGBDs As duas consultas a seguir so equivalentes e apresentam todos os produtos que no tm pedidos registrados !=ALL / NOT IN SELECT Cod_Produto, Nome FROM PRODUTO WHERE Cod_Produto NOT IN ( SELECT Cod_Produto FROM PEDIDO )
SELECT Cod_Produto, Nome FROM PRODUTO WHERE Cod_Produto != ALL ( SELECT Cod_Produto FROM PEDIDO ) ANY / IN Utilizando-se a expresso ANY a comparao deve ser verdadeira para ao menos um dos valores retornados na subconsulta Se o valor retornado tiver sido nenhum valor, a comparao ser falso ANY / IN Exemplo: Mostrar todos os funcionrios cujo salrio maior do que o salrio de ao menos um dos funcionrios da filial 348
SELECT Cod_Func, Salario FROM FUNCIONARIO WHERE Salario > ANY ( SELECT salario FROM FUNCIONARIO WHERE cod_filial = 348 ) =ANY e IN Quando o operador com o termo ANY for a igualdade ( = ANY) o mesmo pode ser substitudo por IN Resultados semelhantes podem ser obtidos utilizando-se o operador de INTERSEO disponvel em alguns SGBDs =ANY e IN As duas consultas a seguir mostram os cdigos e razo social dos clientes que tm algum (ao menos um) pedido registrado SELECT Cod_Cliente, Razao_Social FROM CLIENTE WHERE Cod_Cliente IN ( SELECT Cod_Cliente FROM PEDIDO )
SELECT Cod_Cliente, Razao_Social FROM CLIENTE WHERE Cod_Cliente = ANY ( SELECT Cod_Cliente FROM PEDIDO ) =ANY e IN Usando mais do que um atributo na comparao:
SELECT DISTINCT Cod_Cliente FROM LOCACAO WHERE ( Cod_Filme, Cod_Fita ) IN ( SELECT Cod_Filme, Cod_Fita FROM FITA WHERE Status_Conservacao = AVARIADA ) Nveis de aninhamento Teoricamente no existe limitao quanto ao nmero de subconsultas aninhadas A consulta a seguir apresenta os produtos dos fornecedores do estado de So Paulo
SELECT Cod_Produto, Nome FROM PRODUTO WHERE Cod_Fornecedor IN (SELECT Cod_Fornecedor FROM FORNECEDOR WHERE Cod_Cidade IN ( SELECT Cod_Cidade FROM CIDADE WHERE UF IN ( SELECT UF FROM UF WHERE Nome = SAO PAULO ) ) ) Single-Valued Subquery Quando se sabe que a subconsulta retorna sempre um nico valor no necessrio nenhuma expresso (como ALL ou ANY) A subconsulta pode ser tratada como uma funo Exemplo: Apresentar o cdigo e nome dos produtos fornecidos por um determinado fornecedor do qual conhecida razo social SELECT Cod_Produto, Nome FROM PRODUTO WHERE Cod_Fornecedor = ( SELECT Cod_Fornecedor FROM FORNECEDOR WHERE Razao_Social = CASA DAS CANETAS ) Single-Valued Subquery Se a subconsulta retornasse mais do que um valor, isto , caso houvesse mais do que um fornecedor com a mesma razo social, ocorreria um erro de execuo de SQL pois no possvel comparar um atributo com um conjunto de valores usando o operador = Geralmente uma subconsulta single-valued usa uma funo de agregao, pois funes de agregao retornam valores nicos: SELECT Cod_Func, Salario FROM FUNCIONARIO WHERE Salario > ( SELECT AVG(salario) FROM FUNCIONARIO ) Clusula HAVING A clusula HAVING tambm pode utilizar subconsultas Exemplo: Listar todas filiais cuja mdia de salrios maior do que a mdia dos salrios da filial 347. SELECT Cod_Filial, AVG (Salario) FROM FUNCIONARIO GROUP BY Cod_Filial HAVING AVG (Salario) > ( SELECT AVG (Salario) FROM FUNCIONARIO WHERE Cod_Filial = 348 ) Subconsultas Correlatas (Correlated Subqueries) Em uma subconsulta correlata o valor resultante da subconsulta depende de valores do SELECT externo. Por isto uma subconsulta correlata executada uma vez para cada linha considerada no SELECT externo Exemplo: A consulta abaixo lista os funcionrios de maior salrio em cada filial. A subconsulta executada uma vez para funcionrio selecionado pelo SELECT externo SELECT Cod_Func, Nome FROM FUNCIONARIO F1 WHERE Salario = ( SELECT MAX(salario) FROM FUNCIONARIO F2 WHERE F1.Cod_Filial = F2.Cod_Filial); correlatos Subconsultas Correlatas (Correlated Subqueries) Uma consulta correlata quando atributos do SELECT externo so referidos na subconsulta. Nos casos em que a mesma tabela utilizada em ambos SELECTs necessrio o uso de sinnimos Observar que este tipo de subconsulta pode apresentar limitaes de performance Exemplo: Listar os pedidos ainda no entregues realizados nas trs datas mais recentes (observe que a clusula ORDER BY no pode ser usada dentro de uma subconsulta, apenas no SELECT externo): SELECT Numero_Pedido, Data_Pedido FROM PEDIDO P1 WHERE 3 > ( SELECT COUNT(DISTINCT Data_Pedido) FROM PEDIDO P2 WHERE P2.Data_Pedido > P1.Data_Pedido ) AND Data_Entrega IS NOT NULL ORDER BY Data_Pedido, Numero_Pedido; EXISTS A expresso EXISTS conhecida como qualificador existencial, pois a subconsulta retorna apenas um valor verdadeiro ou falso. A subconsulta verdadeira somente se encontra uma ou mais linhas que satisfazem suas condies Exemplo: Seleciona todos os fornecedores de qualquer tipo de caneta cuja quantidade em estoque seja superior a 100 unidades
SELECT DISTINCT Cod_Fornecedor, Razao_Social FROM FORNECEDOR WHERE EXISTS (SELECT * FROM PRODUTO WHERE Nome LIKE CANETA% AND Quant_Estoque > 100 AND FORNECEDOR.Cod_Fornecedor = PRODUTO.Cod_Fornecedor ) EXISTS Sempre possvel escrever com EXISTS uma consulta escrita com a expresso IN, o contrrio, no entanto, no verdadeiro Exemplo com NOT EXISTS: Selecionar os produtos nunca vendidos
SELECT Cod_Produto, Nome FROM PRODUTO WHERE NOT EXISTS ( SELECT * FROM ITEM_PEDIDO WHERE PRODUTO.Cod_Produto = ITEM_PEDIDO.Cod_Produto ) EXISTS Exemplo: Obter nomes de fornecedor de fornecedores que no forneam a pea P2 SELECT nome_fornec FROM FORNECEDOR WHERE NOT EXISTS (SELECT * FROM PEAS WHERE PEA.cod_fornec = FORNECEDOR.cod_fornec AND cod_pea = P2) Esta consulta tambm pode ser interpretada como: Selecionar os nomes de fornecedor dos fornecedores para os quais no exista nenhuma expedio que os relacione pea P2 Equivalente com NOT IN: SELECT nome_fornec FROM FORNECEDOR WHERE nome_fornec NOT IN (SELECT PEA.cod_fornec FROM PEAS WHERE cod_pea = P2) EXISTS A expresso EXISTS pode ser til quando necessita-se especificar uma condio que deve ser atendida por todos os valores de uma determinada coluna Exemplo: Determinar os nomes dos funcionrios que registraram pedidos (ao menos um) para todos os clientes SELECT Nome FROM FUNCIONARIO WHERE NOT EXISTS ( SELECT * FROM CLIENTE WHERE NOT EXISTS ( SELECT * FROM PEDIDO WHERE Cod_Cliente = CLIENTE.Cod_Cliente AND Cod_Func = FUNCIONARIO.Cod_Func EXISTS No exemplo, sero selecionados todos os funcionrios para os quais no existe um cliente que no tenha um pedido realizado pelo prprio funcionrio Exemplo da execuo: Funcionr io Cliente Pedido Func Cli F1 C1 001 F1 C1 F2 C2 002 F2 C1 F3 C3 003 F1 C3 004 F1 C2 005 F1 C1 NOT EXISTS pedido... SELECT intermedirio EXISTS F1 F2 F3 F1 X C1 F1 X C2 F1 X C3 F2 X C1 F2 X C2 F2 X C3 F3 X C1 F3 X C2 F3 X C3 001 F1 C1 005 F1 C1 004 F1 C2 003 F1 C3 002 F2 C1 X X X X X SELECT Externo V F F F F F F V V V V V No existe pedido SELECT Interno NOT EXISTS cliente... 1 2 3 1 os pedidos de cada cliente para cada funcionrio 2 para cada funcionrio, os clientes que no tm pedidos 3 os funcionrios para os quais no existem clientes sem pedidos EXISTS O SELECT interno retorna os pedidos do cliente x, para o funcionrio y Se o funcionrio no tem pedidos para este cliente, este SELECT no retornar nenhuma linha. Neste caso a clusula EXISTS do SELECT intermedirio retornar FALSE. Como ela NEGADA (NOT EXISTS), ser verdadeira para os clientes que no tenham pedido feito pelo funcionrio y Isto significa que o SELECT intermedirio retorna os clientes que no tenham tido pedidos registrados pelo funcionrio y EXISTS A clusula EXISTS do SELECT externo retorna FALSE quando o SELECT intermedirio no retornar nenhuma linha, ou seja, quando no tiver nenhum cliente sem pedido pelo funcionrio y. Como ela NEGADA (NOT EXISTS), retornar verdadeiro apenas quando o funcionrio tiver pedido para todos os clientes, ou seja, quando o SELECT intermedirio no trouxer nenhum cliente (todos tiveram pedidos pelo funcionrio) O SELECT externo retornar cada um dos funcionrios para os quais no exista nenhum cliente sem pedido O comando ser executado para cada um dos funcionrios da tabela Funcionrio lgebra e clculo relacional O modelo de dados relacional O Modelo Relacional (MR) relativamente novo, se comparado a outros modelos de dados orientados a registro Codd props oficialmente o MR em 1970, nos laboratrios de pesquisa da IBM em San Jos, Califrnia MR representa o BD como uma coleo de tabelas (e somente tabelas) H uma correspondncia direta entre o conceito de TABELA RELACIONAL (TR) e o conceito matemtico de RELAO (R) O modelo de dados relacional Cada TR possui um nome nico no contexto do BD e representa o relacionamento entre um conjunto de valores (dados/informaes) Exemplo de BD Relacional: Banco de Dados EMPRESA Tabela EMP (empregados) Nro Nome_emp Idade Cargo Salrio Depto 010 Eduardo 20 C04 1000 D10 020 Fabiano 22 C02 2000 D20 005 Joaquim 18 C04 1000 D20 011 Rodrigo 25 C01 5000 D10 001 Rui 30 C03 3000 D10 O modelo de dados relacional Banco de Dados EMPRESA Tabela DEPT (departamentos)
Tabela CARGO (cargos) Nro Nome_depto Gerente Andar D10 Marketing 001 3 D20 Vendas 020 3 D30 Contabilidade null 1 Cargo_id Nome_cargo Sal_min Sal_mx C01 Recepo 2000 5000 C02 Vendedor 1500 3000 C03 Contador 2000 5000 C04 Boy 1000 1500 Considere a tabela EMP do exemplo Cada coluna em EMP representa uma classe de informao que ser armazenada na tabela Ex.: a coluna Nome_emp usada para armazenar nomes de funcionrios da empresa Cada coluna denominada um atributo da tabela relacional. A cada atributo conferido um nome nico dentro da tabela Ao conjunto de valores possveis para um determinado atributo d-se o nome de domnio (D) do atributo Considere a tabela EMP Ex.: o domnio de nome_emp o conjunto de todos os possveis nomes de funcionrios que j trabalharam, ainda trabalham ou podero vir a trabalhar na empresa Cada linha da tabela denominada tupla. Cada tupla combina um valor de cada um dos atributos da tabela E.: a primeira tupla de EMP relaciona o nmero de empregado 010 com o nome Eduardo, a idade 20, o cargo C04 (boy), o salrio 1000 e o departamento D10 (marketing) Descrio de uma TR De uma maneira mais formal, pode-se descrever uma TR da seguinte forma: Seja {at1,...,ati,...,atn} o conjunto de atributos da tabela relacional TR, com at1 sobre o Domnio D1, at2 sobre o domnio D2 at atn sobre o domnio Dn O conjunto de todas as tuplas possveis em TR , portanto, representvel pelo produto cartesiano dos domnios D1 at Dn: O produto cartesiano (X) de n domnios o conjunto de n- tuplas (diferentes), onde cada tupla combina um dos possveis valores de cada domnio Descrio de uma TR Na matemtica, qualquer subconjunto do produto cartesiano de uma lista de domnios denominado RELAO (R) A designao tabela relacional baseia-se no conceito relao j que, normalmente, a TR s apresenta um subconjunto do produto cartesiano de sua lista de domnios Esquema e instncias no MR Um esquema de BD relacional , na verdade, um conjunto de esquemas de TR As instncias de uma TR so as tuplas. A cada momento, o conjunto de instncias de uma TR representado pelo conjunto de tuplas existentes na tabela O esquema de uma tabela TR contm o nome da tabela e a lista de seus atributos, cada qual associado a seu domnio Ex.: o esquema EMP poderia ser representado: Esquema e instncias no MR EMP (nro: nmeros_de_empregado, nome_emp: nomes_de_empregado, idade: idades_possveis, cargo: cargos_existentes, salrio: salrios_possveis, depto: departamentos_existentes)
A maioria dos SGBDs trabalham com um conjunto limitado de domnios Ex.: inteiro, real, string, data Esquema e instncias no MR Neste caso, o esquema de EMP poderia ser expresso como segue: EMP (nro: inteiro, nome_emp: string, idade: inteiro, cargo: string, salrio: real, depto: string) Linguagens de consultas formais Uma linguagem de consulta (Query Language) uma linguagem com a qual o usurio pode requisitar ao Sistema de Gerncia de Banco de Dados (SGBD) informaes armazenadas no banco de Dados (BD) Linguagens de consulta podem ser Procedurais O usurio descreve o algoritmo de acesso aos dados atravs de uma seqncia de instrues (COMO) No procedurais O usurio descreve a informao que deseja obter sem descrever como obt-la (O QU) Linguagens de consultas formais As linguagens de consulta e atualizao comerciais para sistemas relacionais baseiam-se na LGEBRA RELACIONAL (procedural) e no CLCULO RELACIONAL (no procedural) As operaes da lgebra e do clculo exprimem o conjunto de consultas e manipulaes possveis sobre uma base de dados relacional qualquer A lgebra apresenta o conjunto mnimo de OPERADORES RELACIONAIS que podem ser combinados para extrair da base de dados, praticamente, todas as informaes ali armazenadas (dados e seus relacionamentos) Linguagens de consultas formais O clculo estende (e completa) a potencialidade da lgebra relacional com a introduo dos quantificadores universal () e existencial (-) Operaes fundamentais da lgebra Relacional Restrio/Seleo (select): o Projeo (project): t Produto Cartesiano (cartesian product): x Unio (union): Diferena (set-difference): - Operaes da lgebra Relacional Todas as operaes operam sobre relaes e produzem uma relao (tabela relacional) como resultado Operaes unrias Restrio Projeo Operaes binrias Produto cartesiano Unio Diferena Seleciona tuplas de uma tabela que satisfazem um determinado predicado Formato: Ex.:selecionar tuplas de empregados em EMP que apresentam salrio maior que 1000 e trabalham no departamento D10
Tabela R (restrio sobre EMP) Restrio/Seleo Nro Nome_emp Idade Cargo Salrio Depto 011 Rodrigo 25 C01 5000 D10 001 Rui 30 C03 3000 D10 R = o salrio>1000 and depto=D10 (EMP) RelResultado = o predicado (RelEntrada) Em geral, os predicados permitem expressar comparaes do tipo (<, s, >, >, = e =). Alm disso, pode-se relacional com operadores lgicos (and, or, not) Exemplos: Selecione tuplas da relao EMP para as quais o nome do empregado Fabiano RelResult = o nome_emp=Fabiano (EMP) Selecione tuplas da relao EMP para as quais o salrio maior que 2000 RelResult = o salrio > 2000 (EMP) Restrio/Seleo Copia no resultado a tabela argumento, deixando de fora algumas colunas Formato: Ex.: construir uma tabela a partir de DEPTO, contendo somente os atributos nro e gerente
Tabela S (projeo sobre DEPTO) Projeo Nro Gerente D10 001 D20 020 D30 null S=t nro,gerente (DEPTO) RelResult=t colunas a copiar (RelEntrada) Projeo possvel compor operaes mais complexas da lgebra relacional atravs do aninhamento de operaes mais simples A operao de seleo que gera uma relao como resultado pode ser usada como relao de entrada para a operao de projeo Exemplo: listar os nomes dos empregados com salrio superior a 2000:
RelResult=t nome_emp (o salrio > 2000 (EMP)) Produto Cartesiano Relaciona informaes de duas relaes Monta uma tabela resultado a partir de duas tabelas TR1 e TR2 Dadas duas relaes de entrada, TR1 com N tuplas e TR2 com M tuplas, o produto cartesiano delas uma relao contendo (MxN) tuplas Operao concatena cada tupla de TR1 com todas as tuplas de TR2 Repetindo-se o produto cartesiano sobre os resultados de outros produtos, obtm-se o produto cartesiano de uma lista de tabelas (TR1,...,TRi,...,TRn) Cada tupla do resultado a concatenao de uma das tuplas de cada tabela da lista. O resultado contm todas as combinaes possveis Produto Cartesiano Quando, devido a concatenao de tuplas de duas relaes diferentes, RelResult apresenta duas colunas de mesmo nome, cada uma delas recebe, como prefixo, o nome de sua relao de origem Exemplo: listar o nome dos empregados do departamento contabilidade
RelResult1= EMP x DEPTO RelResult2= o e_nro_depto=d_nro_depto (RelResult1) RelResult3= o d_nome_depto=contabilidade (RelResult2) RelResult4= t nome_emp (RelResult3) Produto Cartesiano Ex.: construir uma tabela a partir do produto cartesiano de EMP e DEPT T = R x S Tabela T (produto cartesiano R x S) Nro Nome_emp Idade Cargo Salrio Depto Nro_depto Gerente 011 Rodrigo 25 C01 5000 D10 D10 001 011 Rodrigo 25 C01 5000 D10 D20 020 011 Rodrigo 25 C01 5000 D10 D30 Null 001 Rui 30 C03 3000 D10 D10 001 001 Rui 30 C03 3000 D10 D20 020 001 Rui 30 C03 3000 D10 D30 null Unio Mesma operao da teoria dos conjuntos A partir de duas tabelas relacionais TR1 e TR2, obtm-se uma tabela contendo todas as tuplas de TR1 mais todas as tuplas de TR2 Apesar de a operao de UNIO eliminar duplicatas, existem SGBDs (ex.:INGRES) que permitem que o usurio determine se tuplas duplicadas devem ser eliminadas do resultado ou no Unio S se pode executar UNIO sobre tabelas compatveis, ou seja, que tenham o mesmo nmero de atributos (mesma ordem) e o mesmo domnio para cada posio da lista de atributos Ex.: construir a tabela unio das tabelas EMP e R
(U = EMP R) U = EMP
Diferena Mesma operao da teoria dos conjuntos A partir de duas tabelas relacionais TR1 e TR2, obtm- se uma tabela contendo todas as tuplas de TR1 que no aparecem em TR2 Ex.: construir a tabela diferena entre as tabelas EMP e R D = Emp R Tabela D (diferena EMP R) Nro Nome_emp Idade Cargo Salrio Depto 010 Eduardo 20 C04 1000 D10 020 Fabiano 22 C02 2000 D20 005 Joaquim 18 C04 1000 D20 Definio formal da lgebra Relacional Com base nos 5 operadores (t, o, , e -) pode-se definir completamente uma expresso da lgebra relacional. Tal expresso pode ser: uma relao no banco de dados uma relao constante (dada pelo usurio do BD na formulao da consulta) Uma expresso da lgebra relacional pode-se constituir de subexpresses menores. Sejam E1 e E2 expresses da lgebra relacional, ento tambm so vlidas: E1 E2 E1 - E2 E1 x E2 o p (E1), onde p um predicado de atributos em E1 t s (E1), onde s uma lista de atributos de E1 Outras operaes da lgebra Relacional So 3 as operaes complementares da lgebra relacional Todas elas podem ser definidas em termos das 5 operaes fundamentais Interseo Juno Tetha (u) e Juno Natural () Diviso Interseo Os requisitos vlidos para a UNIO e DIFERENA valem tambm para a interseo Interseo entre duas tabelas TR1 e TR2 produz uma tabela relacional com as tuplas comuns de TR1 e TR2 EMP R = EMP (EMP R) R1 R2 = R1 (R1 R2) Outras operaes da lgebra Relacional Juno (join) A juno THETA uma operao binria que combina o produto cartesiano e a seleo em uma nica operao. Por exemplo: listar o nome e o salrio dos empregados do departamento de vendas t nome_emp, salario_emp ( o emp_depto = nro_depto and nome_depto = vendas (CLIENTE x DEPTO)) Utilizando a juno THETA, a expresso ficaria assim: t nome_emp, salario_emp (CLIENTE u DEPTO) u = emp_depto = nro_depto and nome_depto = vendas R1 u R2 = o u (R1 x R2) Outras operaes da lgebra Relacional Juno (join) A juno THETA citada fora a igualdade naqueles atributos que so comuns a R1 e R2 (atributos de mesmo nome e domnio, nas duas relaes). Isto acontece quando queremos relacionar tuplas de relaes diferentes que contm informao sobre um ente comum do mundo real (no exemplo dado, dados sobre um mesmo empregado) Ajuno natural surgiu como uma simplificao da juno THETA para estes casos Na juno natural o predicado explcito u substitudo por um predicado implcito, representado pela igualdade dos pares de atributos com mesmo nome das duas relaes envolvidas Desta forma, na juno natural o u est implcito e representa a igualdade de todos os pares de atributos de mesmo nome nas duas relaes Outras operaes da lgebra Relacional Diviso Soluciona consultas que buscam uma informao X qualquer em uma tabela relacional R1, tal que X aparea associada, em R1, a cada uma das informaes Yi (i=1,...,n) que aparecem nas n tuplas de uma tabela relacional R2 Usada para responder perguntas do tipo: Existe um X em R1, tal que, para todo o Yi (1s i sn) de R2 (tabela de n tuplas), X aparece com Yi em R1 Operao binria entre duas tabelas r e s que revela quais tuplas de r esto relacionadas a todas as tuplas de s. Equivalente a expresso: r s = t (R-S) (r) - t (R-S) ((t (R-S) (r) x s) r) Clculo Relacional de Tuplas (CRT) Linguagem no procedural (declarativa) Permite que se defina conjunto de tuplas a partir de expresses do tipo: { t | P(t) } Uma expresso do clculo relacional representa um conjunto de tuplas onde, para cada tupla t, o predicado P(t) verdadeiro: T e Result P(t) Uma Varivel Tupla (VT) representa, a cada instante, uma tupla T de uma determinada relao R. Uma frmula P(t) pode apresentar mais de uma varivel tupla Clculo Relacional de Tuplas (CRT) Exemplo de consulta: D todos os clientes que tm um emprstimo de maior valor que $1200
{t| - s e EMPRSTIMO (t[nome-cliente] = s[nome-cliente] . s[quantia] > 1200)}
Em portugus, l-se: O conjunto de todas as tuplas t, tal que existe uma tupla s na relao EMPRSTIMO para a qual os valores de t e s para o atributo nome-cliente so iguais, e o valor do atributo quantia maior que $1200 Clculo Relacional de Tuplas Em uma determinada frmula, uma VT pode aparecer como: Varivel destino: quando estiver associada a um quantificador existencial (-) ou universal () Varivel livre: em caso contrrio ao anterior Exemplo: P(t) = t e R1 . - s e R2 (t[R1.nome] = s[R2.nome]) t varivel livre enquanto s varivel destino
Qualquer frmula P(t) do CRT constituda de tomos. Um tomo pode assumir as seguintes formas: s e R, onde s uma varivel tupla e R uma relao s[x] comp u[y], onde comp e{<, s, >, >, = e =} e x um atributo em que s definido e y um atributo em que u definido. X e y devem ter domnios cujos membros possam ser comparados por comp s[x] comp C, onde C constante no domnio de x Clculo Relacional de Tuplas Para formarem frmulas, tomos podem ser combinados da seguinte maneira: Um tomo uma frmula Se P1 frmula ento P1 e (P1) so frmulas Se P1 e P2 so frmulas, ento tambm o so: P1 v P2 P1 . P2 P1 = P2 Se P(s) uma frmula vlida contendo uma VT livre s, ento tambm o so -s e R(P(s)) s e R(P(s))
Clculo Relacional de Tuplas Como na lgebra, tambm no CRT pode-se escrever expresses equivalentes. Tais equivalncias incluem trs regras P1 . P2 equivalente a (P1 v P2) P1 P2 (se P1 verdadeiro, ento P2 deve ser verdadeiro) equivalente a P1 v P2 s e R(P(s)) equivalente a -s e R(P(s)) Domnio de uma frmula relacional de tupla Uma expresso no CRT pode gerar uma relao infinita. Ex.: {t|(t e R)} Clculo Relacional de Domnio Para restringir o poder das expresses, impem-se o conceito de Domnio de uma frmula: dom(P) o conjunto de todos os valores referenciados por P explicitamente ou que aparecem em alguma das relaes referenciadas por P Uma expresso P considerada segura se, e somente se, todos os valores que aparecem no resultado so valores de dom(P) Dom((t e R)) o conjunto dos valores que aparecem em R. J a expresso {(t e R)} apresenta valores que no aparecem no domnio da frmula. Sendo assim, conclui-se que a expresso NO segura J a expresso {t| t e R . t[salario] > 2000} uma expresso segura Clculo Relacional de Domnio Um tomo no clculo relacional de domnio tem uma das seguintes formas: <x1, x2,...,xn> e r, onde r uma relao sobre n atributos e x1, x2,...,xn so variveis-domnio ou constantes-domnio (xi assume valores ou uma constante com um valor do domnio do atributo correspondente) x u y, onde x e y so variveis-domnio e u um operador de comparao (<, s, >, >, = e =). Exige-se que x e y tenham domnios que possam ser comparados por u x u c, onde x uma varivel-domnio, u um operador de comparao e c uma constante no domnio do atributo para qual x uma varivel-domnio Clculo Relacional de Domnio Poder expressivo de linguagens O CRT restrito a expresses seguras equivalente (em poder de expresso) lgebra Relacional, ou seja, para cada expresso vlida da lgebra Relacional existe uma expresso equivalente no CRT e vice-versa Exerccio Considere o seguinte BD relacional: reside (nome-pessoa, rua, cidade) trabalha (nome-pessoa, nome-companhia, salrio) localizado-em (nome-companhia, cidade) gerencia (nome-pessoa, nome-gerente) Escreva uma expresso em: lgebra relacional clculo relacional de tupla clculo relacional de domnio para cada uma das consultas abaixo: D o nome de todos os funcionrios que trabalham para a First Bank Corporation D o nome e cidade de todos os funcionrios que trabalham para a First Bank Corporation D o nome, a rua e a cidade de todos os funcionrios que trabalham para a First Bank Corporation e recebem mais de $10.000 D todos os funcionrios que moram na mesma cidade da companhia em que trabalham D todos os funcionrios que vivem na mesma cidade e na mesma rua que seu gerente D todos os empregados que no trabalham para a First Bank Corporation D todos os empregados que recebem mais do que todos os empregados da Small Bank Corporation Assuma que as companhias podem estar localizadas em diversas cidades. Encontre todas as companhias localizadas em cada cidade na qual a Small Bank Corporation est localizada Transaes em Banco de Dados O paradigma da Transao Segundo Date 1981: A transao uma unidade de trabalho do usurio (da aplicao) que atmica do ponto de vista da aplicao Transao uma coleo de operaes que executa uma nica funo lgica numa aplicao do banco de dados O paradigma da Transao Atravs da transao a aplicao leva o BD de um estado inicial consistente a outro final, tambm consistente A transao representa um comando atmico ao nvel da aplicao. Por sua complexidade, pode tambm ser apresentada ao SGBD como um programa (seqncia de comandos DML). O SGBD deve trat-la como se fosse um nico comando O paradigma da Transao A transao , portanto, um programa de aplicao para o qual o SGBD garante algumas propriedades bem especficas Atomicidade Consistncia Isolamento Durabilidade Propriedades da Transao (ACID) Atomicidade O programa que representa a transao deve, ou executar por completo e com sucesso sobre o BD, ou deve parecer nunca antes executado (Lei do Tudo-ou- Nada) Esta propriedade garantida pelo SGBD atravs de seu componente de Recovery (recuperao em caso de falhas). EX: UNDO Propriedades da Transao (ACID) Consistncia A transao s pode realizar operaes corretas sobre o BD, do ponto de vista da aplicao. Isto , a transao no pode transgredir qualquer restrio de integridade declarada ao SGBD Transaes consistentes sempre levam um BD de um estado consistente a outro tambm consistente Propriedades da Transao (ACID) Isolamento Em ambiente multiusurio (multiprogramado), a execuo de uma transao no deve ser influenciada pela execuo de outras Esta propriedade , normalmente, garantida pelo SGBD atravs de seu componente de Controle de Concorrncia (Scheduler) Propriedades da Transao (ACID) Durabilidade Os resultados de uma transao que termina com sucesso devem permanecer inalterados no BD, at que outra transao os altere e tambm termine com sucesso Isto , os resultados de transaes que terminam com sucesso devem sobreviver a falhas (de transao, de sistema ou de meio de armazenamento) Esta propriedade garantida pelo SGBD atravs de seu componente de Recovery (recuperao) Tipos de armazenamento Armazenamento voltil Memria principal Memria cache Armazenamento no-voltil Discos e fitas magnticos (backup) Armazenamento estvel Informaes armazenadas em meio estvel nunca so perdidos (discos e fitas) Tipos de falhas Erros lgicos (falha de transao) Entrada com erro, dado no encontrado, overflow... Erros do sistema Travamento mtuo (deadlock) Queda do sistema Disfunes de hardware onde meio no-voltil permanece intacto Falha no disco Quebra do cabeote de leitura/gravao Recuperao (Recovery) Diversos tipos de falhas podem violar a integridade de um sistema de banco de dados Ex.: queda de luz, falha na unidade de armazenamento, falha no programa de aplicao Testes e controles devem ser incorporados ao sistema para diminuir a possibilidade de uma falha Procedimento de reconstruo: Leva o BD a um estado consistente, aps uma falha que o tenha deixado num estado no confivel Refaz transaes Informa usurios sobre as ltimas transaes executadas Recuperao (Recovery) Princpios das tcnicas de recuperao: Redundncia de informao Limitao: No existe sistema de reconstruo/recuperao completamente seguro Exemplo: falha nos dados da reconstruo Hierarquia de armazenamento Sistema de BD reside em memria no-voltil BD dividido em unidades de armazenamento de tamanho fixo, chamados blocos (unidades de alocao de armazenamento ou de transaes de dados) Transaes transferem informaes do disco para a memria principal e depois as devolvem ao disco Operaes de entrada e sada so feitas em unidades de blocos Blocos fsicos (residentes em disco) Blocos de buffer (residentes temporariamente em memria principal) Hierarquia de armazenamento Movimentos entre disco e memria principal so iniciados pelas operaes: Input (X) Transfere para a memria o bloco fsico no qual reside um item de dados principal de X Output(X) Transfere para o disco o bloco de buffer no qual reside X e substitui o bloco fsico apropriado Hierarquia de armazenamento Transaes interagem com o sistema de BD transferindo dados de variveis de programa para o BD e, do BD para as variveis do programa, atravs das operaes Read (X,x i ) atribui o valor de dado X para a varivel local x i
Write (X,x i ) atribui valor da varivel local x i
para o item de dados X no bloco de buffer Modelo de transao Exemplo bancrio
T: read (A, a1) a1 := a1 50 write (A,a1) read (B,b1) b1 := b1 + 50 write (B,b1) Observar: Estado do BD deve ser consistente
Quando o read executado o valor a1 ou b1 lido para memria
O dado s gravado em disco se aps o comando write, houver o comando output(X) Execuo de uma Transao Begin Transaction (BOT) Seqncia de operaes DML associadas a RIs End-Of-Transaction (EOT) Inicia aes padro para UNDO Garantia de atomicidade da transao Execuo das operaes DML e teste de RIs imediatas, com msgs de erros Teste de RIs postergadas com msg de erro e UNDO Aes padro para REDO garantia de durabilidade Avisa a aplicao/usurio do final da transao Comandos de uma transao Incio da transao BEGIN-TRANSACTION Fim da transao Normal: COMMIT-TRANSACTION Anormal: ABORT-TRANSACTION Corretude e Atomicidade Corretude (correctness) Cada transao deve ser um programa que preserva a consistncia do BD Atomicidade Todas operaes associadas a uma transao precisam ser executadas at o final, ou nenhuma deve ser executada Transao abortada no deve ter efeito sobre o estado do BD transao deve ser desfeita (ROLL BACK) Estados das transaes Ativo (estado inicial) Parcialmente compromissado (committed) depois que a ltima instruo foi executada Falhado (no pode mais prosseguir) Abortado - depois que a transao foi desfeita e o BD foi restaurado ao seu estado anterior ao incio da transao Compromissado depois de a transao ser completada com sucesso Diagrama de Estados das transaes ativo Parcialmente compromissado compromissado falhado abortado Como assegurar a atomicidade? Sistemas baseados em LOG Log com modificaes adiadas Log com modificaes imediatas Paginao com imagem LOG do Banco de Dados Registra modificaes no BD Descreve uma nica gravao no BD e contm os seguintes campos: Nome da transao Nome do item de dado Valor antigo Novo valor Exemplo de LOG Cada vez que executada uma alterao sobre uma linha da tabela, gravado no registro de log Identificador da transao Identificador do registro Valor antigo (before image) Valor novo (after image) Incluso Txx 100 X Excluso Txy 200 Y Alterao Txz 300 A B LOG com modificaes adiadas Durante a execuo de uma transao, todas as operaes write so adiadas at que a transao seja parcialmente compromissada Todas atualizaes so registradas no LOG, que precisa ser mantido em meio estvel Depois de uma falha o esquema de recuperao consulta o LOG e cada transao compromissada refeita usando a operao redo Pode-se usar checkpoints para reduzir a sobrecarga busca no LOG LOG com modificaes adiadas Ponto de verificao (checkpoints) Ponto em que se garante que os contedos dos buffers foram para o arquivo de LOG e disco A execuo de um checkpoint envolve: Descarregar todos os buffers do arquivo de log Gravar um registro de checkpoint no arquivo de log Descarregar todos os buffers da base de dados Gravar na base de dados o endereo do ltimo registro de checkpoint Cenrio para reconstruo tempo T1 T2 T3 T4 T5 checkpoint Falha no sistema Alteraes at este momento foram para disco redo undo redo undo Aes de reconstruo Quando ocorre uma falha o SGBD verifica o ltimo checkpoint A partir deste, neste cenrios, as seguintes aes devem ser realizadas: T1 no afetada T2 e T4 devem ser refeitas, utilizando o arquivo de log T3 e T5 devem ser desfeitas, tambm utilizando o arquivo de log Recuperao de falha de armazenamento O BD est danificado Deve ser usada a cpia de segurana. A partir dela devem ser refeitas todas as operaes, utilizando o arquivo de log LOG com modificaes imediatas Todas atualizaes so aplicadas diretamente sobre o BD e um log com todas as mudanas do BD mantido em meio de armazenamento estvel Em caso de falha, usa-se o arquivo de log para restaurar o BD para um estado consistente Isso realizado atravs das operaes de redo e undo Pode-se usar checkpoints LOG com modificaes imediatas Undo (T i ) restaura o valor de todos os itens de dados atualizados pela transao aos valores antigo T i
Uma transao deve ser desfeita se o log contiver o registro <T i starts>, mas no o registro <T i
commits> Redo (T i ) ajusta o valor de todos os itens de dados atualizados pela transao T i aos novos valores Uma transao deve ser refeita se o log contiver o registro <T i starts>, e o registro <T i commits> Exemplo de log em 3 momentos (a)
<T 0 starts> <T 0 , A, 1000, 950> <T 0 , B, 2000, 2050> <T 0 commits> <T 1 starts> <T 1 , C, 700, 600> <T 1 commits> O que acontece se ocorrer um ERRO nestes pontos? Paginao com imagem Duas tabelas de pginas so mantidas durante a existncia de uma transao Tabela de pginas corrente Tabela de pginas imagem Ambas so idnticas quando a transao inicia Tabela de pginas nunca modificada durante a transao Tabela de pginas corrente pode ser alterada quando uma transao executa uma operao de write Paginao com imagem Todas operaes de input e output usam a tabela de pginas corrente para localizar uma pgina do BD no disco Quando uma tabela parcialmente compromissada, a tabela de pginas imagem descartada e a tabela de pginas corrente torna-se a nova tabela de pginas Se a transao aborta, a tabela de pginas corrente simplesmente descartada Exemplo de tabela de pginas 1 2 3 4 5 6 7 Tabela de pginas imagem pginas no disco 1 2 3 4 5 6 7 Tabela de pginas corrente
Execuo de transao Suponha que a transao execute uma operao write(X, xj) e que X resida na pgina i. A operao write executada da seguinte forma: Se a pgina i no estiver em memria principal, ento emita input(X) Se esta a primeira gravao executada na pgina i por essa transao, ento modifique a tabela de pginas corrente da seguinte maneira: Encontre uma pgina livre no disco (BD tem acesso a uma lista de pginas no usadas) Remova a pgina encontrada no passo anterior da lista de pginas livres Modifique a tabela de pginas corrente para que a entrada i aponte para a pgina livre encontrada no passo anterior Atribua o valor de xj para X na pgina de buffer Paginao com imagem Para compromissar uma transao: Assegurar que todas as pginas de buffer na memria principal que tenham sido alteradas pela transao sejam gravadas em disco Gravar a tabela de pginas corrente para o disco Gravar o endereo de disco da pgina corrente na localizao fixa no dispositivo estvel contendo o endereo da tabela de pginas imagem Paginao com imagem Vantagens No possui sobrecarga da sada de registro de log Recuperao de quedas mais rpida, pois nenhuma operao de undo e redo necessria Desvantagens Fragmentao dos dados Coleta de lixo (garbage collection) Concorrncia Um dos critrios para classificao de SGBDs o nmero de usurios que pode usar o sistema concorrentemente Monousurio: no mximo um usurio pode utilizar o sistema a cada vez Multiusurio: vrios usurios podem utilizar o sistema concorrentemente Execuo concorrente na verdade execuo intercalada (interleaved) Concorrncia A A B B C D tempo t1 t2 t3 t4 Execuo intercalada Execuo simultnea Necessidade de controle de Concorrncia Cada transao isolada produz um estado correto do BD No entanto diversos problemas podem ocorrer quando transaes so executadas concorrentemente, sem controle Problemas de interferncia entre transaes Atualizao perdida (lost update) Deadlock Leitura de valor inexistente (phantom problem) Problemas relacionados ao controle de concorrncia (Isolamento) Quando duas ou mais transaes executam concorrentemente (em paralelo, acessando dados comuns), suas operaes podem ser processadas pelo sistema de computao de forma intercalada (interleaving) Interleaving: operaes de uma transao so processadas entre duas operaes de outra transao Interleaving interferncia entre transaes inconsistncia do BD Problemas relacionados ao controle de concorrncia (Isolamento) Alguns fenmenos podem ocorrer a partir do interleaving Lost update (perda da alguma atualizao do BD) Inconsistent Retrieval (acesso invlido a dados) Phantom problem (problema do fantasma) Soluo mais simples Proibir totalmente o interleaving na execuo de duas ou mais transaes (execuo serial conseqncia m utilizao dos recursos do sistema) Problemas relacionados ao controle de concorrncia (Isolamento) Soluo mais econmica Execuo concorrente mas serializvel de duas ou mais transaes Teoria da Serializabilidade A execuo de um conjunto de transaes dita serializvel se, e somente se, ela produz os mesmos resultados e os mesmos efeitos no BD que alguma das possveis execues seriais do mesmo conjunto de transaes J que a execuo de uma transao consistente sempre leva o BD de um estado consistente a outro estado consistente, ento execues seriais (de transaes consistentes) tambm so corretas Teoria da Serializabilidade Se execues seriais so sempre corretas e qualquer execuo serializvel sempre equivalente a alguma execuo serial, ento execues serializveis so consideradas tambm corretas
Critrio de correo do BD Serializabilidade e consistncia de transao Se cada transao, quando executada sozinha sobre o BD, preserva a consistncia deste, ento a execuo seria de transaes tambm preserva J que execues serializveis so equivalentes a execues seriais, elas tambm mantm a consistncia do BD Critrio de correo do BD Todas as execues serializveis de um mesmo conjunto de transaes so igualmente corretas. Portanto o SGBD pode executar as transaes do conjunto em qualquer ordem, desde que o efeito desta execuo seja o mesmo de alguma execuo serial deste conjunto Limitaes das execues serializveis A serializabilidade no a soluo ideal para todos os tipos de aplicao. Por exemplo: Aplicaes estatsticas que realizam operaes (estatsticas) sobre uma grande massa de dados Alguns lost updates no fariam sentido, pois no alterariam valores mdios de forma expressiva (serializabilidade aqui s penaliza a performance do sistema) Aplicaes de controle de processos Processos contnuos no tem fim, portanto serializabilidade no tem sentido. Melhor impor excluso mtua em sees crticas dos programas executados (ex: uso de semforos, monitores) Atualizao perdida Ambas transaes esto alterando o mesmo dado Soluo: serializar as transaes Mecanismo de bloqueio (locking) Mecanismo de marca de tempo (timestamping) tempo T1 T2 L item(X); X := X-N;
Escreve item(X);
L item(X); X := X+M;
Escreve item(X); Bloqueio (locking) Unidade de bloqueio: usualmente registro Menor unidade maior concorrncia tempo T1 T2 L e bloqueia item(X); X := X-N;
Escreve e libera item(X);
L e bloqueia item(X); (espera) (espera)
L e bloqueia item(X); X := X+M; Escreve e libera item(X); Deadlock Duas ou mais transaes dependem uma do final da(s) outra(s) para prosseguir Dependem de liberaes mtuas de lock Abordagens para o problema de deadlock Evitar (utilizado em sistemas operacionais) Detectar e resolver (adotado em SGBDs) Deadlock tempo T1 T2 L e bloqueia item(X);
L e bloqueia item(Y); (espera)
L e bloqueia item(Y);
L e bloqueia item(X); (espera) Solues para o problema de Deadlock Evitar o deadlock No permitir transaes concorrentes Drstica demais Vivel apenas em pequenas bases de dados monousurios ou operadas em batch Obrigar os usurios a proteger os dados em uma ordem pr- estabelecida Difcil de implementar quando h muitos usurios Impossvel quando o bloqueio comandado por contedo dos registros Proteger todos os dados necessrios transao com uma nica instruo Linguagens no oferecem instruo to poderosa Determinao dos dados pode ocorrer ao longo da transao Solues para o problema de Deadlock Detectar e resolver o deadlock Uso de locking Timeout SGBD aborta uma das transaes envolvidas Qual? Critrio a ser definido Prioridade Tempo de execuo Idade Leitura de valor inexistente (phantom) Transao 2 v alterao realizada pela transao 1 que foi desfeita Soluo: dados s devem ser liberados ao final da transao tempo T1 T2 L e bloqueia item(X); X := X-N; Escreve e libera item(X);
Aborta transao; (rollback)
L e bloqueia item(X); X := X+M; Escreve e libera item(X);
SQL - Linguagem de Manipulao de Dados Vises Vises = Uma maneira alternativa para a visualizao dos dados armazenados nas tabelas atravs de VISES = Uma viso uma tabela lgica (virtual) derivada de uma ou mais tabelas ou mesmo de outras vises = Esta tabela virtual no existe por si, mas aparece ao usurio como se assim o fosse = As vises aparecem para os usurios como se fossem tabelas, podendo ser consultadas e, em alguns casos, atualizadas = As vises no so armazenadas no banco de dados Definio de uma Viso = A base de uma viso a clusula SELECT = Quando uma viso criada define-se o comando SELECT que ir criar a viso, cujo contedo gerado sempre no momento em que a viso acessada = Sintaxe:
CREATE [OR REPLACE] VIEW nome_da_view [ (sinonimo[, sinonimo] ) ] AS SELECT Definio de uma Viso = Qualquer tabela derivada (que pode ser recuperada atravs de uma instruo SELECT) pode, teoricamente, definir-se como uma viso = Uma subconsulta numa definio de viso no inclui o ORDER BY (ORDER BY no faz sentido, porque o objeto a ser definido a viso uma tabela e tabelas relacionais no tm ordenamento)
Exemplo = Quando executada esta CREATE VIEW, a SELECT-FROM-WHERE que segue a AS (que define como deriva a viso) no executada, apenas armazenada no SGBD (tabela SYSVIEWS, no caso de DB2) = Neste caso, bons-fornecedores uma janela para a tabela FRONECEDOR
CREATE VIEW bons_fornecedores AS SELECT COD_FORNEC, STATUS, CIDADE FROM FORNCEDOR WHERE STATUS > 15; Exemplo = bons-fornecedores uma tabela dinmica, pois as modificaes em FORNECEDOR sero automticas e visveis atravs desta janela (a recproca verdadeira) = Viso resultante:
COD_FORNEC NOME STATUS CIDADE S1 Smith 20 London S2 Jones 10 Paris S3 Blake 30 Paris S4 Clark 20 London S5 Adams 30 Athens Vises = Na definio de uma viso podemos usar o comando SELECT para selecionar, renomear e redistribuir colunas = Expresses aritmticas e funes pr-definidas podem ser usadas para criar novas colunas = As condies da clusula WHERE so utilizadas para selecionar as linhas que devem aparecer numa viso, assim como efetuar as junes desejadas = A clusula GROUP BY pode ser utilizada para sumarizar dados nas vises Vises = Uma viso pode ser vista como uma sntese dos dados existentes nas tabelas ou outras vises = Nomenclatura: = O termo relao pode ser usado tanto para tabelas quanto para vises. Assim, tabelas so relaes armazenadas fisicamente, enquanto vises so relaes lgicas = Usualmente as relaes armazenadas so chamadas de base tables Vises = O exemplo cria uma viso baseada na tabela FUNCIONARIO, contendo apenas trs colunas desta tabela e apresentando todas as linhas Cod_Func Nome Cod_Filial Salario 1 JOAO DA SILVA 348 1800,00 2 JOSE DA SILVA 348 1400,00 3 SILVA DA SILVA 348 1700,00 4 GAUCHO DA FRONTEIRA 345 1800,00 5 GILMAR D. PILCHA 345 1900.00 6 GILBERTO BICHINHO 347 2000.00 7 MARIA DO SOCORRO 347 1700.00 8 ZORA YONARA 345 1850.00 Funcionrio Criando uma Viso CREATE VIEW V_FUNCIONARIO AS SELECT Cod_Func, Cod_Filial, Nome FROM FUNCIONARIO V_Funcionrio Cod_Func Cod_Filial Nome 1 348 JOAO DA SILVA 2 348 JOSE DA SILVA 3 348 SILVA DA SILVA 4 345 GAUCHO DA FRONTEIRA 5 345 GILMAR D. PILCHA 6 347 GILBERTO BICHINHO 7 347 MARIA DO SOCORRO 8 345 ZORA YONARA Criando uma Viso = Este exemplo cria uma viso com todos os funcionrios da filial de Porto Alegre, realizando ao mesmo tempo uma juno, criando campos derivados e restringindo as linhas as serem visualizadas:
CREATE VIEW V_FUNCIONARIO_POA AS SELECT Cod_Func, Nome, Salario Salario_Antigo, Salario * 1.1 Novo_Salario FROM FUNCIONARIO FU, FILIAL FI, CIDADE CI WHERE CI.Nome = PORTO ALEGRE AND CI.Cod_Cidade = FI.Cod_Cidade AND FI.Cod_Filial = FU.Cod_Filial Criando uma Viso
V_Funcionrio_POA Cod_Func Nome Salario_Antigo Novo_Salario 4 GAUCHO DA FRONTEIRA 1800.00 1980.00 5 GILMAR D. PILCHA 1900.00 2090.00 8 ZORA YONARA 1850.00 2035.00 Consultando uma Viso = O usurio pode consultar uma viso usando um comando SELECT. O SGBD junta o SELECT do usurio com o SELECT da definio da viso e executa a consulta = As seguintes consultas poderiam ser realizadas sobre a viso FUNCIONARIO_POA: SELECT Cod_Func, Nome, Salario FROM FUNCIONARIO_POA WHERE Novo_Salario > 1700.00
SELECT Cod_Func, Nome, Cod_Cidade FROM FUNCIONARIO_POA, PEDIDO WHERE FUNCIONARIO_POA.Cod_Func = PEDIDO.Cod_Func Consultando uma Viso = Uma viso dependente da(s) tabela(s) sobre a qual est definida = Quando so inseridos, alterados ou apagados dados de uma viso estas alteraes so aplicadas nas prprias tabelas = Se as tabelas so 'dropadas' as vises baseadas nas mesmas tambm so Consultando uma Viso = Considerando a seguinte consulta viso bons_fornecedores: SELECT * FROM bons_fornecedores WHERE CIDADE = London;
= Este SELECT se comporta como um SELECT normal em uma tabela bsica convencional: SELECT COD_FORNEC, STATUS, CIDADE FROM FORNECEDOR WHERE CIDADE = London AND STATUS > 15; Sinnimos = Vises tambm podem ser utilizadas para renomear atributos das tabelas, normalmente com o objetivo de criar nomes mais familiares ao usurio
CREATE VIEW V_FUNCIONARIO2 ( Codigo_Funcionario, Codigo_Filial, Nome_Funcionario ) AS SELECT Cod_Func, Cod_Filial, Nome FROM FUNCIONARIO
CREATE VIEW V_FILIAL ( Cod_Filial, menor_salario, maior_salario, media_salario ) AS SELECT Cod_Filial, MIN(salario), MAX(salario), AVG(Salario) FROM FUNCIONARIO GROUP BY Cod_Filial Modificando Vises = Apenas vises simples podem ser submetidas aos comandos INSERT, UPDATE ou DELETE = Em geral, s podem sofrer modificao de dados vises definidas sobre uma nica tabela e onde cada linha e coluna da viso correspondem a uma nica linha e coluna da tabela base = Vises baseadas em mais do que uma tabela no podem ser utilizadas para alterar o contedo dos dados, ou seja, os comandos INSERT, UPDATE e DELETE no podem ser utilizados Modificando Vises = As operaes de modificao so tratadas de forma similar ao SELECT = A operao: UPDATE bons_fornecedores SET STATUS = STATUS + 10 WHERE CIDADE = Paris;
= Ser convertida pelo tradutor em: UPDATE FORNECEDOR SET STATUS = STATUS + 10 WHERE CIDADE = Paris AND STATUS > 15; Modificando Vises = Vises que contm funes de agregao, ou a clusula GROUP BY ou ainda o termos DISTINCT tambm no podem ter seu contedo alterado, independente de serem baseadas em uma ou mais tabelas = Nos casos em que permitido a atualizao da viso, o SGBD traduz a esta modificao para a tabela fisicamente armazenada e nesta executa o procedimento Modificando Vises = A expresso ALTER no pode ser aplicada sobre uma viso = Para que a viso seja modificada necessrio remover (dropar) e criar a viso novamente = 'Dropar uma viso afeta apenas os programas que usam a viso, no afetando as tabelas nas quais a viso estava baseada Modificando Vises = Para remover uma viso usa-se o comando: DROP VIEW nome_da_viso
= Caso seja removida (dropada) uma tabela bsica, todas as vises definidas a partir da mesma sero automaticamente anuladas Vises Atualizveis = Vises atualizveis subconjunto linhas e colunas de uma tabela bsica = Uma viso subconjunto de coluna teoricamente atualizvel se, e apenas se, preservar a chave primria da tabela fundamental = Viso subconjunto de linha: CREATE VIEW fornecedores_londres AS SELECT COD_FORNEC, NOME, STATUS, CIDADE FROM FORNCEDOR WHERE CIDADE = London; Esta viso inclui a chave primria da tabela fundamental e atualizvel Vises Atualizveis = Viso com juno:
CREATE VIEW peca_fornec (COD_FORNEC, NOME, STATUS, CIDADE_FORN, COD_PECA, NOME_PECA, COR, PESO, CIDADE_PECA) AS SELECT COD_FORNEC, NOME, STATUS, CIDADE_FORN, COD_PECA, NOME_PECA, COR, PESO, CIDADE_PECA FROM FORNCEDOR, PECA WHERE CIDADE_FORN = CIDADE_PECA; Esta viso uma juno (equijoin) e no suporta atualizaes Vises Atualizveis = Viso resumo estatstico:
CREATE VIEW peso_qtde (COD_PECA, TOTQTDE) AS SELECT COD_PECA, SUM (QTDE) FROM FORNCEDOR_PECA GROUP BY COD_PECA; Esta viso no suporta operaes de INSERT e UPDATE no campo TOTQTDE Objetivos = Vises so utilizadas com os seguintes objetivos: = Controle de acesso aos dados, restringindo o acesso dos usurios a determinadas linhas e/ou colunas das tabelas. Dados ocultos so aqueles no visveis atravs de determinada viso (obrigar os usurios a acessar o BD atravs de vises controla a autorizao) = Simplificao de consultas, reduzindo a complexidade dos dados e apresentando verses sintticas das tabelas aos usurios (usurios finais e desenvolvedores) Objetivos = Vises so utilizadas com os seguintes objetivos: = Aumento da independncia lgica de dados = os usurios e os programas de usurios so independentes da estrutura lgica dos dados = aspectos a considerar: crescimento e reestruturao = Crescimento: medida que o BD cresce para incorporar novos tipos de informaes, o mesmo ocorre com a definio do BD = Reestruturao: alterao das informaes do BD. indesejvel, todavia por vezes inevitvel = Acesso a dados derivados sem a necessidade de armazenar dados redundantes