Você está na página 1de 84

FACULDADE CENECISTA DE VARGINHA

Apostila

BANCO DE DADOS II

2012

NDICE
Unidade I. REVISO CONCEITUAL ......................................................................................................................... 9

I.1. SGDB ........................................................................................................................................................................... 9 I.2. MODELO de dados relacional ........................................................................................................................... 9 I.2.1. I.2.2. I.2.3. I.2.4. I.2.5. I.2.6. I.2.7. I.2.8. I.2.9. I.2.10. I.2.11. I.2.12. I.2.13. I.2.14. I.2.15. I.2.16. I.2.17. I.2.18. I.2.19. Esquema ..................................................................................................................................................... 9 Banco de dados ....................................................................................................................................... 10 Tabela........................................................................................................................................................... 10 Relao ........................................................................................................................................................ 10 Tupla ............................................................................................................................................................. 10 Domnio ...................................................................................................................................................... 10 Atributo ....................................................................................................................................................... 10 Chave-primria ......................................................................................................................................... 10 Chave estrangeira ................................................................................................................................... 10 Chave nica .......................................................................................................................................... 10 Chave de verificao......................................................................................................................... 10 Normalizao ...................................................................................................................................... 11 SQL .......................................................................................................................................................... 11 DDL .......................................................................................................................................................... 11 DCL .......................................................................................................................................................... 11 DML ......................................................................................................................................................... 12 Metadata ............................................................................................................................................... 12 Dicionrio de dados ......................................................................................................................... 12 Catlogo de dados ............................................................................................................................ 12

I.3. ALGUMAS TECNOLOGIAS PARA BANCO DE DADOS RELACIONAL ................................................. 13 I.3.1. I.3.2. Servidores de banco de dados relacionais ................................................................................... 13 Ferramentas para manipulao ......................................................................................................... 13

I.4. ATIVIDADES I ........................................................................................................................................................... 14 Unidade II. CONSULTAS AVANADAS COM SQL ............................................................................................. 16

II.1. JOINS .......................................................................................................................................................................... 16 II.1.1. INNER JOIN................................................................................................................................................ 16

II.1.2. II.1.3.

OUTER JOIN (LEFT/RIGHT/FULL) ....................................................................................................... 16 CROSSJOIN ................................................................................................................................................ 16

II.2. UNION ........................................................................................................................................................................ 17 II.3. SELECT FROM SELECT .......................................................................................................................................... 17 II.4. FIRST ........................................................................................................................................................................... 17 II.5. SKIP .............................................................................................................................................................................. 17 II.6. ROWS.......................................................................................................................................................................... 18 II.7. CONCATENAO .................................................................................................................................................. 18 II.8. ATIVIDADE II ............................................................................................................................................................ 18 Unidade III. III.1. NDICES E FUNES......................................................................................................................... 19

ndices ............................................................................................................................................................... 19 ndice Primrio .................................................................................................................................... 19 ndice de agrupamento (clustering) ........................................................................................... 19 ndice secundrio............................................................................................................................... 20 ndice baseado em rvore .............................................................................................................. 20 SQL para manipulao de ndices ............................................................................................... 21

III.1.1. III.1.2. III.1.3. III.1.4. III.1.5. III.2.

Funes ............................................................................................................................................................. 21 Funes Internas ................................................................................................................................ 21 Funes de usurio ........................................................................................................................... 25

III.2.1. III.2.2. III.3.

group by ........................................................................................................................................................... 25 HAVING ................................................................................................................................................. 25

III.3.1. III.4.

ATIVIDADE III .................................................................................................................................................. 27 SEGURANA ........................................................................................................................................ 28

Unidade IV. IV.1.

controle de acesso ....................................................................................................................................... 28 GRANT.................................................................................................................................................... 28 REVOKE .................................................................................................................................................. 30 CONTROLE DE ACESSO NO FIREBIRD....................................................................................... 31

IV.1.1. IV.1.2. IV.1.3. IV.2.

ATIVIDADE IV.................................................................................................................................................. 33 dsql - stored procedure ........................................................................................................................ 34

Unidade V.

V.1. STORED PROCEDURE ........................................................................................................................................... 34 V.1.1. V.1.2. V.1.3. V.1.4. V.1.5. O comando CREATE PROCEDURE .................................................................................................... 34 Parmetros ................................................................................................................................................. 34 Declarando variveis locais ................................................................................................................. 35 Corpo da Procedure ............................................................................................................................... 36 Elementos de linguagem ..................................................................................................................... 36

V.1.6. V.1.7. V.1.8. V.1.9. V.1.10. V.1.11. V.1.12. V.1.13.

Bloco de comandos BEGIN-END ....................................................................................................... 36 Comandos de atribuio ...................................................................................................................... 36 Comandos SQL nas STORED PROCEDURES ................................................................................. 37 Usando FOR SELECT e DO ................................................................................................................... 38 Usando o SUSPEND .......................................................................................................................... 38 Criando e modificando Stored Procedures ............................................................................. 39 Apagando e alterando Stored Procedures .............................................................................. 39 Chamando Stored Procedures ..................................................................................................... 40

V.2. ATIVIDADE V ............................................................................................................................................................ 42 Unidade VI. VI.1. VI.2. VI.3. VI.4. VI.5. VI.6. VI.7. DSQL - TRIGGERS .............................................................................................................................. 43

Usando CREATE TRIGGER .......................................................................................................................... 43 BEFORE/AFTER ............................................................................................................................................... 44 Usando OLD e NEW ..................................................................................................................................... 44 Gerando EXCEPTIONS ................................................................................................................................. 44 Usando GENERATORS ................................................................................................................................ 45 ALterando e excluindo Triggers .............................................................................................................. 45 ATIVIDADE VI.................................................................................................................................................. 47 VIEWS ..................................................................................................................................................... 48

Unidade VII. VII.1. VII.2. VII.3. VII.4.

O QUE UMA View? ................................................................................................................................... 48 CRIANDO VIEW ............................................................................................................................................. 48 Views atualizveis ......................................................................................................................................... 49 atividade VII .................................................................................................................................................... 50 TRANSAES ...................................................................................................................................... 51

Unidade VIII. VIII.1.

Modos de Acesso ......................................................................................................................................... 52 READ WRITE ......................................................................................................................................... 52 READ ONLY .......................................................................................................................................... 52

VIII.1.1. VIII.1.2. VIII.2.

Tipos de Bloqueio ......................................................................................................................................... 52 WAIT ....................................................................................................................................................... 52 NO-WAIT............................................................................................................................................... 52

VIII.2.1. VIII.2.2. VIII.3.

Nvel de isolamento ..................................................................................................................................... 52 Read uncommitted ........................................................................................................................... 52 Read committed................................................................................................................................. 52 Snapshot ............................................................................................................................................... 53 Snapshot table stability ................................................................................................................... 53

VIII.3.1. VIII.3.2. VIII.3.3. VIII.3.4. VIII.4.

modo de pr-alocao ............................................................................................................................... 53

VIII.5. VIII.6.

Exemplo de transao ................................................................................................................................. 54 ATIVIDADE VIII ............................................................................................................................................... 55 PROJETO COMPLETO (TRABALHO) ............................................................................................ 56 BANCO DE DADOS DISTRIBUDO .................................................................................................... 57

Unidade IX. Unidade X.

X.1. Principais caractersticas de um BDD ............................................................................................................. 57 X.2. Exemplo da Descrio de UM BDD ................................................................................................................ 59 X.3. PROJETO DE BDD................................................................................................................................................... 60 X.4. ADMINISTRAO DE BDD ................................................................................................................................. 62 X.4.1. X.4.2. Organizao e Tarefas da Equipe de Administrao ................................................................ 62 Problemas que Afetam a Administrao ....................................................................................... 63

X.5. ATIVIDADE X ............................................................................................................................................................ 64 Unidade XI. XI.1. XI.2. XI.3. XI.4. XI.5. XI.6. Banco de dados ORIENTADO A OBJETOS ............................................................................... 65

ESTRUTURA E CARACTERSITICAS ......................................................................................................... 65 Banco de Dados OO no mercado .......................................................................................................... 67 Object Definition Language (ODL .......................................................................................................... 67 Object Query Language (OQL) ................................................................................................................ 68 Object Query Language ............................................................................................................................. 68 atividade XI ...................................................................................................................................................... 72 TECNOLOGIAS EMERGENTES ....................................................................................................... 74

Unidade XII. XII.1. XII.2. XII.3.

DATA WAREHOUSE ..................................................................................................................................... 74 DATA MART .................................................................................................................................................... 75 OLAP .................................................................................................................................................................. 76 OLAP com IBExpert ........................................................................................................................... 77

XII.3.1. XII.4.

Data Mining .................................................................................................................................................... 78 Tarefas e tcnicas em minerao de dados ............................................................................ 79

XII.4.1. XII.5.

Banco de dados orientado a documentos ......................................................................................... 79 Comparativo Relacional e Orientado a Documentos .......................................................... 80

XII.5.1. XII.6.

ATIVIDADE XII ................................................................................................................................................ 83

NDICE DE FIGURAS
Figura 1 Clube.fdb ..........................................................................................................................................................................14 Figura 2 ndice clusterizado .......................................................................................................................................................20 Figura 3 ndice B+ ..........................................................................................................................................................................20 Figura 4 Tela de controle de acesso do Ibexpert ..............................................................................................................32 Figura 5 - Transao .........................................................................................................................................................................51 Figura 6 Esquema de um banco de dados distribudo ...................................................................................................58 Figura 7 Ambiente de Data Warehouse ................................................................................................................................75 Figura 8 OLAP com IBExpert ......................................................................................................................................................77 Figura 9 Grfico OLAP - IBExpert .............................................................................................................................................78

PREFCIO
Este material compreende o contedo bsico da disciplina Banco de dados II do curso de Sistemas de Informao. O objetivo principal desenvolver um banco de dados relacional considerando os principais requisitos conceituais de um SGDB e tecnologias emergentes relacionadas a banco de dados. So requisitos bsicos as disciplinas de banco de dados I, lgica de programao e ingls bsico. Espera-se capacitar o aluno a entender/manipular conceitos/ferramentas associados aos sistemas gerenciadores de banco de dados relacionais (SGBDR) e as principais atividades de administrao de banco de dados. Os seguintes recursos sero amplamente tratados: Desenvolvimento de procedimentos na linguagem nativa do SGBD; Construo de consultas complexas atravs da SQL; Anlise de operaes DML para buscar a otimizao visando melhores resultados de performance; Apresentar conceitos de transaes em SGBDs, como concorrncia e recuperao em caso de falhas. Alm de trazer um referencial que possibilita a compreenso dos principais conceitos, este material apresenta ferramentas, exemplos e aplicaes prticas que possibilitam ao aluno entender, observar e praticar a construo de bancos de dados de acordo com o cenrio de estudo. A linguagem SQL ser abordada de forma mais aprofundada para permitir que o aluno possa executar operaes avanadas para tirar melhor proveito do banco de dados. Ao final do perodo o aluno ter condies de projetar banco de dados relacional, manipular dados e extrair informaes conforme suas necessidades, gerenciar e administrar um banco de dados completo.

INTRODUO
Depois de conhecer os principais conceitos que envolvem banco de dados, na disciplina de banco de dados I, este material visa complementar o estudo desta tecnologia, completando os conceitos no abordados anteriormente. Para um bom aproveitamento dos contedos apresentados imprescindvel que o aluno reveja os conceitos vistos anteriormente e pratique todos os comandos apresentados. importante frisar que um profissional de sucesso em banco de dados precisa experimentar diversas ferramentas, tecnologias em mltiplos cenrios para desenvolver com tranqilidade as tarefas e superar os desafios atpicos. Recomenda-se buscar outras fontes de informaes como livros, disponveis na biblioteca da Instituio, visitar sites especializados, instalar servidores de bancos de dados e implementar solues desde as mais simples at aquelas que usam todos os conceitos abordados.

UNIDADE I. REVISO CONCEITUAL


I.1. SGDB
Um SGBD - Sistema de Gerenciamento de Banco de Dados uma coleo de programas que permitem ao usurio definir, construir e manipular Bases de Dados para as mais diversas finalidades. Propriedades bsicas de um SGDB: Autoconteno; Independncia dos Dados; Abstrao dos Dados; Mltiplas Vises de dados; Transaes; Acesso automtico; Controle de redundncia dos dados; Compartilhamento de dados entre mltiplos usurios; A restrio de acesso aos dados para usurios no autorizados; Os diferentes tipos de interface para os diferentes usurios; A representao dos dados com um nvel grande de complexidade; Garantia da restrio de integridade, que mantm os dados ntegros; Mecanismos de segurana dos dados, tais como, cpia (backup) e recuperao (recovery) de dados; Flexibilidade na mudana das estruturas de dados; Garantia de que dados sempre atuais esto disponveis; Economia de escala relacionada com a reduo do tempo de desenvolvimento da aplicao, j que um dado usado uma vez continuar disponvel para outras aplicaes.

I.2. MODELO DE DADOS RELACIONAL


O modelo relacional um dos modelos mais utilizados e, apesar das recentes atualizaes, ainda considerado um padro para a maioria das aplicaes em banco de dados.
A base da moderna tecnologia de banco de dados , sem dvida, o modelo relacional: essa base que faz da rea uma cincia. (DATE, 2003, p. 93)

I.2.1.

Esquema

Esquema relacional um conjunto de entidades e relaes do tipo: R(A1,A2,...,An) Onde: R o nome de uma relao; Ai o nome de um atributo que representa um papel de um domnio D em R dom (Ai); n o grau da relao.

10

I.2.2.

Banco de dados

um conjunto de tabelas relacionadas incluindo suas restries, regras e dados. I.2.3. Tabela

Uma tabela , na verdade, uma matriz de linhas e colunas, onde as linhas tambm so chamadas de registros e as colunas so chamadas de campos. I.2.4. Relao

Uma relao r(R) um conjunto de n-tuplas r = {t1, t2,..., tn}, onde cada n-tupla t uma lista ordenada de n valores t=(v1, v2,...,vn), sendo cada vi um elemento do dom(Ai) ou um valor especial nulo. I.2.5. Tupla

cada linha da tabela, tambm chamada de registro. I.2.6. Domnio

Um domnio D um conjunto de valores atmicos (indivisvel). Um mtodo comum para especificao de domnio definir um tipo de dado do qual os valores de dados que formam o domnio sejam retirados. I.2.7. Atributo

Um atributo cada coluna de uma tabela, tambm chamado de campo. I.2.8. Chave-primria

o atributo ou conjunto de atributos que serve para identificar uma tupla. Dizemos que uma chave primria (Primary key) simples quando formada por apenas um atributo, ou composta quando formada por mais de um atributo. As relaes em um banco de dados se estabelecem a partir das chaves primrias. Uma chave primria no pode ser duplicada e no pode aceitar valor nulo (null). I.2.9. Chave estrangeira

So atributos que identificam registros em outras tabelas. A chave estrangeira (constraints key) serve para representar uma tupla armazenada em outra tabela do mesmo banco de dados para estabelecer uma restrio. I.2.10. Chave nica

Uma chave nica tem a funo de impedir a duplicidade de atributos denominados chave candidata, ou seja, que serve para identificar a tupla, mas no chave primria. Podemos dizer que toda chave primria nica mas nem toda chave nica primria. I.2.11. Chave de verificao

Check constraint uma chave que restringe ou valida os valores de um atributo. Geralmente usada para definir domnio de usurio esttico ou dinmico. Uma restrio esttica sempre valida os mesmo valores enquanto que uma restrio dinmica valida conforme os valores de uma tabela ou seleo de registros.

11

I.2.12.

Normalizao

Normalizao um processo atravs do qual esquemas de relao, que no sejam satisfatrios s caractersticas do modelo relacional, so decompostos em esquemas menores que satisfaam as propriedades desejveis. Na normalizao, so analisadas algumas medidas de qualidade para o projeto de um esquema de relao. Estas medidas de qualidade visam, por exemplo, evitar um mau uso da memria. As medidas so as seguintes: 1 correta representao semntica os dados devem ser projetados de forma a terem seus significados bem definidos e coerentes com o que realmente querem representar; 2 redues de valores redundantes sempre que possvel deve-se reduzir ao mximo os valores redundantes desnecessrios, ou seja, valores que muitas vezes aparecem repetidos quando isto no seria preciso; 3 redues de valores nulos sempre que possvel deve-se reduzir o nmero de atributos que por alguma razo recebero muitos valores nulos; 4 evitar tuplas esprias (sem sentido) durante o processo de normalizao deve-se atentar para evitar que sejam geradas tuplas que no faam sentido diante da realidade, isto pode ocorrer devido a alguma decomposio. I.2.13. SQL

Linguagem Estruturada de Consulta (Structured Query Language) usada para: definio (DDL) e manipulao (DML) de dados definio de vises e autorizaes de acesso definio de restries de integridade definio de transaes.

Podemos dizer que sem o uso de SQL, o trabalho com banco de dados relacional se torna quase impossvel.
SQL a linguagem padro para se lidar com bancos de dados relacionais, e aceita por quase todos os produtos existentes no mercado. (DATE, 2003, p. 93).

I.2.14.

DDL

Subconjunto de comandos SQL destinado a definio de dados (Data Definition Language). Seus principais comandos so: CREATE TABLE Para criar tabelas ALTER TABLE Para alterar tabelas (adicionar, alterar / remover atributos, adicionar/remover chaves) DROP TABLE Para excluir tabela. CREATE VIEW Para criar vises. I.2.15. DCL

Subconjunto de comandos SQL destinado ao controle de acesso aos dados (Data Control Language). Seus principais comandos so: GRANT Para atribuir direitos REVOKE Para revogar direitos Os comandos DCL so considerados por muitos como comandos de manipulao (DDL).

12

I.2.16.

DML

Subconjunto de comandos SQL destinado a manipulao de dados (Data Manipulation Language). Seus principais comandos so: INSERT Para inserir registro UPDATE Para alterar registro(s) DELETE Para excluir registro(s) SELECT Para consultar um conjunto de registros (relao). I.2.17. Metadata

Metadados ou Metainformao so dados capazes de descrever outros dados, ou seja, dar um significado real e plausvel a um arquivo de dados, so a representao de um objeto digital. I.2.18. Dicionrio de dados

Dicionrio de dados um grupo de tabelas, habilitadas apenas para leitura ou consulta, ou seja, uma base de dados, que entre outras coisas, mantm as seguintes informaes: Definio precisa sobre elementos de dados Perfis de usurios, papis e privilgios. Descrio de objetos Integridade de restries Stored procedures e gatilhos Estrutura geral da base de dados Informao de verificao Alocaes de espao Notao usada no dicionrio de dados:

Smbolo = + () [] | {} ** @
Exemplos:

Significado Constitudo por ou definido por E (conjuno ou concatenao) Componentes opcionais Componentes alternados Separador de componentes alternveis [ ] Componentes repetidos ou no Comentrios Chave primria

Nome = tratamento + primeiro_nome + ultimo_nome Cortesia = [Sr|Sra|Prof|Dr] Caracter = [A-Z|a-z| | -] Descrio = {Caracter}
I.2.19. Catlogo de dados

Catlogos so os locais (estruturas/tabelas) onde os SGDBs armazenam os metadados do esquema. (tabelas, colunas e outras informaes). Podemos dizer que os catlogos so as tabelas internas do banco de dados que armazenam informaes sobre todos os objetos do banco, ou seja, tudo que foi criado pelo projetista.

13

I.3. ALGUMAS TECNOLOGIAS PARA BANCO DE DADOS RELACIONAL


I.3.1. Servidores de banco de dados relacionais

MySql Gratuito, rpido e muito utilizado em aplicaes WEB e projetos WEB opensource. PostGreSQL Gratuito, poderoso e muito conceitual. Firebird Originado do Interbase, gratuito, muito disseminado no Brasil. Oracle Considerado por muitos o banco de dados ideal para grandes corporaes, pago, possui muitas solues integradas e mutiplataforma. MS SQL pago, ideal para aplicaes de mdio e grande porte. Usado preferencialmente para integrar solues Microsoft. No multiplataforma. I.3.2. Ferramentas para manipulao

dbDesigner Ferramenta free para modelar diversos bancos de dados. IBExpert Ideal para modelar, manipular e administrar banco de dados Firebird pago, mas tem verso pessoal free com limitaes. ISQL Ferramenta nativa e bsica para acesso a banco de dados Firebird Oracle SQLDeveloper - Ferramenta grfica para administrao Oracle no Linux. free. SQL Server Manager Ferramenta para gerenciar banco de dados MS SQL Server. Tem verso free e paga.

14

I.4. ATIVIDADES I
Questo 1.1: Crie um banco de dados com o nome CLUBE.fdb com a seguinte estrutura:

Figura 1 Clube.fdb

Questo 1.2: Defina os campos chaves e a integridade referencial envolvendo todas as tabelas do banco de dados:

15

16

UNIDADE II. CONSULTAS AVANADAS COM SQL


II.1. JOINS

De acordo com (CANTU, 2006) faz relacionamento de diversas formas entre diversas tabelas em um mesmo comando select. A sintaxe da clusula JOIN precisa incluir a palavra reservada ON que estabelece a regra da relao. Chamamos de stream as informaes vindas de cada tabela. II.1.1. INNER JOIN

Tambm chamado de exclusive join (juno exclusiva) faz o relacionamento entre os streams de acordo com a expresso da clusula ON, ignorando registros que no satisfaam a condio. A palavra JOIN opo, ou seja, ter o mesmo efeito se for usada ou no. Exemplo:
SELECT S.SOC_ID,S.SOC_NOME, C.COT_VALIDADE FROM SOCIOS S INNER JOIN COTAS C ON S.SOC_COTA = C.COT_ID

II.1.2.

OUTER JOIN (LEFT/RIGHT/FULL)

Uma juno do tipo OUTER ir retornar, inclusive, os registros que no satisfazem a condio da expresso do stream esquerdo ou direito de acordo com a sintaxe escolhida. LEFT: Retorna todas as linhas do stream esquerdo. RIGHT: Retorna todas as linhas do stream direito. FULL: Retorna todos registros do stream esquerdo e todos do stream direito. Os campos cujo o registro no satisfaz condio da expresso representado por NULL. Exemplo:
SELECT S.SOC_NOME,C.COT_VALIDADE FROM SOCIOS S LEFT JOIN COTAS C ON S.SOC_COTA = C.COT_ID

Neste caso, mesmo que no exista na tabela de contas um registro correspondente ao scio, o nome dele ir aparecer no stream e o campo COT_VALIDADE ir apresentar o valor NULL. II.1.3. CROSSJOIN

Retorna o produto cartesiano formado pelos registros das tabelas relacionadas. Cuidado! O conjunto dos registros de um CROSSJOIN pode demandar muito recurso do servidor de banco de dados se as tabelas envolvidas forem muito grandes. Exemplo: Uma tabela com 10 registros e outra com 100 ir retornar um conjunto com 1000 (mil) registros.

17

II.2.

UNION

A funo do UNION unir os registros do select anterior aos registros do segundo select. Um bom exemplo do uso de UNION seria para gerar um conjunto de registros de pessoas fsicas e jurdicas armazenados em tabelas diferentes.
SELECT NOME FROM PESSOA_FISICA UNION SELECT NOME FROM PESSOA_JURIDICA

Neste caso os nomes que ocorrerem nas duas tabelas sero apresentados sem repetio. Para exibir todos os registros preciso adicionar a palavra ALL na frente de UNION (Union all). O nmero de colunas de cada select deve ser igual, bem como, o tipo de cada coluna. Recomenda-se o uso de funes de converso (CAST) para adequar a esta restrio do UNION.

II.3.

SELECT FROM SELECT

Segundo (CANTU, 2006), SELECT FROM SELECT tambm chamado de recurso de tabelas derivadas e est previsto no padro ANSI SQL. Este recurso permite a elaborao de consultas mais complexas sem ter que usar views ou stored procedures. Exemplo:
SELECT FIRST 10 AVG(NF.TOTAL) FROM ( SELECT F1.TOTAL FROM FILIAL1 F1 UNION ALL SELECT F2.TOTAL FROM FILIAL2 F2 ORDER BY 1 DESC) AS NF

II.4.

FIRST

Define quantos registros sero recuperados pelo select, mesmo que existam outros que satisfaam aos critrios. Exemplo:
SELECT FIRST 10 S.SOC_ID, SOC_NOME FROM SOCIOS S WHERE UPPER(S.SOC_NOME) CONTAINING SILVA

Retorna apenas os 10 primeiros registros que atendem aos critrios, ou seja, com a palavra silva no nome.

II.5.

SKIP

Define quantos registros iniciais sero ignorados pelo select antes de comear a retornar dados. Exemplo:
SELECT FIRST 10 SKIP 5 S.SOC_ID, SOC_NOME FROM SOCIOS S WHERE UPPER(S.SOC_NOME) STARTING WITH A

Os 5 primeiros registros sero ignorados e depois sero retornados os prximos 10.

18

II.6.

ROWS

Define o intervalo de registros que sero retornados com o objetivo de limitar o nmero de registros. Exemplo:
SELECT S.SOC_ID,SOC_NOME FROM SOCIOS S WHERE UPPER(S.SOC_NOME) LIKE %SILVA% ROWS 10

Retorna apenas os 10 primeiros registros que atendem aos critrios, ou seja, com a palavra silva no nome. Mesmo efeito que a clusula SKIP.

II.7.

CONCATENAO

O operador de concatenao utilizado para unir dois valores do tipo string. No caso Firebird usa-se | pipe duplo. Exemplo:
SELECT NOME || || SOBRENOME FROM CLIENTES

II.8.

ATIVIDADE II

Passo1: Descreva uma situao onde preciso utilizar SELECT from SELECT para resolver.

19

UNIDADE III. NDICES E FUNES


III.1. NDICES
De acordo com Elmasri e Novate (2011), ndices so estruturas de acesso adicionais auxiliares usadas para aumentar a velocidade da recuperao de registros na resposta a certas condies de busca. Quando uma relao no possui ndices definidos, o SGBD deve percorrer toda a relao para localizar os dados desejados. Isso pode demorar muito, mas quando h ndices, a busca facilitada pelo endereamento dos dados armazenados. O uso de ndices deve ser regrado, pois, a criao, manuteno e atualizao dos ndices demandam recursos de processamento e seu uso sem critrios pode levar a perda de desempenho ou aumento desnecessrio do volume armazenado. Elmasri e Novate (2011), classificam os ndices em: III.1.1. ndice Primrio

um arquivo ordenado em que os registros so de tamanho fixo e contm dois campos: Chave primria: o contedo do mesmo tipo do atributo do registro indexado Ponteiro: o ponteiro para o bloco do disco onde o registro se encontra. Representao: <K(i), P(i)> Exemplo: <K(1) = (Pedro), P(1) = endereo do bloco 1> <K(1) = (Joo), P(2) = endereo do bloco 1> <K(1) = (Ana), P(2) = endereo do bloco 2> Chamamos de ndice esparso quando os valores indexados nunca se repetem ou repetem poucas vezes. Denso quando h vrias ocorrncias do mesmo valor. O maior problema deste tipo de ndice o trabalho necessrio para incluir e excluir registros, ou seja, ser preciso realizar a ordenao do ndice. III.1.2. ndice de agrupamento (clustering)

Tambm um arquivo ordenado e com dois campos, assim como, o ndice primrio, porm, ao invs de armazenar a chave primria, armazena um campo que no chave, logo, h repeties dos valores, por isto chamado de agrupamento. Tambm considerado esparso porque para cada registro haver uma entrada no ndice, ocasionando a repetio. O problema da incluso no ndice de agrupamento amenizado reservando-se um bloco inteiro ou um conjunto de blocos adjacentes para cada valor do campo de clustering.

20

Figura 2 ndice clusterizado

III.1.3.

ndice secundrio

Um ndice secundrio fornece um acesso secundrio para um arquivo que j possui acesso primrio. Geralmente usado para campo que chave candidata e possui valor nico para cada registro com repetio permitida. Tambm possui dois campos, porm o segundo nem sempre o bloco do arquivo, podendo ser uma chave do ndice primrio. Tambm classificado como ndice denso. III.1.4. ndice baseado em rvore

Os ndices baseados em rvore so usados geralmente para pesquisar intervalos de valores, mas servem tambm para pesquisas com operador de igualdade. Dentre as estruturas em rvore, B+ a mais usadas pelos SGDBs. Um de seus pontos fortes o fato de ser uma estrutura dinmica. Exemplo de uma estrutura B+:

Figura 3 ndice B+

ndice multinvel: Para aumentar o desempenho da busca em arquivos muito grandes os arquivos ordenados (arquivos de ndice) possuem seus arquivos ordenados conforme a necessidade. Estes diversos nveis possveis so implementados usando tcnicas avanadas para facilitar as incluses e excluses. Quando h uma reserva de entradas para os nveis do ndice dissemos que so ndices multinveis dinmicos. Exemplos: B-tree e B-tree+.

21

III.1.5.

SQL para manipulao de ndices

A criao de ndices na maioria dos servidores de banco de dados est implicitamente associada criao de chaves (Primria, estrangeira e nica). Isto quer dizer que quando executamos o comando ALTER TABLE para adicionar uma chave, automaticamente um ndice criado pelo SGDB. Quando queremos forar a criao de um ndice para um campo que teremos muitas consultas usamos a seguinte sintaxe: Para criar ndices secundrios:
CREATE INDEX [NOME_INDICE] ON [TABELA] ([CAMPO])

Exemplo de criao:
CREATE INDEX T_CLIENTES_IDX1 ON T_CLIENTES (T_CLIENTES_NOME)

Exemplo de excluso:
DROP INDEX T_CLIENTES_IDX1

O Firebird suporta somente um tipo de ndice: uma variao do b-tree. ndices podem ser nicos ou permitir duplicidades; Eles podem ter uma chave simples ou composta, ascendente ou descendente. Para recomputador um ndice:
SET STATISTICS INDEX [NOME_INDICE]

Para desativar um ndice:


ALTER INDEX [NOME_INDICE] INACTIVE

Para ativar um ndice:


ALTER INDEX [NOME_INDICE] ACTIVE

Sintaxe para Firebird 2.5:


CREATE [UNIQUE] [ASC[ENDING] | [DESC[ENDING]] INDEX indexname ON tablename { (<col> [, <col> ...]) | COMPUTED BY (expression) } <col> ::= a column not of type ARRAY, BLOB or COMPUTED BY

Exemplo:
create descending index ix_events_yt on MyEvents computed by (extract(year from StartDate) || Town);

III.2. FUNES
As funes SQL permitem realizar operaes aritmticas, extraes, converses e agrupamentos envolvendo dados armazenados ou argumentos especificados em comandos SQL DML. H um seleto grupo de funes j previstas pelo padro ANSI que so encontradas na maioria dos servidores de banco de dados, mas nem todos os bancos possuem todas as funes especificadas pelo ANSI. As funes de agrupamento SUM, AVG, COUNT, MAX e MIN so utilizadas frequentemente com a clusula GROUP BY do comando SELECT.

III.2.1.

Funes Internas

As funes internas no precisam de nenhum procedimento extra para funcionar, porque j so disponibilizadas automaticamente quando instalamos o servidor. Na maioria dos bancos de

22

dados, encontramos todas as funes mais comuns. Mas h bancos com funes especficas, tornando obrigatria a consulta aos manuais de referncia. At a verso 2.0 do Firebird as seguintes funes internas estavam disponveis:
Funo SUM Descrio Retorna a soma de um campo ou expresso de todas as tuplas percorridas. Sintaxe: SUM(arg1) Retorna o valor mximo de um campo ou expresso encontrado nas tuplas percorridas. Sintaxe: MAX (arg1) Retorna o valor mnimo de um campo ou expresso encontrado nas tuplas percorridas. Sintaxe: MIN (arg1) Retorna a mdia de um campo ou expresso de todas as tuplas percorridas. Sintaxe: AVG(arg1) Retorna a contagem dos registros do select de acordo com a clusula group by Retorna um dos valores possveis de acordo com o resultado da avaliao de uma expresso lgica. Sintaxe: IIF (<Condio>, <valor1>, <valor2>) Retorna NULL se um dos valores (valor1, valor2) forem iguais ou valor1 se forem diferentes. Sintaxe: NULLIF(valor1, valor2) Retornar o primeiro valor no nulo de uma seqncia de valores. Sintaxe: Coalease(valor1, valor2,valor3,...) Conte uma informao de um determinado tipo em outro tipo. Sintaxe: CAST (arg1 as tipo) Extrai elementos individuais de um campo Data/Hora. YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, WEEKDAY, YEARDAY. Sintaxe: EXTRACT (parte from valor) Exemplo: EXTRACT(YEAR FROM DATA_EMISSAO) Retorna parte de uma String. Sintaxe: SUBSTRING(arg1 FROM incio [FOR tamanho]) Converte uma String em letras maisculas. Sintaxe: UPPER(arg1) Converte uma String em letras minculas. Sintaxe: LOWER(arg1) Remove a ocorrncia de espao ou um determinado caractere especificado do incio, fim ou ambos de uma String. Sintaxe: TRIM([[{leading|trailing|both}] [arg1] FROM ] arg2) Recupera o valor de um GENERATOR. Sintaxe: GEN_ID(nome_do_generator, incremento) ANSI SQL ANSI

MAX

ANSI

MIN

ANSI

AVG

ANSI

COUNT IIF

ANSI INTERBASE/ FIREBIRD INTERBASE/ FIREBIRD INTERBASE/ FIREBIRD ANSI ANSI

NULLIF

COALEASE CAST EXTRACT

SUBSTRING UPPER LOWER TRIM

ANSI ANSI ANSI ANSI

GEN_ID

INTERBASE/ FIREBIRD

A partir da verso 2.5, foram includas muitas outras funes listadas a seguir: ABS (number) ACOS (number) ASCII_CHAR (<code>) - code> ::= an integer in the range [0..255] ASCII_VAL (ch) - ch ::= a [VAR]CHAR or text BLOB of max. 32767 bytes ASIN (number) ATAN (number)

23

ATAN2 (y, x) BIN_AND (number [, number ...]) BIN_OR (number [, number ...]) BIN_SHL (number, shift) BIN_SHR (number, shift) BIN_XOR (number [, number ...]) BIT_LENGTH (str) CAST (expression AS <target_type>) CEIL[ING] (number) CHAR_LENGTH (str) CHARACTER_LENGTH (str) CHAR_TO_UUID (ascii_uuid) COALESCE (<exp1>, <exp2> [, <expN> ... ]) COS (angle) COSH (number) COT (angle) DATEADD (<args>) DATEDIFF (<args>) DECODE ( <test-expr>, EXP (number) EXTRACT (<part> FROM <datetime>) <part> ::= YEAR | MONTH | WEEK | DAY | WEEKDAY | YEARDAY | HOUR | MINUTE | SECOND | MILLISECOND <datetime> ::= a DATE, TIME or TIMESTAMP expression FLOOR (number) GEN_ID (generator-name, <step>) <step> ::= An integer expression. GEN_UUID () HASH (string) IIF (<condition>, ResultT, ResultF)<condition> ::= A boolean expression. LEFT (string, length) LN (number) LOG (x, y) LOG10 (number) LOWER (str) LPAD (str, endlen [, padstr]) MAXVALUE (expr [, expr ...]) MINVALUE (expr [, expr ...]) MOD (a, b) NULLIF (<exp1>, <exp2>) OCTET_LENGTH (str) OVERLAY (string PLACING replacement FROM pos [FOR length]) PI () <expr>, result [, <expr>, result ...] [, defaultresult] )

24

POSITION (<args>) <args> ::= substr IN string POWER (x, y) RAND () REPLACE (str, find, repl) REVERSE (str) RIGHT (string, length) ROUND (<number> [, <scale>]) <number> ::= a numerical expression

| substr, string [, startpos]

<scale> ::= an integer specifying the number of decimal places toward which should be rounded, e.g.: 2 for rounding to the nearest multiple of 0.01 1 for rounding to the nearest multiple of 0.1 0 for rounding to the nearest whole number -1 for rounding to the nearest multiple of 10 -2 for rounding to the nearest multiple of 100 RPAD (str, endlen [, padstr]) SIGN (number) SIN (angle) SINH (number) SQRT (number) SUBSTRING (str FROM startpos [FOR length]) TAN (angle) TANH (number) TRIM ([<adjust>] str) <adjust> ::= {[where] [what]} FROM where what ::= BOTH | LEADING | TRAILING /* default is BOTH */ ::= The substring to be removed (repeatedly if necessary) from str's head and/or tail. Default is ' ' (space). TRUNC (<number> [, <scale>]) <number> ::= a numerical expression <scale> ::= an integer specifying the number of decimal places toward which should be truncated, e.g.: 2 for truncating to a multiple of 0.01 1 for truncating to a multiple of 0.1 0 for truncating to a whole number -1 for truncating to a multiple of 10 -2 for truncating to a multiple of 100 UPPER (str) UUID_TO_CHAR (uuid) uuid ::= a string consisting of 16 single-byte characters

25

III.2.2.

Funes de usurio

Apesar de j existirem diversas funes previstas pelo padro ANSI SQL, muitos servidores de banco de dados possuem suas prprias funes ou no seguem a mesma sintaxe e nome das funes padronizadas. Alguns servidores permitem a criao de funes de usurio diretamente em um editor de cdigo incorporado ao gerenciador. No caso do INTERBASE/FIREBIRD h poucas funes nativas, mas podemos facilmente adicionar novas funes disponveis na Internet, compiladas conforme o sistema operacional. Para incluir novas funes no Firebird preciso baixar o arquivo de funes (.DLL) e coloca-lo na pasta UDF, criada pelo instalador. Antes de usar a funo preciso realizar a sua declarao. Veja no exemplo abaixo o comando de declarao de uma funo de usurio do Firebird:
DECLARE EXTERNAL FUNCTION UDF_LEN CSTRING(254) RETURNS INTEGER BY VALUE ENTRY_POINT 'udf_Len' MODULE_NAME 'tbudf';

Esta funo fica armazenada no arquivo tbudf.dll (Windows) ou tfudf.so (Linux). Serve para retornar o tamanho de um contedo String. Exemplo de utilizao da funo declarada acima:
SELECT NOME, UDF_LEN(NOME) AS TAMANHO FROM CLIENTES.

III.3. GROUP BY
A clusula GROUP BY define os campos que sero agrupados quando se quer usar funes de agrupamento. Exemplo:
SELECT CAT.CAT_DESCRICAO,COUNT(*) AS QTD FROM SOCIOS S INNER JOIN COTAS C ON S.SOC_COTA = C.COT_ID INNER JOIN CATEGORIAS CAT ON CAT.CAT_ID = C.COT_CATEG GROUP BY CAT.CAT_DESCRICAO ORDER BY CAT.CAT_DESCRICAO

III.3.1.

HAVING

Podemos dizer que HAVING uma restrio assim como WHERE, porm, aplicvel ao resultado do agrupamento. Exemplo:
SELECT CAT.CAT_DESCRICAO,COUNT(*) AS QTD FROM SOCIOS S INNER JOIN COTAS C ON S.SOC_COTA = C.COT_ID INNER JOIN CATEGORIAS CAT ON CAT.CAT_ID = C.COT_CATEG GROUP BY CAT.CAT_DESCRICAO HAVING COUNT(*) > 1 ORDER BY CAT.CAT_DESCRICAO

Neste caso, apenas os registros cujo resultado da funo de agrupamento COUNT(*) for maior que 1, sero exibidos. No seria possvel obter o mesmo resultado apenas usando a clusula WHERE.

26

Quando devemos usar GROUP BY no SELECT? Sempre que usamos pelo menos uma funo de agrupamento e uma das colunas do select no tiver funo de agrupamento, a clusula Group by necessria para agrupar o resultado. Exemplo: SELECT CIDADE, SUM(VENDA) AS TOTVENDAS FROM VENDAS WHERE ESTADO = MG GROUP BY CIDADE

27

III.4. ATIVIDADE III


Usar como referncia o banco de dados clube.fdb (Figura 1, pgina 14) Questo 3.1: Quais campos do banco de dados so indicados como ndices secundrios?

Questo 3.2: Informe o comando SQL que conta o nmero de scios cadastrados agrupando por descrio da cota:

Questo 3.3: Informe o comando SQL que soma o dbito de scios cadastrados agrupando por ms/ano:

28

UNIDADE IV.SEGURANA
De acordo com (DATE, 2004), as questes de segurana de um banco de dados se referem a: - Segurana: Proteger os dados contra usurios no autorizados, ou seja, garantir que os usurios tero permisso de fazer aquilo que esto tentando fazer. - Integridade: Proteger os dados contra usurios autorizados, ou seja, ter certeza de que aquilo que os usurios esto tentando fazer est correto. Principais aspectos relativos segurana: Aspectos legais (direito informao, previsto em lei). Controles fsicos (sala dos equipamentos) Questes polticas (Quem poder ter acesso?). Problemas operacionais (tipo de senha e sua durao) Controles de hardware (Chave de proteo) Suporte do sistema operacional (arquivos temporrios e logs) Questes especficas do SGDB (tem conceito de propriedade dos dados?).

Controle discriminatrio: usurio ter direito de acesso diferente sobre objetos diferentes. Controle mandatrio: cada objeto assinalado com certo nvel de classificao e cada usurio recebe certo nvel de liberao. Criptografia: Para garantir que maior segurana dos dados armazenados, quando um usurio desrespeita as regras de acesso ou realiza uma invaso local (acesso aos equipamentos) a contramedida mais eficaz a criptografia. Basicamente, esta tcnica consiste na utilizao de algoritmos que embaralham os dados para dificultar sua leitura sem conhecer os detalhes usados na codificao.

IV.1. CONTROLE DE ACESSO


Uma das principais propriedades de um SGDB realizar o controle de acesso aos dados para permitir que os usurios acessem apenas as informaes que o administrador planejou. IV.1.1. Sintaxe: GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] nome_da_tabela [, ...] TO { nome_do_usurio | GROUP nome_do_grupo | PUBLIC } [, ...] [ WITH GRANT OPTION ] O comando GRANT concede privilgios especficos para um objeto (tabela, viso, seqncia, banco de dados, funo, linguagem procedural, esquema ou espao de tabelas) para um ou mais usurios ou grupos de usurios. Estes privilgios so adicionados aos j concedidos, se existirem. A palavra chave PUBLIC indica que os privilgios devem ser concedido para todos os usurios, inclusive aos que vierem a ser criados posteriormente. PUBLIC pode ser considerado como um grupo definido implicitamente que sempre inclui todos os usurios. Um determinado usurio possui a soma dos privilgios concedidos diretamente para o mesmo, mais os privilgios GRANT

29

concedidos para todos os grupos que este seja membro, mais os privilgios concedidos para PUBLIC. Se for especificado WITH GRANT OPTION quem receber o privilgio poder, por sua vez, conceder o privilgio a terceiros. Sem a opo de concesso, quem recebe no pode conceder o privilgio. Atualmente as opes de concesso somente podem ser concedidas a usurios individuais, e no a grupos ou PUBLIC. No necessrio conceder privilgios para o dono do objeto (geralmente o usurio que o criou), porque o dono possui todos os privilgios por padro (Entretanto, o dono pode decidir revogar alguns de seus prprios privilgios por motivo de segurana). O direito de remover um objeto, ou de alterar a sua definio de alguma forma, no descrito por um privilgio que possa ser concedido; inerente ao dono e no pode ser concedido ou revogado. O dono possui tambm, implicitamente, todas as opes de concesso para o objeto. Dependendo do tipo do objeto, os privilgios padro iniciais podem incluir a concesso de alguns privilgios para PUBLIC. O padro : no permitir o acesso pblico s tabelas, esquemas e espaos de tabelas; para os bancos de dados conceder o privilgio CONNECT e o privilgio de criao de tabela TEMP; para as funes conceder o privilgio EXECUTE; e para as linguagens conceder o privilgio USAGE. O dono do objeto poder, claro, revogar estes privilgios (para a mxima segurana o comando REVOKE dever ser executado na mesma transao que criar o objeto; dessa forma no haver espao de tempo para outro usurio utilizar o objeto). Os privilgios possveis so: SELECT - Permite consultar (SELECT) qualquer coluna da tabela, viso ou seqncia especificada. Tambm permite utilizar o comando COPY TO. Para as seqncias, este privilgio tambm permite o uso da funo currval. INSERT - Permite inserir (INSERT) novas linhas na tabela especificada. Tambm permite utilizar o comando COPY FROM. UPDATE - Permite modificar (UPDATE) os dados de qualquer coluna da tabela especificada. O comando SELECT ... FOR UPDATE tambm requer este privilgio (alm do privilgio SELECT). DELETE - Permite excluir (DELETE) linhas da tabela especificada. RULE - Permite criar regras para a tabela ou para a viso. REFERENCES - Para criar uma restrio de chave estrangeira necessrio possuir este privilgio, tanto na tabela que faz referncia quanto na tabela que referenciada. TRIGGER - Permite criar gatilhos na tabela especificada. CREATE - Para bancos de dados, permite a criao de novos esquemas no banco de dados. Para esquemas, permite a criao de novos objetos no esquema. Para mudar o nome de um objeto existente necessrio ser o dono do objeto e possuir este privilgio no esquema que o contm. Para espaos de tabelas, permite a criao de tabelas e ndices no espao de tabelas, e permite a criao de bancos de dados possuindo este espao de tabelas como seu espao de tabelas padro (Deve ser observado que revogar este privilgio no altera a colocao dos objetos existentes). TEMPORARY - TEMP - Permite a criao de tabelas temporrias ao usar o banco de dados. EXECUTE - Permite utilizar a funo especificada e qualquer operador implementado utilizando a funo. Este o nico tipo de privilgio aplicvel s funes (Esta sintaxe funciona para as funes de agregao tambm).

30

USAGE - Para as linguagens procedurais, permite o uso da linguagem especificada para criar funes nesta linguagem. Este o nico tipo de privilgio aplicvel s linguagens procedurais. Para os esquemas, permite acessar os objetos contidos no esquema especificado (assumindo que os privilgios requeridos para os prprios objetos estejam atendidos). Essencialmente, concede a quem recebe o direito de "procurar" por objetos dentro do esquema. ALL PRIVILEGES - Concede todos os privilgios disponveis de uma s vez. Os privilgios requeridos por outros comandos esto listados nas pginas de referncia dos respectivos comandos. Exemplos:
GRANT SELECT, UPDATE ON CATEGORIAS TO ADM; GRANT ALL PRIVILEGES ON CONFIG TO ADM;

IV.1.2. Sintaxe:

REVOKE

REVOKE [ GRANT OPTION FOR ] privilgios ON objeto [ ( coluna [, ...] ) ] FROM { PUBLIC | nome_do_usurio [, ...] } { RESTRICT | CASCADE } O comando REVOKE revoga, um ou mais papis, privilgios concedidos anteriormente. A palavra chave PUBLIC se refere ao grupo contendo todos os usurios, definido implicitamente. Deve ser observado que um determinado papel possui a soma dos privilgios concedidos diretamente para o prprio papel, mais os privilgios concedidos para os papis dos quais o papel membro no momento, mais os privilgios concedidos para PUBLIC. Da, por exemplo, revogar o privilgio SELECT de PUBLIC no significa, necessariamente, que todos os papis perdero o privilgio SELECT para o objeto: os papis que receberam o privilgio diretamente, ou atravs de outro papel, ainda tero o privilgio. Se for especificado GRANT OPTION FOR somente a opo de concesso do privilgio revogada, e no o prprio privilgio. Caso contrrio, tanto o privilgio quanto a opo de concesso sero revogados. Se o usurio possui um privilgio com opo de concesso, e concedeu este privilgio para outros usurios, ento os privilgios que estes outros usurios possuem so chamados de privilgios dependentes. Se o privilgio ou a opo de concesso que o primeiro usurio possui for revogada, e existirem privilgios dependentes, estes privilgios dependentes tambm sero revogados se for especificado CASCADE, seno a ao de revogar falhar. Esta revogao recursiva somente afeta os privilgios que foram concedidos atravs de uma cadeia de usurios comeando pelo usurio objeto deste comando REVOKE. Portanto, os usurios afetados podero manter o privilgio, se o privilgio tambm tiver sido concedido por outros usurios. Ao revogar o privilgio de membro de um papel, GRANT OPTION passa a se chamar ADMIN OPTION, mas o comportamento semelhante. Um determinado usurio pode revogar somente os privilgios que foram concedidos diretamente por este usurio. Se, por exemplo, o usurio A concedeu um privilgio com opo de concesso para o usurio B, e o usurio B por sua vez concedeu o privilgio para o usurio C, ento o usurio A no poder revogar diretamente o privilgio de C. Em vez disso, o usurio A poder revogar a opo de concesso do usurio B usando a opo CASCADE, para que o privilgio seja, por sua vez, revogado do usurio C. Outro exemplo o caso em que tanto A quanto B concederam o mesmo privilgio a C: neste caso A poder revogar sua prpria

31

concesso, mas no poder revogar a concesso feita por B e, portanto, C continuar com o privilgio mesmo que A revogue o privilgio. Se algum que no for dono do objeto tentar revogar privilgios sobre o objeto, o comando falhar inteiramente caso o usurio no possua ao menos um privilgio para o objeto. Se o usurio possuir algum privilgio para o objeto o comando prosseguir, mas s revogar os privilgios para os quais o usurio tem a opo de concesso. A forma REVOKE ALL PRIVILEGES emite uma mensagem de advertncia quando o usurio no possui ao menos uma opo de concesso, enquanto as outras formas emitem uma mensagem de advertncia quando o usurio no possui opo de concesso para algum dos privilgios especificamente identificados no comando (Em princpio estas informaes tambm se aplicam ao dono do objeto, mas como o dono sempre tratado como possuindo todas as opes de concesso estes casos nunca ocorrem). Se um superusurio decidir submeter o comando GRANT ou REVOKE, o comando ser executado como se tivesse sido submetido pelo dono do objeto afetado. Uma vez que todos os privilgios partem do dono do objeto (possivelmente de forma indireta atravs de cadeias de opes de concesso), um superusurio pode revogar todos os privilgios, mas pode ser necessrio usar CASCADE conforme mostrado acima. O comando REVOKE tambm pode ser submetido por um papel que no o dono do objeto afetado, mas membro do papel que dono do objeto, ou um membro de um papel que possui privilgios com WITH GRANT OPTION no objeto. Neste caso, o comando ser executado como se tivesse sido emitido pelo papel que realmente possui o objeto ou possui privilgios com WITH GRANT OPTION. Por exemplo, se a tabela t1 pertencer ao papel g1, do qual o papel u1 membro, ento u1 poder revogar privilgios sobre t1 registrados como tendo sido concedidos por g1. Isto inclui concesses feitas por u1 assim como por qualquer outro membro do papel g1. Se o papel que est executando o comando REVOKE possuir os privilgios requeridos indiretamente, atravs de um caminho de membro de mais de um papel, incerto qual dos papis ser registrado como tendo executado o comando. Nestes casos, a melhor prtica utilizar o comando SET ROLE para assumir o papel especfico com o qual se deseja executar o comando REVOKE. Caso isto no seja feito, poder resultar na revogao de privilgios alm dos pretendidos, ou at em no revogar nada. Exemplos: Revogar o privilgio de insero na tabela socios concedido para o usurio ADM:
REVOKE INSERT ON SOCIOS FROM ADM;

IV.1.3.

CONTROLE DE ACESSO NO FIREBIRD

O utilitrio nativo do Firebird para manuteno de usurios o GSEC que pode ser usado em linha de comando ou interativamente. Roteiro de exemplo para criar um usurio (mhs Mrcio Henrique Silva): - Execute o prompt de comando (cmd ou command) - Entre na pasta "c:\arquivos de programas\firebird\firebird_2_1\bin" - Digite: gsec -user SYSDBA -password masterkey <Enter> - No prompt "GSEC>" digite: display <Enter> (para ver os usurios cadastrados) - Criando o usurio: add mhs -pw 123 -fmarcio -mName Henrique -lName Silva; Para modificar a senha do SYSDBA no GSEC:

32

- Digite: modify sysdba -pw novasenha Para sair do GSEC digite quit Para criar um role, podemos usar a ferramenta ISQL ou qualquer executor de script conectado ao servidor. Exemplo:
CREATE ROLE CONSULTAS;

Outra forma de gerenciar usurios e roles atravs do IBExpert, acessando: Tools -> User Manager Para atribuir e revogar direitos no IBExpert clique em Tools->Grant Manager.

Figura 4 Tela de controle de acesso do Ibexpert

33

IV.2. ATIVIDADE IV
Passo 1: Abra o GSEC e conecte-se ao servidor usando SYSDBA. Informe aqui o comando que deve ser usado:

Passo 2: Crie um usurio chamando ADM com a senha 123, LEITOR com a senha 456 e saia do GSEC. Informe aqui os comandos que devem ser usados:

Passo 3: Conecte-se ao banco de dados (clube.fdb) usando o ISQL: Relacione abaixo os passos necessrios:

Passo 4: Crie uma role com o nome GERENTES. Informe aqui o comando que deve ser usado:

Passo 5: Coloque o usurio ADM na role GERENTES. Informe aqui o comando que deve ser usado:

Passo 6: D permisso para a tabela SOCIOS com GRANT OPTION para a role GERENTES . Informe aqui o comando que deve ser usado:

Passo 7: Tente Acesse o banco com o usurio LEITOR e tente modificar a tabela SOCIOS. Informe a mensagem apresentada pelo servidor.

34

UNIDADE V. DSQL - STORED PROCEDURE


V.1. STORED PROCEDURE

Uma SP (Stored Procedure Procedimento armazenado) um programa escrito em uma linguagem especfica do Firebird (DSQL Dinamic SQL) que armazenada como parte do banco de dados. SPs podem ser chamadas por aplicaes cliente ou por outras SPs/Triggers. Porque usar Stored Procedures: V.1.1. Sintaxe:
CREATE PROCEDURE NomedaProcedure <parmetros de entrada> RETURNS <parmetros de sada> AS <declarao de variveis locais> BEGIN <comandos da procedures> END

Reduo de trfico na rede porque so executadas pelo servidor. Aumento o desempenho porque so analisadas, otimizadas e armazenadas em uma forma executvel no momento em que so criadas. Podem tambm executar operaes muito mais complexas que uma simples query. Padroniza e concentra a codificao das regras de negcio. Facilita a atualizao do sistema, porque evita a compilao e distribuio de aplicaes. Aumentam a segurana do banco de dados uma vez que podem acessar tabelas que o usurio no direito de acesso. O comando CREATE PROCEDURE

V.1.2.

Parmetros

Parmetros de entrada: Permite aplicao cliente passar os valores que sero usados para modificar o comportamento da SP. Parmetros de sada ou de retorno: So informaes retornadas para a aplicao cliente. Obs: Um parmetro pode ser de qualquer tipo de dados do Firebird exceto BLOB ou ARRAY.
CREATE PROCEDURE SUB_TOT_BUDGET( HEAD_DEPT CHAR(3)) RETURNS ( TOT_BUDGET NUMERIC (15, 2), AVG_BUDGET NUMERIC (15, 2), MIN_BUDGET NUMERIC (15, 2), MAX_BUDGET NUMERIC (15, 2)) AS BEGIN SELECT SUM(BUDGET), AVG(budget), MIN(budget), MAX(budget) FROM department WHERE head_dept = :head_dept INTO :tot_budget, :avg_budget, :min_budget, :max_budget; SUSPEND; END ^

35

Esta SP declara um parmetro de entrada, HEAD_DEPT cujo tipo CHAR(3) e quatro parmetros de sada, TOT_BUDGET, AVG_BUDGET, MIN_BUDGET, e MAX_BUDGET todos do tipo NUMERIC(15, 2). Tanto os parmetros de entrada quando os de sada devem estar entre parnteses. O comando SUSPEND pausa a SP at que o cliente busque os valores dos parmetros de sada. V.1.3. Declarando variveis locais

possvel declarar variveis locais de qualquer tipo suportado pelo Firebird dentro de uma SP. Estas variveis s existem enquanto a SP est sendo executada e seu escopo local. Variveis locais so declaradas depois da palavra chave AS e antes da palavra chave BEGIN que identifica o incio do corpo da SP. Para declarar variveis use:
DECLARE VARIABLE <Nome varivel> <Tipo varivel> DECLARE VARIABLE OrderCount Integer; DECLARE VARIABLE TotalAmount NUMERIC(15,2);

Note que cada comando DECLARE VARIABLE s pode declarar uma varivel. A SP a seguir ilustra o uso do comando DECLARE VARIABLE. Ela declara quatro variveis locais , ord_stat, hold_stat, cust_no and any_po. Observe que quando uma varivel usada na clusula INTO de um comando SELECT um sinal de dois pontos ':' deve anteceder o nome da varivel.
CREATE PROCEDURE SHIP_ORDER( PO_NUM CHAR(8)) AS DECLARE VARIABLE ord_stat CHAR(7); DECLARE VARIABLE hold_stat CHAR(1); DECLARE VARIABLE cust_no INTEGER; DECLARE VARIABLE any_po CHAR(8); BEGIN SELECT s.order_status, c.on_hold, c.cust_no FROM sales s, customer c WHERE po_number = :po_num AND s.cust_no = c.cust_no INTO :ord_stat, :hold_stat, :cust_no; /* Este pedido j foi enviado */ IF (ord_stat = 'shipped') THEN BEGIN EXCEPTION order_already_shipped; SUSPEND; END /* Cliente est em atraso. */ ELSE IF (hold_stat = '*') THEN BEGIN EXCEPTION customer_on_hold; SUSPEND; END /* * Se existe uma conta no paga de pedidos enviados a mais de 2 meses, * passe o cliente para cliente em atraso. */ FOR SELECT po_number FROM sales WHERE cust_no = :cust_no AND order_status = 'shipped' AND paid = 'n' AND ship_date < CAST('NOW' AS DATE) - 60 INTO :any_po DO BEGIN EXCEPTION customer_check; UPDATE customer SET on_hold = '*'

36
WHERE cust_no = :cust_no; SUSPEND; END /* * Envia o pedido. */ UPDATE sales SET order_status = 'shipped', ship_date = 'NOW' WHERE po_number = :po_num; SUSPEND; END ^

V.1.4.

Corpo da Procedure

O corpo da SP consiste em um conjunto de qualquer nmero de comandos da linguagem interna do Firebird dentro de um bloco BEGIN/END. O corpo da procedure, abaixo, consiste em um comando SELECT e um SUSPEND entre as palavras chave BEGIN e AND.
CREATE PROCEDURE SUB_TOT_BUDGET( HEAD_DEPT CHAR(3)) RETURNS ( TOT_BUDGET NUMERIC (15,2), AVG_BUDGET NUMERIC (15,2), MIN_BUDGET NUMERIC (15,2), MAX_BUDGET NUMERIC (15,2)) AS BEGIN SELECT SUM(budget), AVG(budget),MIN(budget), MAX(budget) FROM department WHERE head_dept=:head_dept INTO :tot_budget, :avg_budget,:min_budget, :max_budget; SUSPEND; END ^

Cada comando no corpo de uma procedure tem que terminar com um ponto-e-virgula ';'. V.1.5. Elementos de linguagem

A linguagem interna do Firebird inclui todas as construes de uma linguagem de programao estruturada, assim como, declaraes prprias para trabalhar com dados em tabelas. A seguinte seo descreve estes elementos. Comentrios: Voc pode colocar comentrios onde quiser em uma SP usando a sintaxe /* Este um comentrio */. Um comentrio pode ter vrias linhas, mas comentrios aninhados no so permitidos. V.1.6. Bloco de comandos BEGIN-END

A linguagem interna do FB se assemelha ao Pascal em algumas construes como IF-THEN-ELSE e loops WHILE que somente podem conter um comando. Porm, as palavras chave BEGIN e END podem ser usadas para agrupar uma srie de comandos de forma que eles se tornem um comando composto. Nunca coloque um ponto-e-vrgula aps um BEGIN ou um END. V.1.7. Comandos de atribuio

A linguagem interna do FB suporta comandos de atribuio da seguinte forma: Var1 = Var2 * Var3; Var1 tanto pode ser uma varivel local quanto um parmetro de sada. Var2 e Var3 tanto podem ser variveis locais como parmetros de entrada.
IF-THEN-ELSE A sintaxe do comando IF no Firebird a seguinte: IF <expresso condicional> THEN <comando>

37
ELSE <comando>

Onde <comando> pode ser tanto um comando simples quanto um bloco de comandos delimitado por um BEGIN-END. Na <expresso condicional> alm dos operadores lgicos normais (=, <, >, <=, >=, <>) pode-se usar tambm os seguintes operadores SQL: Exemplos de comandos IF vlidos so:
IF (any_sales > 0) THEN BEGIN EXCEPTION reassign_sales; SUSPEND; END IF (first IS NOT NULL) THEN line2=first || ' ' || last; ELSE line2=last;

Note no exemplo acima que na linguagem do Firebird o operador de concatenao de strings || (Duas barras verticais) e no o + como acontece na maioria das linguagens de programao.
IF (:mngr_no IS NULL) THEN BEGIN mngr_name='--TBH--'; title=''; END ELSE SELECT full_name, job_code FROM employee WHERE emp_no=:mngr_no INTO :mngr_name, :title; WHILE-DO

A estrutura WHILE-DO permite criar loops nas stored procedures e triggers. A sintaxe :
WHILE (<expresso condicional) DO <comando>

Onde <comando> pode ser um bloco de comandos delimitado por um par BEGIN-END. Observe que a expresso condicional tem que estar entre parnteses.
WHILE (i <=5) DO BEGIN SELECT language_req[:i] FROM job WHERE ((job_code=:code) AND (job_grade=:grade) AND (job_country=:cty) AND (language_req IS NOT NULL)) INTO :languages; IF (languages=' ')THEN /* Imprime 'NULL' ao invs de espaos */ languages='NULL'; i=i +1; SUSPEND; END

V.1.8.

Comandos SQL nas STORED PROCEDURES

possvel usar os comandos SQL SELECT, INSERT, UPDATE e DELETE em uma SP exatamente como se faz em uma query, apenas com algumas pequenas alteraes na sintaxe. Para todos esses comandos pode-se usar variveis locais ou parmetros de entrada em qualquer lugar que um valor literal seria aceito. Por exemplo, no comando INSERT, a seguir, os valores inseridos so obtidos de um parmetro de entrada.
CREATE PROCEDURE ADD_EMP_PROJ( EMP_NO SMALLINT, PROJ_ID CHAR(5) ) AS BEGIN INSERT INTO employee_project (emp_no, proj_id) VALUES (:emp_no, :proj_id); WHEN SQLCODE -530 DO EXCEPTION unknown_emp_id;

38
END SUSPEND; END ^

Outra diferena a adio da clusula INTO ao comando SELECT de modo que se possa selecionar valores diretamente para variveis ou parmetros de sada, como mostrado no exemplo a seguir:
CREATE PROCEDURE CUSTOMER_COUNT RETURNS ( CUSTOMERCOUNT INTEGER) AS BEGIN SELECT COUNT(*) FROM CUSTOMER INTO :CustomerCount; SUSPEND; END ^

Pode-se usar comandos SQL DDL em uma SP. Esta restrio se aplica aos comandos CREATE, ALTER, DROP, SET, GRANT, REVOKE, COMMIT e ROLLBACK. V.1.9. Usando FOR SELECT e DO

O exemplo anterior do comando SELECT que seleciona um ou mais valores para uma varivel funciona desde que o SELECT retorne apenas uma linha. Quando for preciso processar vrias linhas retornadas por um SELECT deve-se usar o comando FOR SELECT e DO como mostrado a seguir:
CREATE PROCEDURE ORDER_LIST( CUST_NO INTEGER) RETURNS(PO_NUMBER CHAR(8)) AS BEGIN FOR SELECT PO_NUMBER FROM SALES WHERE CUST_NO=:CUST_NO INTO :PO_NUMBER DO SUSPEND; END ^

Esta procedure pega um cdigo de cliente de seu parmetro de entrada e retorna os nmeros de todas as compras do cliente da tabela SALES (vendas). Observe que os nmeros das vendas so todos retornados atravs de uma nica varivel de sada. Veja como isso funciona: A palavra chave FOR diz paro o Firebird abrir um cursor no conjunto de resultados (result set) do comando SELECT. O comando SELECT tem que incluir a clusula INTO que atribui cada campo retornado pelo SELECT a uma varivel local ou parmetro de sada. O comando aps a palavra chave DO ser executado para cada linha retornada pelo SELECT. O comando aps o DO pode ser um bloco de comandos delimitado por um BEGIN-END. V.1.10. Usando o SUSPEND

No exemplo acima, o comando SUSPEND diz para a stored procedure suspender a execuo at que uma solicitao de dados (fetch) seja recebida pelo cliente, ento, a procedure l o primeiro PO_NUMBER para o parmetro de sada e o retorna para o cliente. Cada vez que o cliente emite uma requisio, o prximo PO_NUMBER lido para o parmetro de sada e retornado para o cliente. Isso continuar at que todas as linhas retornadas pelo SELECT tenham sido processadas. SUSPEND no s usado com FOR SELECT. Ele usado sempre que a stored procedure retorna um valor para o cliente, evitando que a SP termine antes que o cliente tenha recebido o resultado. A seguir um exemplo muito simples de uma SP que retorna um valor em um parmetro de sada:
CREATE PROCEDURE CUSTOMER_COUNT RETURNS (

39
CUSTOMERCOUNT INTEGER) AS BEGIN SELECT COUNT(*) FROM CUSTOMER INTO :CustomerCount; SUSPEND; END ^

V.1.11.

Criando e modificando Stored Procedures

O mtodo normal de se criar um banco de dados e seus objetos no Firebird criar um script SQL, para ser executado em executor de script qualquer. Para evitar que o executor de script confunda o final do comando com o final de cada comando da procedure, deve-se usar o comando SET TERM, que muda o caracter de terminao de comando. Veja abaixo:
SET TERM ^; CREATE PROCEDURE Customer_Count RETURNS ( CustomerCount Integer) AS BEGIN SELECT COUNT(*) FROM CUSTOMER INTO :CustomerCount; SUSPEND; END ^ SET TERM; ^

O primeiro comando SET TERM altera o caracter de trmino de comando para o caracter (^). Note que este comando ainda tem que terminar com um ponto-e-vrgula j que este ainda ser o caracter de trmino at que o SET TERM ^ seja executado. O executor de script ir agora ignorar os ponto-e-vrgula no final dos comandos no corpo da procedures. Um (^) colocado logo aps o END final no comando CREATE PROCEDURE. Quando o executor encontra este caracter ele processa todo o comando CREATE PROCEDURE. O ltimo SET TERM volta o terminador para o ponto-e-vrgula. V.1.12. Apagando e alterando Stored Procedures

Para remover uma stored procedure use o comando DROP PROCEDURE como a seguir:
DROP PROCEDURE Nome_Procedure;

Somente o SYSDBA ou o proprietrio da procedure podem apag-la. Use o comando ALTER PROCEDURE para alterar uma stored procedure. ALTER PROCEDURE tem exatamente a mesma sintaxe do comando CREATE PROCEDURE. Por padro, o script de criao de um banco cria a estrutura de cada um das procedures e depois altera cada uma implementando por completo:
CREATE PROCEDURE ADD_EMP_PROJ ( EMP_NO SMALLINT, PROJ_ID CHAR(5)) AS BEGIN EXIT; END ^ CREATE PROCEDURE ALL_LANGS RETURNS ( CODE VARCHAR(5), GRADE VARCHAR(5), COUNTRY VARCHAR(15), LANG VARCHAR(15)) AS BEGIN EXIT;

40
END ^

Depois de todas as procedures terem sido criadas o script criado pelo Firebird usa o comando ALTER PROCEDURE para adicionar o corpo de cada uma. Veja:
ALTER PROCEDURE ADD_EMP_PROJ( EMP_NO SMALLINT, PROJ_ID CHAR(5)) AS BEGIN INSERT INTO employee_project (emp_no, proj_id) VALUES (:emp_no, :proj_id); WHEN SQLCODE -530 DO EXCEPTION unknown_emp_id; END SUSPEND; END ^

Desta forma o Firebird elimina qualquer dependncia entre as procedures quando elas esto sendo criadas. J que o corpo de toda procedure esta vazio no pode haver dependncia de procedures chamando outra(s). Quando os comandos ALTER PROCEDURE so executados eles podem ser rodados em qualquer ordem porque a declarao de qualquer procedure que eventualmente seja chamada pela que est sendo alterada no momento, j existir. V.1.13. Chamando Stored Procedures

Stored procedures no Firebird so divididas em dois grupos de acordo com como so chamadas. Procedures que retornam valores atravs de parmetros de sada so chamadas de select procedures porque elas podem ser usadas no lugar de um nome de tabela em um comando SELECT. Chamando Select Procedures: Select procedures atribuem valores a parmetros de sada e ento executam um SUSPEND para retornar estes valores. Abaixo, um exemplo simples de select procedure.
SELECT CUSTOMERCOUNT FROM PROCEDURE_CUSTOMER;

possvel ainda chamar procedures que necessitem de parmetros de entrada a partir de um console SQL ou dentro de uma aplicao, conforme o cdigo abaixo:
SELECT TOTAL FROM PROCEDURE_CALC(20) WHERE UF=MG ORDER BY 1;

O parmetro de entrada, CUST_NO, passado para a procedure entre parnteses logo aps o nome da procedure no comando SELECT. Note tambm que este comando SELECT inclui uma clusula WHERE e uma clusula ORDER BY. No exemplo abaixo, temos a demonstrao do uso de parmetros na chamada de uma procedure:
SELECT * FROM ORDER_LIST(:CUST_NO) WHERE (PO_NUMBER > :PO_NUMBER) ORDER BY PO_NUMBER DESC

O cdigo a seguir foi retirado do evento onclik do boto Execute do formMostra (Cdigo em Delphi) como os valores so atribudos aos parmetros de entrada antes da stored procedure.
procedure TProcForm.SelectBtnClick(Sender: TObject); begin with ProcDm.OrderListQry do begin Params.ParamByName('CUST_NO').Value := CustomerNoEdit.Text; Params.ParamByName('PO_NUMBER').Value := OrderNoEdit.Text; Open; end; //with end;

41

Chamando uma Non-Select Procedure: A stored procedure a seguir um exemplo de uma non-select procedure, que no retorna qualquer resultado. Esta procedure tem apenas um parmetro de entrada, FACTOR, e ajusta os salrios mnimo e mximo na tabela JOB por este fator.
CREATE PROCEDURE ADJUST_SALARY_RANGE( FACTOR FLOAT) AS BEGIN UPDATE JOB SET MIN_SALARY=MIN_SALARY * :FACTOR, MAX_SALARY=MAX_SALARY * :FACTOR; END ^

Usa-se o comando EXECUTE PROCEDURE para rodar esta stored procedure a partir de uma trigger, outra stored procedure ou qualquer console SQL. Exemplo:
EXECUTE PROCEDURE ADJUST_SALARY_RANGE(1.1);

Para executar essa stored procedure a partir de sua aplicao Delphi, usa-se a seguinte sintaxe:
with ProcDm.AdjustSalRngProc do begin Params.ParamByName('Factor').Value := StrToFloat(FactorEdit.Text); Prepare; ExecProc; end; //with

O contedo deste captulo uma adaptao do artigo escrito por Bill Todd (Borland Developers Conference San Diego 2000), traduzido por Alessandro Fernandes e publicado no site da Comunidade Firebird de Lngua Portuguesa (http://www.comunidade-firebird.org).

42

V.2.

ATIVIDADE V

Passo 1: Crie uma procedure para cadastrar cotas no banco de dados clube.fdb. Parmetros de entrada: Id da categoria, validade, valor da cota, Quantidade de cotas Parmetro de sada: nenhum Rotina: A procedure dever incluir a quantidade informada de registros na tabela COTAS. Informe abaixo o cdigo fonte da procedure:

43

Unidade VI. DSQL - TRIGGERS


Triggers so semelhantes a stored procedures, exceto pelo modo como so chamadas. Triggers so chamadas automaticamente quando ocorre uma alterao em um registro da tabela. Caractersticas das triggers: Triggers so chamadas automaticamente quando os dados da tabela a qual ela esta conectada so alterados. Triggers no tem parmetros de entrada. Triggers no retornam valores. Triggers so criadas pelo comando CREATE TRIGGER.

VI.1. USANDO CREATE TRIGGER


O comando CREATE TRIGGER, a seguir, mostra todos os elementos da sintaxe. As palavras-chave CREATE TRIGGER so seguidas do nome da trigger, a seguir a palavra-chave FOR e ento o nome da tabela a qual a trigger estar relacionada. Em seguida vem a palavra ACTIVE (ativa) ou INACTIVE (inativa) indicando se a trigger dever ou no ser executada. Se a trigger est inativa ela no ser executada. O prximo elemento do comando CREATE TRIGGER indica quando a trigger ser executada. 1. BEFORE UPDATE - Antes de uma atualizao. 2. AFTER UPDATE - Aps uma atualizao. 3. BEFORE INSERT - Antes de uma incluso. 4. AFTER INSERT - Aps uma incluso. 5. BEFORE DELETE - Antes de uma excluso. 6. AFTER DELETE - Aps uma excluso. A seguir vem a palavra chave opcional POSITION seguida de um nmero inteiro. O Firebird permite vrias triggers ao mesmo evento. possvel ter quatro triggers ligadas tabela SOCIOS todas como AFTER UPDATE. Esta uma grande caracterstica j que permite a modularizao do cdigo. Entretanto a ordem em que as trigger vo ser executadas pode eventualmente ser importante. A palavra chave POSITION permite definir a ordem de execuo. No exemplo abaixo a trigger mostrada ser executada antes de qualquer outra porque a sua posio 0 (zero). aconselhvel deixar um espao entre a numerao para facilitar a insero de outras triggers com pontos de execuo entre as j criadas.
CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEE ACTIVE AFTER UPDATE POSITION 0 AS BEGIN IF (old.salary <> new.salary) THEN INSERT INTO salary_history (emp_no, change_date, updater_id, old_salary, percent_change) VALUES ( old.emp_no, 'NOW', user, old.salary, (new.salary - old.salary) * 100 / old.salary);

44
END^

Aps a palavra chave AS vem a declarao de qualquer varivel local usando o comando DECLARE VARIABLE igual ao que foi usado para stored procedures. Finalmente vem o corpo da trigger delimitado pelos comandos BEGIN-END. Recomenda-se a mxima ateno com a codificao de triggers para evitar uma execuo em cadeia que poder ocasionar erro quando iniciar a primeira execuo.

VI.2. BEFORE/AFTER
Triggers do tipo AFTER so usadas para garantir que a atualizao que disparou a trigger esteja completa com sucesso antes de executar outras aes. A trigger acima um bom exemplo. Insere uma linha na tabela salary_history sempre que o salrio de um funcionrio alterado. A linha de histrico contm o salrio antigo e o percentual de alterao. Como a atualizao do registro do funcionrio pode falhar por vrias razes, como um valor em um campo que viola restries impostas, por exemplo, o histrico importante somente no caso de uma atualizao completada com sucesso.

VI.3. USANDO OLD E NEW


Observa-se na trigger SAVE_SALARY_CHANGE as palavras OLD e NEW. No corpo de uma trigger o Firebird deixa disponveis tanto o valor antigo como o novo valor de qualquer coluna, por exemplo old.salary e new.salary. Usando os valores OLD e NEW possvel criar registros de histrico, calcular o percentual de alterao de um valor numrico, encontrar em outras tabelas registros que combinem como valor antigo, valor novo de um campo ou fazer qualquer operao necessria para garantir a regra de negcio exigida.

VI.4. GERANDO EXCEPTIONS


Se algum processamento ou validao no atender as condies exigidas, possvel disparar um erro (exception) para interromper a execuo da transao corrente. Antes de usar uma exception preciso cri-la com o comando create. CREATE EXCEPTION. Por exemplo:
CREATE EXCEPTION CUSTOMER_STILL_CURRENT Este cliente comprou nos ltimos dois anos.

Onde as palavras-chave CREATE EXCEPTION so seguidas do nome da exceo e do texto da mensagem de erro para esta exceo. Para gerar esta EXCEPTION em uma trigger ou stored procedure use a palavra chave EXCEPTION como mostrado abaixo:
EXCEPTION CUSTOMER_STILL_CURRENT;

Ao gerar uma EXCEPTION a execuo da trigger ou da stored procedure encerrada. Qualquer comando na trigger ou stored procedure depois da exceo no ser executado. No caso de uma trigger do tipo BEFORE a atualizao que disparou a trigger abortada. Finalmente a mensagem de erro da exceo retornada para a aplicao. Para deletar uma EXCEPTION basta usar o comando DROP EXCEPTION e para alterar a mensagem associada usa-se o comando ALTER EXECEPTION. Por exemplo:
ALTER EXCEPTION CUSTOMER_STILL_CURRENT Este cliente ainda est ativo.; DROP EXCEPTION CUSTOMER_STILL_CURRENT;

45

VI.5. USANDO GENERATORS


O Firebird no tem um tipo de campo com auto incremento. Ao invs disso tem uma ferramenta mais flexvel chamada GENERATOR. Um GENERATOR retorna um valor incrementado toda vez que voc o chama. Para criar um GENERATOR use o comando CREATE GENERATOR ou CREATE SEQUENCE como a seguir.
CREATE GENERATOR CUSTOMER_ID;

Para excluir um GENERATOR basta usar o comando DROP GENERATOR. Para obter o prximo valor de um GENERATOR use a funo GEN_ID() por exemplo:
GEN_ID(CUSTOMER_ID, 1);

O primeiro parmetro o nome do GENERATOR e o segundo o incremento. No exemplo acima o valor retornado ser o ltimo valor mais um. O Incremento pode ser qualquer valor inclusive zero, o que muito til para se obter o valor corrente de um GENERATOR sem alterar seu valor. Voc pode tambm alterar o valor de um GENERATOR a qualquer momento usando o comando SET GENERATOR com a seguir:
SET GENERATOR CUSTOMER_ID TO 1000;

importante saber que o incremento de um GENERATOR no depende da transao, ou seja, no ir voltar ao valor anterior se for executado o comando ROLLBACK. GENERATORS so frequentemente usados em triggers para fornecer um valor para uma chave primria como no exemplo a seguir:
CREATE TRIGGER SET_EMP_NO FOR EMPLOYEE ACTIVE BEFORE INSERT POSITION 0 AS BEGIN new.emp_no=gen_id(emp_no_gen, 1); END ^

possvel usar a funo GEN_ID em uma stored procedure que retorna o valor do GENERATOR em um parmetro de sada para a aplicao cliente. O cliente pode ento atribuir o valor a sua chave primria e apresenta-la ao usurio quando este cria um novo registro antes mesmo que este tenha sido gravado com um POST. Neste caso recomenda-se criar uma trigger como a mostrada acima para o caso de um cliente inserir um registro e no fornecer um valor para a chave primria. Basta alterar o cdigo conforme a seguir:
IF new.emp_no IS NULL THEN new.emp_no = gen_id(emp_no_gen, 1);

Agora a trigger s ir fornecer um valor para a chave primria no caso do campo ser nulo.

VI.6. ALTERANDO E EXCLUINDO TRIGGERS


Basta usar o comando ALTER TRIGGER para alterar tanto o cabealho quanto o corpo da trigger. O uso mais comum da alterao do cabealho ativar e desativar uma trigger. Outro uso trocar o POSITION da trigger. O comando a seguir ir inativar a trigger.
ALTER TRIGGER SET_EMP_NO INACTIVE;

Para alterar o corpo da trigger preserve seu nome, as outras informaes do cabealho e informe o novo corpo como mostrado a seguir:
ALTER TRIGGER SET_EMP_NO AS BEGIN IF new.emp_no IS NULL THEN new.emp_no = gen_id(emp_no_gen, 1); END ^

Para apagar uma trigger use o comando DROP TRIGGER. Por exemplo:
DROP TRIGGER SET_EMP_NO;

46

O contedo deste captulo uma adaptao do artigo escrito por Bill Todd (Borland Developers Conference San Diego 2000), traduzido por Alessandro Fernandes e publicado no site da Comunidade Firebird de Lngua Portuguesa (http://www.comunidade-firebird.org).

47

VI.7. ATIVIDADE VI
Passo 1: Descreva abaixo os detalhes da trigger a seguir:
CREATE TRIGGER RECEITAS_ATUDEB FOR RECEITAS ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0 AS DECLARE VARIABLE IDDEB INTEGER; BEGIN -- Validando a troca de id do dbito IF ((UPDATING) AND (NEW.REC_IDDEB <> OLD.REC_IDDEB)) THEN EXCEPTION ERRO_PADRAO 'A troca do ID do dbito no permitida.'; -- Atualizao do valor recebido IF (DELETING) THEN IDDEB = OLD.REC_IDDEB; ELSE IDDEB = NEW.REC_IDDEB; UPDATE DEBITOS D SET D.DEB_RECEBIDO = COALESCE((SELECT SUM(R.REC_VALREC) FROM RECEITAS R WHERE R.REC_IDDEB = :IDDEB),0)WHERE D.DEB_ID = :IDDEB; END

48

UNIDADE VII.

VIEWS

VII.1. O QUE UMA VIEW?


Segundo (CANTU, 2006), View uma representao personalizada das informaes de uma ou mais tabelas do banco de dados. Os dados retornados por uma View so recuperados no momento de sua execuo. Essas vises podem ser acessadas atravs do comando SELECT convencional, bastando para isto indicar o nome da view no lugar do nome da tabela. De acordo com (DATE, 2003) uma view serve para: Fornecem um recurso de abreviao ou de macro; Permitem que os mesmos dados sejamvistos por usurios diferentes de modos diferentes de modos diferentes ao mesmo tempo; Fornecem segurana automtica para dados ocultos; Podem fornecer independncia de dados lgicos;

Quando uma viso definida, o sistema de banco de dados armazena sua definio ao invs do resultado da expresso SQL que a definiu. Sempre que a relao viso usada, ela sobreposta pela expresso da consulta armazenada, de maneira que, sempre que a consulta for solicitada, a relao viso ser recomputada. Alguns sistemas de banco de dados permitem que as relaes de vises sejam materializadas, garantindo que se ocorrerem modificaes nas relaes reais usadas na definio da viso, tambm a viso ser modificada. Contudo, esta abordagem pode incorrer em custos de armazenamento e atualizaes de sistema.

VII.2. CRIANDO VIEW


A sintaxe para criao de view :
CREATE VIEW nome [(nome da coluna [, nome da coluna [, ...]])] As <comando select> WITH CHECK OPTION];

Exemplo de view:
CREATE VIEW BOM_FORNECEDOR AS SELECT F.F#,F.STATUS, F.CIDADE FROM F WHERE D.STATUS > 15 WITH CHECH OPTION;

WITH OPTION CHECK: significa que as operaes de INSERT e UPDATE sobre a view sero rejeitadas se violarem qualquer restrio de integridade implcita na expresso de definio da viso. Portanto, observe que tais operaes s falharo se WITH CHECK OPTION for especificado isto , por default, elas no falharo. Recomenda-se, portanto, que WITH CHECK OPTION sempre seja especificada na prtica. Para excluir uma view utilize o comando: DROP <nome_da_view>

49

VII.3. VIEWS ATUALIZVEIS


Uma view atualizvel quando rene as caractersticas necessrias para permitir que operaes de manipulao de dados (insero, remoo ou atualizao) nas tabelas utilizadas por ela, possam ser feitas diretamente na prpria view. Se uma view possuir algumas das caractersticas listadas abaixo, ela no ser naturalmente atualizvel: Utilizar UNIONs; Trazer dados de mais de uma tabela (Joins) Trazer dados de outra view que no seja atualizvel; Possuir campos definidos por subqueries, funes de agregao (count, sum, etc) ou outras expresses; Deixar de recuperar algum campo definido como NOT NULL, na tabela utilizada; Utilizar GROUP BY; Utilizar as clusulas distinct, first, skitp ou rows;

Na maioria das vezes, views que no so naturalmente atualizveis, devido a alguma das razes expostas acima, podero se tornar atualizveis atravs da criao de triggers que sero responsveis pela manipulao dos dados nas tabelas referenciadas pela view. Uma view naturalmente atualizvel se: Recuperar informaes de uma nica tabela ou view atualizvel; Listar todos os campos not null da tabela ou view referenciada; No utilizar funes de agregao, subqueries,UDFs, etc.

Controle de acesso s views O usurio que est criando a view deve ter direito de acesso (select) nas tabelas acessadas perla view. Todos os usurios que acessarem a view devero ter direito de acesso view concedidos. E ainda necessrio que o dono da view, ou usurio que est acessando, ou a prpria view tenha direito de acesso s tabelas acessadas por ela. No caso de view naturalmente atualizvel, necessrio que a mesma tenha direitos de select, update, insert e delete na tabela utilizada. Caso a view seja atualizada atravs de trigger, cada trigger dever ter seu direito de acesso garantido nas tabelas que sero manipuladas, para as respectivas operaes. Outro exemplo de view:
CREATE VIEW V_ASSOCIADOS( SOC_ID, SOC_NOME, SOC_CPF, SOC_TITULAR, SOC_NASCIMENTO, SOC_ENDER_RES, SOC_ENDER_COB, SOC_ADMISSAO, SOC_VENCIMENTO, SOC_CELULAR, SOC_COTA, SOC_CATEG, SOC_VALMENSAL, SOC_EMAIL, SOC_STATUS, ENDRES_TIPOLOG, ENDRES_NOMELOG, ENDRES_NUMERO, ENDRES_COMPL, ENDRES_BAIRRO, ENDRES_MUNIC, ENDRES_CEP, ENDRES_FONEFIXO, ENDRES_INCLUSAO, ENDRES_ALTERACAO, ENDCOB_TIPOLOG, ENDCOB_NOMELOG, ENDCOB_NUMERO, ENDCOB_COMPL, ENDCOB_BAIRRO, ENDCOB_MUNIC, ENDCOB_CEP, ENDCOB_FONEFIXO, ENDCOB_INCLUSAO, ENDCOB_ALTERACAO, CATEGORIA) AS SELECT S.SOC_ID, S.SOC_NOME, S.SOC_CPF, S.SOC_TITULAR, S.SOC_NASCIMENTO,

50
S.SOC_ENDER_RES, S.SOC_ENDER_COB, S.SOC_ADMISSAO, S.SOC_VENCIMENTO, S.SOC_CELULAR, S.SOC_COTA, S.SOC_CATEG, S.SOC_VALMENSAL, S.SOC_EMAIL, S.SOC_STATUS, ER.END_TIPOLOG, ER.END_NOMELOG, ER.END_NUMERO, ER.END_COMPL, ER.END_BAIRRO, ER.END_MUNIC, ER.END_CEP, ER.END_FONEFIXO, ER.END_INCLUSAO, ER.END_ALTERACAO, EC.END_TIPOLOG, EC.END_NOMELOG, EC.END_NUMERO, EC.END_COMPL, EC.END_BAIRRO, EC.END_MUNIC, EC.END_CEP, EC.END_FONEFIXO, EC.END_INCLUSAO, EC.END_ALTERACAO, CATEGORIAS.CAT_DESCRICAO FROM SOCIOS S INNER JOIN CATEGORIAS ON (S.SOC_CATEG = CATEGORIAS.CAT_ID) INNER JOIN ENDERECOS ER ON (S.SOC_ENDER_RES = ER.END_ID) INNER JOIN ENDERECOS EC ON (S.SOC_ENDER_COB = EC.END_ID);

Exemplo de utilizao da View:


SELECT V.SOC_NOME,V.SOC_CPF,V.ENDRES_TIPOLOG, V.ENDRES_NOMELOG, V.ENDRES_NUMERO, V.CATEGORIA, M.MUN_NOME FROM V_ASSOCIADOS V INNER JOIN MUNICIPIOS M ON V.ENDRES_MUNIC = M.MUN_CODIGO WHERE V.SOC_NOME LIKE '%A%' ORDER BY V.SOC_NOME

Observe que apenas algumas colunas da view foram selecionadas e ainda foi realizado um JOIN com a tabela de MUNICIPIOS que no foi utilizada pela view.

VII.4. ATIVIDADE VII


Passo 1: Crie uma view para exibir apenas os scios devedores. Devero ser definidos os seguintes campos: CPF, Nome do scio e valor total dos dbitos:

51

UNIDADE VIII. TRANSAES


Em ambientes multi-usurios existem operaes que precisam ser serializadas, ou seja, colocadas em fila para que sejam executadas uma a uma, no permitindo tarefas em paralelo. Essas operaes so amparadas por um conceito muito importante nos SGDBs denominado transao, cujo objetivo agrupar uma seqncia de comandos que precisam ser tratados como um bloco nico e indivisvel, para que se mantenham a integridade e a consistncia dos dados.
Uma transao uma unidade lgica de trabalho; ela comea com a execuo de uma operao BEGIN TRANSACTION e termina com a execuo de uma operao COMMIT ou ROLLBACK (DATE, 2003, p. 382).

Figura 5 - Transao

Principais propriedades de uma transao (ACID): Atomicidade: Ou todas as aes da transao acontecem, ou nenhuma delas acontece. Consistncia: Se a transao consistente e o BD comea consistente, ele termina consistente. Isolamento: A execuo de uma transao isolada da execuo de outras transaes. Durabilidade: Se uma transao concluda com sucesso (atravs de uma operao commit bem sucedida), ento seus efeitos so persistentes (durveis).
SET TRANSACTION [NAME transaction] [READ WRITE | READ ONLY] [WAIT | NO WAIT] [[ISOLATION LEVEL] {SNAPSHOT [TABLE STABILITY] | READ COMMITTED [[NO] RECORD_VERSION]}] [RESERVING <reserving_clause> | USING dbhandle [, dbhandle ...]]; <reserving_clause> = table [, table ...] [FOR [SHARED | PROTECTED] {READ | WRITE}] [, <reserving_clause>]

A sintaxe bsica de transao :

52

VIII.1. MODOS DE ACESSO


o tipo, ou modo de acesso que a transao ter no banco de dados. Os tipos de acesso podeM ser: VIII.1.1. READ WRITE

(Leitura & Gravao): o modo padro. Ele prov ao usurio, que iniciou a transao, o poder de ler informaes e alterar o contedo do banco de dados; VIII.1.2. READ ONLY

(Somente leitura): permite ao usurio apenas ler as informaes do banco de dados no permitindo a ele executar comandos que possam alterar qualquer contedo. Observe que o modo RW pode executar, dentro do seu contexto, comandos como INSERT/UPDATE/DELETE e o modo RO permitem somente os comandos SELECT/REFERENCE.

VIII.2. TIPOS DE BLOQUEIO


Especificam como o servidor proceder quando ocorrer algum conflito de leitura ou gravao dos dados. VIII.2.1. WAIT

O modo padro WAIT (esperar), neste modo o usurio que encontrou o conflito fica aguardando at que a transao anterior que ainda no foi confirmada seja encerrada. O controle no retorna para o cliente at que a operao possa continuar. VIII.2.2. NO-WAIT

No modo NO-WAIT (sem esperar), o usurio que gerou o conflito com outra transao no confirmada receber uma mensagem de erro imediatamente. Os conflitos podem aparecer no somente em operaes de gravao, mas tambm em operaes de leitura.

VIII.3. NVEL DE ISOLAMENTO


VIII.3.1. Read uncommitted

Chamado Dirty Read (leitura suja) permite a uma transao ler todas as mudanas feitas por outra transao em qualquer registro, mesmo que estas mudanas no tenham sido confirmadas. Este nvel no recomendado para bancos relacionais por que ele permite ler inconsistncias e informaes parciais. Os valores que uma transao UPDATE/INSERT/DELETE no banco de dados, depois de confirmados, devem ser vistos pelas outras transaes com um novo estado consistente do banco de dados, e o modo de isolamento dirty read vai contra esta idia bsica. Este nvel no suportado pela maioria dos SGDBs. DB2 e Informix suportam. VIII.3.2. Read committed

Na maioria dos servidores relacionais, este o nvel tpico de qualquer mecanismo. Ele permite a transao ler somente mudanas confirmadas feitas por outras transaes.

53

Este nvel de isolamento ajuda a garantir que as transaes vero apenas estados consistentes do banco ( claro que isto assume que todos os clientes iro fazer um conjunto de mudanas inter-relacionadas dentro de uma transao englobada). Mesmo se uma transao confirmar depois de uma outra transao, usando read committed ter iniciado, estas mudanas podero ser lidas. Existem dois sub-modos que se aplicam somente a este nvel: Record version - a ltima verso confirmada do registro lida imediatamente. Esta o padro. No Record version - se estiver ali uma verso no confirmada de um registro gerado por outra transao, a transao atual far o seguinte: se o Tipo de Bloqueio for WAIT, ela ir esperar at o registro ser confirmado (commit) ou descartado (rollback), ou se o Tipo de Bloqueio for NOWAIT um erro ser gerado imediatamente. De qualquer forma, a transao sempre tentar ler a verso mais recente de um registro. Isto se aplica a mudanas feitas por outras transaes, por que uma transao sempre pode ler suas mudanas no confirmadas. Este sub-modo causa a exibio de mensagens de deadlock, e por isto deve ser usado com muito cuidado. VIII.3.3. Snapshot

Chamado de Repeatable Read (leitura repetitiva) permite que uma transao possa obter uma imagem completa do banco de dados quando ela for iniciada. Esta transao no consegue ver qualquer mudana feita por outras transaes concorrentes. Este nvel ideal para relatrios, porque na mesma transao, um registro pode ser lido muitas vezes, e seu valor deve ser o mesmo at que a sua prpria transao mude algum valor. Esta transao pode ver mudanas feitas por ela mesma. Este nvel de isolamento no recomendado para usurios interativos, por que eles precisam de dados atuais, e no de dados congelados. Pode ser usado para operaes obrigatrias e, portanto devem ser confirmadas ou descartadas; por que ela previne garbage collection (lixos): todas as verses at o momento que a transao foi iniciada se mantero para manter uma viso estvel do banco de dados. Um servidor relacional normal paga um preo caro em performance ou recursos para suportar este modo. VIII.3.4. Snapshot table stability

Conhecido tambm pelo nome de Forced Repeatable Read (leitura repetitiva forada), este nvel especfico do Firebird/Interbase e no existe em outro servidor relacional. Ele pode ser chamado de escrita de estabilidade Snapshot, porque ela tem as mesmas propriedades do nvel anterior, mas tambm quando for feita a leitura da tabela esta ser bloqueada para escrita, para as outras transaes. Ento, a transao com este nvel tem o controle sobre a tabela e todas as outras transaes podero somente ler a partir desta tabela. Este nvel no recomendado para propsitos gerais; ele s deve ser utilizado quando realmente for necessrio e em curtos perodos de tempo deve ser confirmada ou descartada, porque cada uma das outras transaes que estiverem tentando gravar na mesma tabela receber uma mensagem de erro ou ser colocada em espera at que a transao seja concluda. Este nvel pode gerar muitos conflitos ou causar um deadlock geral no banco de dados.

VIII.4. MODO DE PR-ALOCAO


Tambm pode ser chamado de table reservation (reserva de tabela) na documentao oficial. Como SET TRANSACTION est disponvel em SQL, DSQL e ISQL, ele pode ser embutido em aplicaes SQL. Ele permite um fino acabamento atravs dos recursos requisitados (neste caso, tabelas) quando uma transao inicia no lugar de ficar aguardando, a transao tenta suas operaes na tabela. Esta tcnica reduz a possibilidade de deadlocks. A clusula RESERVING

54

(reservando), seguida de uma lista de tabelas separadas por vrgula e depois a palavra reservada FOR que tem as seguintes opes de compartilhamento: SHARED: as tabelas podem ser compartilhadas com outras transaes concorrentes para leitura. PROTECTED: as tabelas no podem ser compartilhadas com outras transaes para leitura ou gravao. Opes de modo de acesso: READ: a transao ir querer antecipar somente usos do tipo RO, de acordo com uma ou outra opo de compartilhamento mostrada anteriormente. WRITE: a transao ir querer antecipar uso de WRITE nas tabelas, de acordo com uma ou outra opo de compartilhamento mostrada anteriormente. H quatro possibilidades de combinao. Depois da vrgula pode-se colocar uma lista de tabelas separadas por vrgula e seguida da palavra reservada FOR e seu modo de pr-alocao desejado. Tente uma dessas quatro combinaes: Shared, write: permite a qualquer transao com modo de acesso WRITE e nvel de isolamento concurrency ou read committed, atualizar enquanto outras transaes com outros nveis de isolamento e acesso READ podem ler dados. Shared, read: permite a qualquer transao ler dados, e qualquer transao com acesso WRITE a atualizar. Este modo de reserva mais liberal. Protected, write: previne que outras transaes atualizem. Outras transaes com nveis de isolamento concurrency ou read committed podem ler dados, mas somente esta transao pode atualizar. Protected, read: previne que todas as transaes atualizem, mas permite que todas as transaes leiam os dados.

VIII.5. EXEMPLO DE TRANSAO

Intuitivamente, a primeira transao est transferindo R$100 da conta B para a conta A. A segunda est creditando 6% de juros em ambas as contas. No h garantia que T1 vai executar antes de T2 ou vice- versa, se ambas forem submetidas praticamente juntas. Contudo, o efeito visvel tem de ser equivalente ao dessas duas transaes rodando serialmente (uma depois da outra), numa ordem qualquer. Considere o seguinte entrelaamento (escalonamento):

Outro exemplo:

Como o SGBD v o segundo escalonamento:

55

O SGBD no pode permitir escalonamentos como este!

Grafo de dependncias: Um n por transao, flecha de Ti para Tj se Tj ler ou escrever um objeto escrito pela ltima vez por Ti. O ciclo no grafo revela o problema. O resultado de T1 depende de T2 e vice-versa. Notas sobre a autoria: Este captulo foi baseado, principalmente, no artigo de Claudio Valderrama disponvel em http://www.cvalde.com/document/TransactionOptions.htm, traduzido e adaptado por Jiancarlos Kleinebing, disponvel no site da CFLP (http://www.comunidade-firebird.org).

VIII.6. ATIVIDADE VIII


Passo 1: Faa duas conexes ao banco de dados clube.fdb e realize testes de transao. Execute um update na tabela de scios nas duas conexes. Execute COMMIT WORK na segunda e tente fazer o mesmo na primeira.

56

UNIDADE IX.PROJETO COMPLETO (TRABALHO)


Este captulo ser apresentado a partir do documento de divulgao do trabalho em grupo que valer como terceira nota da disciplina.

57

UNIDADE X. BANCO DE DADOS DISTRIBUDO


De acordo com Elmasri e Novate (2005), um sistema de computao distribuda consiste de vrios elementos de processamento, no necessariamente homogneos, que so interconectados por uma rede de computador, e que cooperam na execuo de certas tarefas. J um banco de dados distribudo uma coleo de mltiplos bancos logicamente interrelacionados distribudos por uma rede de computadores. Ainda os mesmo autores conceituam um sistema de gerenciamento de banco de dados distribudos (SGBDD) como um sistema de software que permite o gerenciamento de um banco de dados distribudo e que torna a distribuio transparente ao usurio.

X.1.

PRINCIPAIS CARACTERSTICAS DE UM BDD

Autonomia local apesar de existirem diversos servidores no sistema, para o cliente existe somente um servidor de dados, sendo transparente para o mesmo, a distribuio tanto dos dados como do processamento. Inexistncia de um servidor central em um sistema distribudo no h uma hierarquia de servidores, mas todos podem trabalhar independentemente. Com a queda de um servidor, o sistema continua executando, mas com uma reduo de recursos proporcional representao do potencial computacional do servidor que caiu em relao ao sistema. Operao contnua uma importante caracterstica de um sistema de dados distribudo a sua alta tolerncia a falhas tanto de hardware, software, como de rede. Em um sistema monoltico, havendo falha em qualquer dos quesitos mencionados anteriormente, ocorre a indisponibilidade do mesmo. Em um sistema distribudo, as chances de indisponibilidade so inversamente proporcionais quantidade de servidores. Havendo falha em um servidor, o sistema poder continuar processando de forma reduzida ao invs de sair do ar. H uma queda de desempenho, e at indisponibilidade de alguns dados, mas no a indisponibilidade do servio. Independncia de localizao em um sistema distribudo, o cliente solicitar qualquer dado existente no sistema sem a preocupao em acessar o servidor onde se encontra armazenada cada informao. Para o cliente, todas as informaes estaro no servidor que ele acessa. Independncia de fragmentao um sistema de bancos de dados distribudo dever acatar a possibilidade fragmentar os dados de forma a manter em um servidor as informaes que seus clientes solicitam mais, distribuindo assim os dados e o processamento das informaes. Estes dados so unificados por meio de junes para fragmentaes verticais (colunas) e de unies para fragmentaes horizontais (tuplas). Para o cliente esta fragmentao no visvel. Processamento de consultas distribudo o sistema distribudo capaz de envolver diversos servidores na otimizao e execuo de consultas a dados considerando a localizao dos mesmos, sendo transparente para o usurio. Gerenciamento de transaes distribudo um sistema distribudo ser capaz de conferir atomicidade a uma transao, mesmo que ela envolva servidores diferentes. Independncia de hardware um sistema de dados distribudo deve operar em cima de uma abstrao de software capaz de operar em diferentes arquiteturas da o suporte a diversos tipos de hardwares.

58

Independncia de sistema operacional um sistema de dados distribudo assim como deve oferecer tolerncia a diversas arquiteturas, dever oferecer implementao em diversos sistemas operacionais por meio de verses do SGBD capazes de operar em diversos sistemas operacionais. Independncia da rede se o SGBD utilizado para implantao da rede distribuda suporta diversos sistemas operacionais, dever ser capaz de operar sobre um sistema operacional que tenha suporte a diversos tipos de rede. Independncia de SGBD o sistema de bancos de dados distribudo poder ter sites implementados com SGBDs diferentes. A descrio de um banco de dados distribudo afetada pelo tipo de sistema da seguinte forma. Se o SGBD for homogneo, todos os esquemas do nvel lgico utilizaro o mesmo modelo de dados. J no caso de sistemas heterogneos, teremos a seguinte situao: Esquema conceitual global No modelo de dados pivot

Esquemas externos globais Podem ser tanto no modelo de dados pivot, para usurios globais, ou em um modelo de dados local, no caso de se desejar oferecer a um usurio local uma viso do BDD no modelo que ele est acostumado. Esquemas locais conceituais No modelo de dados local No modelo de dados local

Esquemas externos locais

Figura 6 Esquema de um banco de dados distribudo

59

X.2.

EXEMPLO DA DESCRIO DE UM BDD

O banco de dados usado como exemplo refere-se a fornecedores, com nmero, nome e cidadesede; peas, com cdigo e nome; e fornecimentos relacionando um fornecedor a cada pea que fornece e indicando a quantidade fornecida. Assumindo que o banco descrito no modelo relacional, o esquema conceitual seria: Esquema Conceitual Global
FORNECEDORES [ NUMERO,NOME,SEDE ] PECAS [ CODIGO,NOME,COR,PESO ] FORNECIMENTO [ NUMERO,CODIGO,QUANTIDADE ]

Poderamos definir dois esquemas externos globais da seguinte forma: Esquema Externo Global A: Esquema de relao:
FORN_PECA [ NUMERO,CODIGO,NOME ]

Definio:
FORN_PECA = (FORNECIMENTO * PECAS) [ NUMERO,CODIGO,NOME ]

Esquema Externo Global B: Esquema de relao:


FORN_PECA [ NUMERO,CODIGO ]

Definio:
FORN_PECA = FORNECIMENTO [ NUMERO,CODIGO ]

A lgebra relacional ser usada para indicar mapeamentos neste exemplo; a operao de juno natural ser indicada pelo smbolo '*' e as operaes de projeo e seleo sero denotadas da forma usual, ou seja, R[X] indicar a projeo de R na lista de atributos X e R[B], onde B uma qualificao, indicar uma seleo das tuplas de R que satisfazem B. Assumindo que o sistema homogneo e distribudo em apenas dois ns, os esquemas conceituais locais e a distribuio do esquema conceitual global seriam ento descritos da forma abaixo (o primeiro n conter todos os fornecedores com sede em Varginha, todos os fornecimentos em que esto envolvidos e o nome e cdigo das peas; o segundo n conter o resto dos fornecedores e seus fornecimentos, alm do cdigo, cor e peso das peas.

Esquemas Conceituais Locais: Primeiro N:


FORNECEDORES1 [ NUMERO,NOME,SEDE ] PECAS1 [ CODIGO,NOME ] FORNECIMENTO1 [ NUMERO,CODIGO,QUANTIDADE ]

Segundo N:
FORNECEDORES2 [ NUMERO,NOME,SEDE ] PECAS2 [ CODIGO,COR,PESO ] FORNECIMENTO2 [ NUMERO,CODIGO,QUANTIDADE ]

Mapeamentos Definindo o Critrio de Distribuio: Primeiro N:


FORNECEDORES1 = FORNECEDORES [ SEDE='PASSA TRES' ] PECAS1 = PECAS [ CODIGO,NOME ] FORNECIMENTO1 = FORNECIMENTO * (FORNECEDORES1 [ NUMERO]

Segundo N:
FORNECEDORES2 = FORNECEDORES [ SEDE 'PASSA TRES' ] FORNECIMENTO2 = FORNECIMENTO * (FORNECEDORES2 [ NUMERO] PECAS2 = PECAS [ CODIGO,COR,PESO ]

60

Como os esquemas internos locais dependem do SGBD local em questo, no faz sentido apresent-los aqui. Esquemas externos locais tambm so omitidos.

X.3.

PROJETO DE BDD

Em primeiro lugar, o projeto do esquema conceitual global e o dos esquemas externos globais inteiramente semelhante ao caso centralizado, j que o banco de dados distribudo dever se comportar como centralizado perante os usurios globais. Alm disto, o projeto dos esquemas internos locais tambm idntico ao de bancos centralizados, exceto que a carga imposta por acessos remotos aos dados locais tambm deve ser levada em considerao. Portanto, o problema bsico de projeto de bancos de dados distribudos reside no projeto dos esquemas conceituais locais, pois estes refletem a estratgia de distribuio do banco. As estratgias de distribuio so classificadas em particionamento e replicao. Seja D uma estrutura (lgica) de dados do esquema conceitual global. Dizemos que D particionada verticalmente (ou estruturalmente) quando D mapeada em duas ou mais estruturas (lgicas) de dados que no so idnticas a D e que pertencem a diferentes esquemas conceituais locais. Dizemos que D particionada horizontalmente (ou particionada por ocorrncia) quando D mapeada em estruturas idnticas a D e pertencentes a dois ou mais esquemas conceituais locais de tal forma que o mapeamento define um particionamento (no sentido matemtico) do conjunto de dados associado a D. No exemplo anterior, FORNECEDORES foi particionada horizontalmente em FORNECEDORES1 e FORNECEDORES2, o mesmo acontecendo com FORNECIMENTO. J PECAS foi particionada verticalmente em PECAS1 e PECAS2. Dizemos que D replicada quando D mapeada em duas ou mais estruturas (lgicas) de dados idnticas a D e pertencentes a diferentes esquemas conceituais locais de tal forma que o mapeamento de D em cada uma destas estruturas sempre a identidade. Ou seja, existiro cpias idnticas do conjunto de dados associado a D armazenadas em dois ou mais ns. A replicao total quando cada banco de dados local contm uma cpia completa do banco. Caso contrrio, a replicao parcial. A escolha da estratgia de distribuio do banco exige cuidados especiais, pois, se vier a gerar um trfego de dados exagerado entre os vrios ns, o custo de comunicao tornar o projeto anti-econmico. Inicialmente, deve-se verificar se a soluo distribuda de fato uma opo vivel. Isto significa, essencialmente, detetar se o banco fortemente integrado, ou se pode ser dividido em partes mais ou menos independentes; se este for o caso, deve-se ento determinar qual a vantagem de descentralizar o banco. Um estudo do perfil da populao de transaes existentes no sistema centralizado em uso (se este for o caso) dever ser feito, tentando determinar se possvel dividir o sistema - banco de dados e transaes - em subsistemas mais ou menos independentes. Se este for o caso, o custo de transmisso de dados dever ser reduzido, descentralizando-se o banco e suas funes. Acessos que cortem fronteiras geogrficas ainda sero suportados, desde que no sejam muito freqentes. Uma vez identificado que a soluo distribuda vivel, deve-se escolher a tcnica de distribuio, levando-se em conta os seguintes fatores: Particionamento:

61

Um BDD particionado no fica limitado memria secundria disponvel localmente e, comparativamente a uma soluo centralizada (com acesso distribudo), aumenta a confiabilidade e eficincia do sistema, se h um alto grau de localidade de referncia; Replicao: Um BDD replicado aumenta a confiabilidade, disponibilidade e pode aumentar a rapidez do sistema, mas por outro lado cria problemas de propagao de atualizaes nos dados e exige mais memria secundria local. Naturalmente, o grau de replicao do BDD traduz um compromisso entre o custo de acesso a dados remotos e o custo de atualizar cpias mltiplas.

62

Resumo das estratgias de distribuio % de Tamanho do Mtodo de Excees Arquivo Distribuio -pequena replicao pequena grande particionamento alta grande centralizado
Nota: percentagem de excees refere-se freqncia com que uma transao necessita de dados que no esto armazenados localmente. Por fim, consideraes envolvendo "hardware" devem ser mencionadas com relao ao projeto de BDDs. A anlise do equipamento necessrio dever responder, pelo menos, s seguintes perguntas: Que processadores existem na organizao (ou precisam ser adquiridos)? Qual a configurao mnima dos processadores para suportar o SGBDD? Que perifricos so necessrios? Que equipamentos de comunicao de dados so necessrio para interligar os processadores?

X.4.
X.4.1.

ADMINISTRAO DE BDD
Organizao e Tarefas da Equipe de Administrao

A organizao da equipe de administrao, no caso distribudo, deve acompanhar a prpria estratgia de descentralizao. Controle centralizado de um banco distribudo no faz sentido. Uma organizao plausvel seria criar uma equipe local para cada n onde o banco reside com autoridade para propor e implementar mudanas em detalhe no banco local e nos esquemas externos locais. Haveria ainda uma equipe central com autoridade para coordenar e vetar, se necessrio, mudanas no sistema (a serem implementadas pelas equipes locais). As tarefas tradicionais da equipe de administrao de um banco de dados (centralizado) incluem o projeto lgico e fsico do banco e sua documentao, definio dos vrios esquemas externos em consulta com os analistas de aplicao, definio dos critrios de autorizao, criao de rotinas de recuperao do banco, monitorao da utilizao do banco e reestruturao do banco. No caso de bancos de dados distribudos, deve-se acrescentar ainda a tarefa mais geral de garantir a cooperao entre os usurios em prol de uma compartilhamento efetiva dos dados. Trs facetas da administrao de um BDD merecem especial ateno: documentao do banco, administrao dos recursos locais de cada sistema e monitorao do sistema. (A tarefa bsica de projeto lgico e fsico do banco j foi brevemente abordada na seo anterior). A documentao do BDD deve tornar claro a todos os usurios o significado dos tens de dados armazenados pelo banco. Isto requer regras para sistematizar a nomenclatura e a descrio informal dos tens de dados, definio dos tipos de cada tem de dados e regras para traduzir um tipo utilizado em uma mquina para o tipo equivalente de outra (e.g., representao e preciso de reais em mquinas diferentes). A administrao da carga imposta a cada sistema que compe o BDD exige, antes de mais nada, a definio de critrios de medio. Feito isto, necessrio criar regras que assegurem a usurios remotos acesso a recursos locais e que atinjam um balanceamento entre a carga local e a imposta por acessos remotos. Administrao da carga inclui, tambm, definir como ser cobrado aos usurios locais e remotos a utilizao do sistema.

63

Finalmente, uma vez estabelecidas regras para administrao do banco, a equipe dever auditar periodicamente o sistema para assegurar a aderncia a tais regras. A carga, tempo de resposta e utilizao do sistema dever ser constantemente monitorada, prevendo-se reestruturao do banco ou mudanas nas regras de administrao para corrigir desequilbrios. X.4.2. Problemas que Afetam a Administrao

Os problemas a serem enfrentados pela equipe de administrao para atingir os seus objetivos podem ser compreendidos considerando-se trs cenrios bsicos para um banco de dados distribudo. Se o BDD resultou da interligao de sistemas existentes ento certamente aparecero problemas devidos a: heterogeneidade do sistema global, introduo de padres globais sem que seja comprometida a autonomia local, critrios de alocao de custos tendo em vista acessos locais e remotos, alm do balanceamento do tempo de resposta de acessos locais e remotos. Se o cenrio admite a criao de novos bancos locais de forma semi-autnoma, aparecero problemas relativos a: definio de regras e responsabilidades locais, descrio da semntica dos dados definidos localmente, grau de cooperao entre os ncleos locais, principalmente no que se refere alocao de recursos para processamento de acessos remotos. Finalmente, em um cenrio onde o BDD foi criado pela distribuio em ns homogneos de um sistema centralizado, haver o problema fundamental de definir uma estratgia de distribuio que otimize o tempo de resposta global, sem penalizar demasiadamente grupos de usurios. Resumo: Um Sistema de Banco de Dados Distribudo oferece maior disponibilidade, confiabilidade, segurana e maior desempenho. Porm sua implementao mais cara e sua manuteno mais dispendiosa. Um banco de dados distribudo uma soluo ideal para sistemas de alta disponibilidade como bancos e grandes sites de compras da Internet. Cabe ao engenheiro do sistema escolher a opo de armazenamento e acesso a dados mais vivel para sua aplicao.

64

X.5.

ATIVIDADE X

Passo 1: Cite as principais vantagens de um BDD:

Passo 2: Cite as principais desvantagens de um BDD:

Passo 3: Explique a diferena entre replicao e particionamento:

65

UNIDADE XI.BANCO DE DADOS ORIENTADO A OBJETOS


Um banco de dados orientado a objeto um banco em que cada informao armazenada na forma de objetos, e s pode ser manipuladas atravs de mtodos definidos pela classe que esteja o objeto. O conceito de banco de dados OO o mesmo da LOO, com apenas uma pequena diferena: a persistncia de dados. Existem pelo menos dois fatores que levam a adoo desse modelo, a primeira que banco de dados relacional se torna difcil trabalhar com dados complexos. A segunda que aplicaes so construdas em linguagens orientadas a objetos (java, C++, C#) e o cdigo precisa ser traduzido para uma linguagem que o modelo de banco de dados relacional entenda, o que torna essa tarefa muito tediosa. Essa tarefa tambm conhecida como perda por resistncia. (ELMASRI, 2005) O modelo OO ganhou espao nas reas como banco de dados espaciais, telecomunicaes, e nas reas cientficas como fsica de alta energia e biologia molecular. Isso porque essa tecnologia oferece aumento de produtividade, segurana e facilidade de manuteno. Como objetos so modulares, mudanas podem ser feitas internamente, sem afetar outras partes do programa. O modelo OO no teve grandes impactos nas reas comerciais embora tenha sido aplicado em algumas. Em 2004 os bancos de dados orientados a objeto tiveram um crescimento devido ao surgimento de banco de dados OO livres. A Object Data Management Group (ODMG) com a Object Query Language (OQL) padronizou uma linguagem de consulta para objetos. Uma caracterstica que vale a pena ser ressaltada, que o acesso a dados pode ser bem mais rpido, porque no necessrio junes. J que o acesso feito diretamente ao objeto seguindo os ponteiros. Outra caracterstica importante que o BDOO oferece suporte a verses, isto , um objeto pode ser visto de todas e vrias verses. Os bancos de dados OO e relacionais apresentam uma srie de caractersticas, e cada um tem a sua vantagem e desvantagem. Como por exemplo, os modelos OO utilizam interfaces navegacionais ao invs das relacionais, e o acesso navegacional bem eficiente implementada por ponteiros. Um problema seria a inconsistncia desse modelo em trabalhar com outras ferramentas como OLAP, backup e padres de recuperao. E os crticos afirmam que o modelo relacional fortemente baseado em fundamentos matemticos o que facilita a consulta, j os modelos OO no, o que prejudicaria e muito as consultas. A dificuldade de implementar encapsulamento seria um outro problema, porque como sero feitas as consultas se no possvel ver os atributos.

XI.1. ESTRUTURA E CARACTERSITICAS


O objeto formado como se fosse uma tripla (i, c, v), onde o i o OID do objeto, o c um construtor, ou seja, que tipo de valor ele vai receber exmplo: atom, tuple, set, list, bag, array e v o valor corrente. Ento o objeto passa a suportar aquilo que foi definido para ele. Se ele vai receber um valor atmico ele s aceitar valores atmicos. Os construtores de tipos sets, bags, lists e arrays so caracterizados como tipos de colees e a diferena entre eles a seguinte: sets e bags, o primeiro s aceita valores distintos enquanto o

66

segundo aceita valores duplicados. Lists e arrays, o primeiro s aceita nmeros arbitrrios, enquanto o segundo, o tamanho deve ser pr-estabelecido. Umas das caractersticas dos sistemas OO ocultar informao e tipos abstratos de dados, sendo que muito complicado aplicar esse modelo na prtica. Por exemplo, nos sistemas atuais para uma consulta em uma determinada tabela necessrio saber todos os atributos da tabela, para formar a consulta. Em um sistema OO, que preza pelo encapsulamento nem toda tabela pode enxergar a outra, o que dificultaria muito as consultas. A idia do encapsulamento em um BD OO, j que no d para ser aplicado a rigor, pelo menos tratar o comportamento do objeto com funes pr-definidas. Por exemplo, insert, delete, update etc. Ou seja, a estrutura interna do objeto escondida, e os usurios externos s conhecem a interface do tipo de objeto como os argumentos (parmetros), de cada operao. Ento a implementao oculta para usurios externos que est includo a definio da estrutura interna, de dados do objeto e a implementao das operaes que acessam essas estruturas. Enfim o BD OO prope o seguinte, dividir estrutura do objeto em partes visveis e ocultas ento para operaes que exigem atualizao da base de dados torna se oculta e para operaes que exige consultas, torna-se visvel. (ELMASRI, 2005). Em grande parte, os bancos de dados OO tem suas restries com relao s extenses, isto , as extenses possuem o mesmo tipo ou classe. Na Linguagem OO nem sempre assim. SMALLTALK, por exemplo, permite ter uma coleo de objetos de diferentes tipos. comum em aplicaes de banco de dados que cada tipo ou subtipo de dado possua uma extenso associada, que mantenha a coleo de todos os objetos persistentes daquele tipo ou subtipo. Nesse caso, a restrio de que todo objeto numa extenso que corresponda a um subtipo tambm deva ser um membro de extenso que corresponda a seu supertipo. Alguns sistemas de banco de dados OO possuem um tipo de sistema predefinido (chamado de classe raiz (root) ou classe OBJETO, cuja extenso contm todos os objetos do sistema. A classificao ento segue, designando objetos para supertipos adicionais que so significativos para a aplicao, criando uma hierarquia de tipo ou hierarquia de classe para o sistema). Grande parte do modelo OO separa claramente o que objeto persistente, e objeto transiente. Por exemplo, quando realizada uma consulta, carregada uma lista de objetos numa classe transiente (temporria), o sistema pode manipular os dados nessa classe e assim que forem feitas as manipulaes necessrias elas deixam de existirem. Uma das grandes vantagens de um SGBDOO que ele permite salvar objetos grandes e depois obter a recuperao facilmente desses grandes objetos como texto longos, imagens etc. Eles so considerados no estruturados porque o SGBD no conhece a sua estrutura. A aplicao pode utilizar vrias funes para manipular esses objetos. E o mais importante que o SGBD no conhece essas funes, mas atravs de tcnicas oferecidas por ele capaz de reconhecer esses objetos e busc-los no banco de dados. Caso o objeto seja muito grande ele pode utilizar tcnicas como buffering e caching. importante frisar que SGBDOO no capaz de processar diretamente condies de selees e outras operaes desses objetos. necessrio que esses dados sejam passados para o BD para que ele possa saber tratar os objetos corretamente. Por exemplo, considere objetos que so imagens bitmap bidimensional. Suponha que a aplicao precise selecionar a partir de uma coleo de tais objetos somente aqueles que incluem certo padro. Nesse caso, o usurio deve fornecer o programa de reconhecimento do padro, como um mtodo em objetos do tipo bitmap. O SGBDOO recupera, ento, um objeto do banco de dados e aplica nele o mtodo para o reconhecimento do padro para determinar se o objeto adere ao padro desejado.

67

Objetos complexos estruturados so os objetos que contm vrios tipos de objetos dentro deles. Por exemplo, um objeto composto de um list, de tupla, de um set, isto , o SGBDOO conhece todas essas estruturas, porm o objeto se torna complexo por composto de tipos de objetos diferentes.

XI.2. BANCO DE DADOS OO NO MERCADO


Existem vrios bancos de dados orientados a objeto, discutir cada um deles essencial para a tomada de deciso. importante saber qual modelo mais apropriado para o uso da sua aplicao. A seguir esto alguns exemplos: CACH: trabalha com as seguintes linguagens: Java, .Net, C++, XML e outras. um banco de dados comercial. VERSANT: trabalha com as seguintes linguagens: Java e C++. bastante utilizado nos sistemas telecomunicaes, redes de transporte, reas mdicas e financeiras. um banco de dados comercial. DB4Objects: Trabalha com as seguintes linguagens: Java e .Net. Sua linguagem de Consulta a Object Query Language (OQL) e um banco de dados distribudo em duas licenas, a GPL (licena pblica Geral) e uma licena comercial. O2: Trabalha com as seguintes linguagens: C, C++ e o ambiente O2. Sualinguagem de Consulta: O2Query, OQL. Seu gerenciador do Banco de Dados oO2Engine, e um banco de dados comercial. GEMSTONE: trabalha com as seguintes linguagens: Java, C++, C#, XML e outras. Sua linguagem de Consulta o DML. um banco de dados comercial. JASMINE: Possui alta conectividade com Web, suporte linguagem Java. Pode-seainda desenvolver aplicaes em Visual Basic usando Active/X, em HTML(HyperText Markup Language) usando as ferramentas de conectividade para Web disponveis no Jasmine, em C e C++ usando APIs e em Java usando interfaces demiddleware embutidas no Jasmine. um banco de dados comercial. MATISSE: Trabalha com as seguintes linguagens: Java, C#, C++, VB, Delphi, Perl,PHP, Eiffel, SmallTalk. um banco de dados comercial. Objectivity/DB: trabalha com as seguintes linguagens: C#; C++; Java; Python,Smalltalk; SQL++ (SQL com objeto - extenses orientadas) e XML (para aimportao e a exportao somente). um banco de dados comercial. Ozone: trabalha com as seguintes linguagens: Java e XML. um banco de dados opensource.

XI.3. OBJECT DEFINITION LANGUAGE (ODL


A ODL foi feita para dar suporte aos construtores semnticos do modelo de objetos ODMG e independente de qualquer linguagem de programao em particular. O objetivo da ODL criar especificaes de objetos, isto , classes e interfaces. A ODL no considerada uma linguagem de programao completa. Ela permite que o usurio especifique um banco de dados independente da linguagem de programao, e utilizando o binding especfico com a linguagem para especificar como os componentes ODL podem ser mapeados para componentes em linguagens de programao especfica, como C++, SmallTalk e Java.

68

XI.4. OBJECT QUERY LANGUAGE (OQL)


a linguagem de consulta declarativa definida pela ODMG (1995). Prev suporte ao tratamento de objetos complexos, invocao de mtodos, herana e polimorfismo. projetada para trabalhar acoplada com as linguagens de programao com as quais o modelo ODMG define um biding, como C++, SMALLTALK e JAVA. Isso faz com que qualquer consulta OQL embutida em uma dessas linguagens de programao pode retornar objetos compatveis com os sistemas de tipos dessa linguagem. Fornece suporte para lidar com set, structure, list e array, tratando estas construes com a mesma eficincia. Permite expresses aninhadas. Pode chamar mtodos dos tipos envolvidos na consulta. No fornece operadores para atualizao, mas pode chamar operaes definidas nos objetos para realizar esta tarefa, no violando assim a semntica do modelo de objetos, o qual, por definio, gerenciado pelos mtodos especificados no objeto. possvel definir um nome para uma determinada consulta, que armazenada no BD. Para uso posterior, a consulta referenciada atravs do nome definido. Apresenta construtores de objetos, structure, set, list, bag e array. Uma consulta em OQL parte dos pontos de entrada do banco de dados e constri como resposta, um objeto que tipicamente uma coleo. Suporta as clusulas SELECT, FROM, WHERE, GROUP BY, HAVING e ORDER BY.

XI.5. OBJECT QUERY LANGUAGE


A sintaxe bsica da OQL uma estrutura select ... from ... where, igual a da SQL. A seguir ser mostrado uma consulta, o nome de todos os departamentos na faculdade 'Engenharia:
SELECT d.dnome From d in departamentos WHERE d.faculdade ='Engenharia';

Na maioria das vezes, necessrio um ponto de entrada para o banco de dados para cada consulta, que pode ser qualquer objeto persistente nomeado. Em muitas consultas, ponto de entrada o nome da extenso de uma classe, ou seja, uma extenso considerada como sendo o nome de um objeto persistente cujo tipo uma coleo. Onde na maioria das vezes um conjunto, exemplos: set<Pessoa>, set<Professor>, set <Disciplinas> e assim por diante. A utilizao de um nome de extenso, por exemplo, departamentos em OQL, como um ponto de entrada refere-se a uma coleo persistente de objetos. Toda vez que uma coleo for referenciada em uma consulta OQL, devemos definir uma varivel de interao ( parecido com as variveis de tupla que percorrem as tuplas nas buscas da SQL), d em OQL que percorre cada objeto na coleo. A consulta exemplificada ir selecionar certos objetos de acordo com a clusula where d.faculdade = 'Engenharia' e sero selecionados para o resultado da consulta. Sendo assim o resultado da consulta do tipo Bag<string> porque o tipo de cada valor dnome recuperado no resultado da consulta (embora o resultado seja um set porque dnome um atributo chave). importante ressaltar que em geral, uma consulta seria do tipo bag para select ... from ... e do tipo set para select distinct. Existem trs tipos de opes para especificar variveis de interao: d in departamentos, departamentos d, departamentos as d. importante ressaltar que qualquer objeto persistente nomeado que se refira a um objeto atmico (simples) ou a um objeto coleo pode ser utilizado como um ponto de entrada para o banco de dados.

69

Uma consulta no precisa seguir necessariamente a estrutura select ... from ... where ... . Por exemplo, qualquer nome persistente por si mesmo uma consulta, e neste cado o resultado uma referncia a esse objeto persistente. Por exemplo,
Q1: departamentos;

Neste caso, retorna uma referncia coleo de todos os objetos persistentes em departamentos, cujo tipo seja set <departamento>. Caso um nome persistente departamentocc estivesse atribudo a um departamento especfico, tipo 'ciencia da computao'. Q1a: departamento; O resultado seria cincia da computao. Uma vez que o ponto de entrada especificado, o resultado, o conceito de expresso de caminho (path expression) pode ser utilizado para indicar o caminho de atributos e objetos relacionados. Normalmente, uma expresso de caminho inicia-se pelo nome de um objeto persistente ou pela varivel de interao que percorre os objetos individuais de uma coleo. Esse nome ser acoplado por zero ou mais nomes de relacionamentos ou nomes de atributos conectados utilizando-se a notao de ponto. Veja no exemplo a seguir, considerando um banco de dados UNIVERSIDADE:
Q2 : departamentocc.coordenador; Q2a: departamentocc.coordenador.classificacao; Q2b: departamentocc.possui_professores;

Frmula 1 Consulta de um banco de dados UNIVERSIDADE exemplo. A primeira retorna um objeto do tipo Professor, porque o tipo do atributo coordenador da classe Departamento. O objeto professor que est relacionado com o objeto Departamento cujo nome persistente departamentocc pelo atributo coordenador. A segunda bem parecida, s que retorna classificao do objeto Professor. A terceira expresso retorna um objeto do tipo set <Professor> mesmo quando aplicada a um objeto simples, pois o tipo do relacionamento possui_professor da classe Departamento. O resultado vo ser todos os professores que trabalham no Departamento cincia da computao. Consultas como a Q3, no so permitidas porque o resultado poderia ser do tipo set<string> ou bag<string>, uma vez vrios professores podem possuir a mesma classificao. Q3: departamentocc.possui_professores.classificaao;
Q3a: from Q3b: from select f.classificacao f in departamentocc.possui_professores; select distinct f.classificacao f in departamentocc.possui_professores;

Frmula 2: Q3a: retorna os professores com suas respectivas classificaes. Q3b: retornar o mesmo resultado s que no retorna os resultados repetitivos. Fonte: ELMASRI, 2005. A OQL Q3a retorna a classificao de todos os professores que trabalham no Departamento de cincia da computao, o resultado do tipo bag, ou seja, trar valores de classificao duplicados. J a segunda Q3b, trar o mesmo resultado da primeira, com uma exceo, os valores no sero duplicados. Na OQL tambm possvel especificar Vises como Consultas Nomeadas. Na OQL viso (view da SQL), da-se o nome de consulta nomeada. Para realizar uma viso, usase a palavra-chave define utilizada para especificar um identificador para a consulta nomeada, e deve ser nico entre todos os nomes de objetos, classes, mtodos e funes do esquema. Uma vez definida a consulta torna se persistente at que seja redefinida ou removida. Veja o exemplo:

70
V1: define possui_alunos(nomedepto) as select s from s in alunos where s.estuda_em.dnome = nomedepto;

Frmula 3: V1: retorna os alunos com seus respectivos departamentos. Fonte: ELMASRI, 2005 Da expresso estuda_em para Aluno, pode utilizar a viso V1, para representar seu inverso sem ter que definir um relacionamento explicitamente. Tambm pode ser utilizado para representar os relacionamentos inversos que no possuem expectativa de uso freqente. possvel ento fazer: possui_alunos ('cincia da computao'). Essa OQL retornar um bag de alunos que estudam no departamento de cincia da computao. Na maioria das consultas retornada uma lista de objetos. Caso seja necessrio retornar um nico elemento pode ser feito o seguinte. Existe um operador chamado element na OQL que garante o retorno desse nico elemento e de uma coleo unitria c que contm somente um elemento. Se c contiver mais que um elemento ou se c estiver vazia, o operador element causa uma exceo. Veja o caso Q6:
Q6 : element (select d from d in departamentos where d.dnome = ''ciencia da computacao);

Frmula 4: Extrai elementos nicos de colees unitrias. Fonte: ELMASRI, 2005 Considerando que o departamento nico para todos os departamentos, o resultado ser um nico departamento. O resultado do tipo d:Departamento. Os operadores de agregao (min, max, count, sum, e avg) operam sobre uma coleo. Esses operadores tm a mesma funo, que em SQL. O operador count retorna um tipo inteiro. Os outros (min, max, sum e avg) retornam o mesmo tipo da coleo. Para compreender melhor esses operadores ser mostrado duas pesquisas a Q7 e a Q8. A primeira retorna o nmero de alunos que estudam 'cincia da computao', enquanto a segunda retorna a mdia mdc de todos os aluno de nvel superior que se especializam em cincia da computao.
Q7 : count (s in estuda_em ('ciencia da computacao')); Q8 : avg (select s.mdc from s in alunos where s.especializa_em.dnome = 'ciencia da computao') and s.turma = 'superior');

Frmula 5: q7: A primeira retorna o nmero de alunos que estudam 'ciencia da computao', q8 : retorna a mdia mdc de todos os alunos de nvel superior que se especializam em ciencia da computacao. Fonte: ELMASRI, 2005. As expresses de pertinncia e quantificao retornam um tipo booleano. Seja v um varivel, c uma expresso de coleo, b uma expresso do tipo booleano e um elemento do tipo dos elementos da coleo c. Ento : (e in c ) - retorna verdadeiro se o elemento e for um membro da coleo c. (for all v in c:b) retorna verdadeiro se todos os elementos da coleo c satisfizerem b. (exists v in c:b) retorna verdadeiro se existir pelo menos um elemento em c que satisfaa b. A situao a seguir ilustrar a condio de pertinncia, por exemplo, necessrio recuperar os nomes de todos os alunos que completaram o curso chamado 'sistema de banco de dados I'. Veja a Q10:
Q10 : select s.nome.unome, s.nome.p.nome from s in alunos where 'sistema de banco de dados I' in (select c.nome from c in s.disciplinas_cursadas.disciplinas.do_curso);

71

Frmula 6: q10: Retorna os nomes de todos os alunos que completaram o curso chamado 'sistema de banco de dados I'. Fonte: ELMASRI, 2005. A OQL Q10 mostra um modo mais simples de se especificar a clausula select de consultas que retornam uma coleo de estruturas. Consultas que retornam valores booleanos, true ou false. Assume-se que exista um objeto jeremy do tipo Aluno. Ento a consulta Q11, responde seguinte pergunta: jeremy se especializa em ciencias da computaao. E a Q12, responde pergunta Todos os alunos de cincia da computao so orientados por professores do departamento de cincia da computao. Tanto Q11 quanto Q12 retornam true ou false, que so interpretados como resposta sim ou no para perguntas anteriores.
Q11: jeremy in especializa_em (ciencia da computao); Q12: for all g in (select s from s in grad_aluno where s.especializa_em.dnome = 'ciencia da computao') : g.orientado_por in departamentocc.trabalha_em;

Frmula 7: Q11: Responde seguinte pergunta: jeremy se especializa em ciencias da computao? Q12: responde pergunta Todos os alunos de cincia da computao so orientados por professores do departamento de cincia da computao ? Fonte: ELMASRI, 2005. Pode ser observado na consulta Q12 a herana de atributos, relacionamentos e operaes aplicada em consultas. Seja s um interator que percorre grad_aluno, pode se escrever s.especializa_em porque o relacionamento especializa_em herdado por Grad_Aluno de Aluno via Extends. Para finalizar, ser mostrado o quantificador exists, representado na consulta Q13, respondendo a seguinte pergunta: Algum aluno de ciencia da computao possui mdc (mdia das disciplinas cursadas) igual a 4.0 ?. Tambm possvel notar a operao mdc herdada da classe Grad_Aluno de Aluno via Extends.
Q13 : exists g in (select s from s in grad_aluno where s.especializa_em.dnome = 'ciencia da computacao'; : g.mdc = 4;

Frmula 8: Q13: respondendo a seguinte pergunta: Algum aluno de ciencia da computao possui mdc (mdia das disciplinas cursadas) igual a 4.0? Fonte: ELMASRI, 2005. Podem existir casos de recuperar o i-simo, do primeiro e do ltimo elemento, ou extrair uma subcoleo e concatenar duas listas. Observe a consulta Q14:
Q14: first (select struct (professor : f.nome.unome, salario : f.salario) from f in professor order by f.salario desc)

Frmula 9: Q14: operador first em uma coleo list que contm os salrios dos professores em ordem decrescente de salrio Fonte: ELMASRI, 2005. A OQL 14 mostra o operador first em uma coleo list que contm os salrios dos professores em ordem decrescente de salrio. Ento, o primeiro elemento dessa lista ordenada contm o professor com o maior salrio. Neste caso, o resultado mostra um membro da faculdade que ganha o maior salrio. Esta consulta Q15 recupera os trs melhores alunos que se especializam em cincia da computao, considerando o mdc;
Q15: (select struct (sobrenome : s.nome.unome, primeiro_nome: s.nome.pnome, mdc: s.mdc) from s in departamentocc.forma_especialistas order by mdc desc) [0:2];

72

Formula 10: Q15: recupera os trs melhores alunos que se especializam em cincia da computao, considerando o mdc Fonte: ELMASRI, 2005. Essa consulta select-from-order-by retorna uma lista de alunos de cincia da computao, ordenados por mdc em ordem descendente. Sendo que o primeiro elemento de uma coleo possui ndice 0, de maneira que a expresso [0:2] retorna uma lista contendo o primeiro, segundo, e o terceiro elemento. A clusula group by da OQL, bem parecida com da SQL, s que ela fornece uma referncia explcita coleo de objetos em cada grupo ou partio. Observe a Q16:
Q16 : select struct (nomedepto, numero_de_especialistas : count (partition)) from s in alunos group by nomedepto : s.especializa_em.dnome;

Frmula 11: Q16: Operador de agrupamento. Retorna o nmero de alunos em cada departamento Fonte: ELMASRI, 2005. O resultado do tipo set<struct> (nomedepto: string, partition: bag <struct> (s:Aluno)>)>, que contm uma estrutura para cada grupo partition com dois componentes: o valor do atributo de agrupamento (nomedepto) e a bag de objetos de aluno no grupo (partition). A clusula select retorna o atributo de agrupamento (nome) e a bag de objetos de aluno no grupo (partition). A clusula de select retorna o atributo de agrupamento (nome do departamento) e uma contagem do nmero de elementos em cada partio (ou seja, o nmero de alunos em cada departamento), na qual partition a palavra-chave utilizada para se referir a cada partio. Concluso: possvel implementar um sistema de complexo usando um SGBD Orientado a Objetos. A manipulao de objetos nativamente, aumenta a performance e os ganhos de desempenho de linguagens orientadas a objeto como o Java e as linguagens da plataforma .NET. Permite maior desempenho e reduo no tempo de desenvolvimento do software, j que no necessrio traduzir o modelo orientado a objeto para um modelo relacional, eliminando a complexidade extra e a perda de performance com a converso para outros formatos como SQL. Uma outra vantagem desse banco de no precisar de um DBA, pois sua administrao de responsabilidade do prprio analista de sistemas. Por ser uma tecnologia nova, muitas empresas preferem no arriscar, pois o modelo relacional ainda muito empregado nos dias atuais. Migrar de uma tecnologia bem difundida no mercado para uma que est apenas comeando seria muito arriscado. Essa uma das desvantagens do BD OO. O que ocasiona poucas aplicaes nessa nova tecnologia. Muitos ainda no confiam na sua integridade. medida que a complexidade for aumentando, as empresas vo cada vez mais buscar por alternativas que consigam adequar s suas necessidades. Notas sobre a autoria: Este captulo foi baseado, principalmente, no artigo BANCO DE DADOS ORIENTADO A OBJETOS: UMA REALIDADE cujos autores so ALAN CARVALHO GALANTE, Msc, ELVIS LEONARDO RANGEL e FLVIO CAMILO.

XI.6. ATIVIDADE XI
Passo 1: Cite as principais vantagens de um banco de dados OO:

73

Passo 2: Cite as principais desvantagens de um banco de dados OO:

74

UNIDADE XII.

TECNOLOGIAS EMERGENTES

XII.1. DATA WAREHOUSE


Data WareHouse Pode ser traduzido como depsito de dados. Sua funo principal o armazenamento de informaes de um banco de dados referente a uma ou mais atividades de uma empresa de forma consolidada, voltada tomada de decises. como um agrupamento inteligente de dados de uma mesma fonte, como: origem, formato, nomes, tipo de negcio, regras, conexes entre outros. Este princpio muito discutido quando relacionado a BI (Business Intelligence). Tudo isso favorece um resultado completo ao usurio, sem a necessidade de executar vrias consultas (relatrios), cruza-las e finalmente chegar a um resultado. Em Data Warehouse os relatrios so exibidos dinamicamente de acordo com a necessidade focando pontos estratgicos. Seu objetivo trabalhar com uma grande quantidade de informao e principalmente dados histricos. Estamos falando de sistemas transacionais (OLTP), que, de uma forma bem ampla, so sistemas responsveis por registrar todos os acontecimentos de uma organizao. Resumindo, so os acontecimentos histricos que nos levam a uma melhor tomada de deciso e preveno de eventos futuros. Esses dados esto no Data Warehouse. Por definio esses dados armazenados no mudam, exatamente por serem dados histricos, salvo quando necessrio executar correes em alguma informao especfica. Um detalhe importante que esses dados esto disponveis somente para consulta. Uma base modificvel deixa de ser uma Data Warehouse. O que faz a leitura dessa base histrica e inaltervel chamado de OLAP, nada mais do que um processador das informaes contidas na Data Warehouse. atravs dele que o usurio consegue visualizar os resultados palpveis atravs de relatrios consistentes e inteligentes (a possibilidade de tomada de deciso descrita acima). O assunto DW constantemente tratado na literatura devido a sua importncia estratgica dentro da empresa, na medida em que proporciona a tomada de deciso apoiada em dados confiveis e de fcil acesso. "H dcadas, as empresas tem sistematicamente coletado dados operacionais atravs de seus sistemas OLTP (Online Transaction Processing Systems). Mas na maioria dos casos, no houve preocupao com a integrao entre as fontes de dados e com o tratamento dos dados histricos". Por outro lado, a metodologia e os mecanismos utilizados em projetos de interface Homem/Mquina eram limitados a terminais orientados a caracteres at o surgimento das GUI (Interfaces grficas). Alm da interface grfica, novas tecnologias orientadas a objeto como ActiveX e OLE disponibilizaram novos e poderosos recursos para a construo de interfaces HM. A tecnologia de software componente interopervel apresenta os componentes como objetos distribudos que suportam a compatibilidade com interfaces binrias de intercomunicao. A chave para o software componente definir as interfaces entre os componentes e deixar o construtor do componente escolher o melhor caminho para constru-lo de acordo. Desta forma, OLE (Object Linking and Embeding) um recurso importante para o projeto e implementao de interfaces, pois permite a utilizao de objetos no relacionados, que trocam informaes sem terem sido explicitamente programados para suportar uns aos outros. "A interface ser humano-computador, normalmente chamada interface com o usurio, a porta de entrada para uma aplicao de software interativa". O valor de um DW est na qualidade das decises que ele suporta. Ferramentas poderosas de anlise de informaes nas reas de OLAP

75

(Online Analytical Processing) e Data Mining, quando incorporadas a uma arquitetura de DW, aumentam a competitividade das empresas.

Figura 7 Ambiente de Data Warehouse

XII.2. DATA MART


Data Mart (entreposto ou bazar de dados) sub-conjunto de dados de um Data warehouse (armazm de dados). Geralmente so dados referentes a um assunto em especial (ex: Vendas, Estoque, Controladoria) ou diferentes nveis de sumarizao (ex: Vendas Anual, Vendas Mensal, Vendas 5 anos), que focalizam uma ou mais reas especficas. Seus dados so obtidos do DW, desnormalizados e indexados para suportar intensa pesquisa. Data marts extraem e ajustam pores de DWs aos requisitos especficos de grupos/departamentos. As questes de planejamento, projeto e implementao so as mesmas encontradas em qualquer fase da implementao de um DW, pois uma parte dos especialistas argumenta que o DW uma evoluo natural de um Data Mart que comeou localizado e cresceu para atender um escopo maior. Essa viso tem defesa menos tcnica e mais intuitiva do que sua contra-parte: o Data Mart criado a posteriori do DW, pois ele seria montado com dados extrados do DW para atender especificamente um setor da organizao. Numa viso comparativa dos dados, onde consideramos os quesitos escopo, integrao, tempo, agregao, anlise e dados volteis, percebemos que a diferena est no escopo, pois enquanto o DW feito para atender uma empresa como um todo, o data mart criado para atender um sub-conjunto da empresa. Repare que atender um sub-conjunto da empresa pode significar reunir dados de outros setores, j que, na prtica, raramente um nico setor possui ou gera toda informao que precisa. Vem dessa observao a defesa da tese de que o Data Mart construdo aps o DW. No se pode dizer que um Data warehouse um conjunto de Data Marts. Seria o mesmo que dizer que o armazm geral de um supermercado, onde todos os itens vo antes de seguir para as lojas, o agrupamento de supermercados.

76

XII.3. OLAP
OLAP On line analytical processing (Processamento analtico on-line) designa uma ferramenta que oferece um mtodo de acessar, visualizar e analisar uma gama de dados corporativos com alta flexibilidade e performance, visando oferecer relatrios gerenciais que serviro como instrumento de apoio a decises corporativas. Ela se baseia no uso de dados consolidados que sero armazenados para criao futura de cubos e posterior anlise deles. Tais cubos armazenam valores quantitativos ou medidas, que, por sua vez, so identificadas por duas ou mais categorias descritivas denominadas dimenses, compondo a estrutura do cubo. A utilizao desses cubos proporciona uma anlise multidimensional das informaes, ou seja, permite que um mesmo fato seja visto de diferentes ngulos. Por exemplo, um cubo que contenha informaes sobre vendas de uma empresa pode ser composto de diversas dimenses, como tempo, regio, produto, cliente e medidas (valor de venda, unidades vendidas, custos, margem, etc). Cada dimenso ainda pode ser subdividida em nveis. No caso, a dimenso regio poderia conter os nveis pas, regio, estado e cidade. Ficam, assim, garantidas pesquisas complexas e anlises comparativas. A ferramenta OLAP tem a capacidade de efetuar algumas operaes que acabam tornando-se caractersticas desse tipo de recurso, as quais so timos mecanismos de agilizao e flexibilizao de consultas. So elas drill across, drill down, drill ip, drill throught e sice and dice, esta ltima responsvel por modificar a posio de uma informao, trocar linhas por coluna, facilitando a compreenso dos usurios, girando o cubo sempre que houver necessidade. Caractersticas da anlise OLAP: Drill Across: ocorre quando o usurio pula um nvel intermedirio dentro de uma mesma dimenso. Por exemplo: a dimenso tempo composta por ano, semestre, trimestre, ms e dia. O usurio estar executando um Drill Across quando ele passar de ano direto para semestre ou ms. Drill Down: ocorre quando o usurio aumenta o nvel de detalhe da informao, diminuindo o grau de granularidade. Drill Up: o contrrio do Drill Down, ele ocorre quando o usurio aumenta o grau de granularidade, diminuindo o nvel de detalhamento da informao. Drill Throught: quando o usurio passa de uma informao contida em uma dimenso para uma outra. Por exemplo: Estou na dimenso de tempo e no prximo passo comeo a analisar a informao por regio. Slice and Dice: uma das principais caractersticas de uma ferramenta OLAP. Como a ferramenta OLAP recupera o microcubo, surgiu a necessidade de criar um mdulo que convencionou-se de Slice and Dice para ficar responsvel por trabalhar esta informao. Ele serve para modificar a posio de uma informao, alterar linhas por colunas de maneira a facilitar a compreenso dos usurios e girar o cubo sempre que tiver necessidade. Alertas: so utilizados para indicar situaes de destaque em elementos dos relatrios, baseados em condies envolvendo objetos e variveis. Servem para indicar valores mediante condies, mas no para isolar dados pelas mesmas. Ranking: permite agrupar resultados por ordem de maiores / menores, baseado em objetos numricos (Measures). Esta opo impacta somente uma tabela direcionada (relatrio) no afetando a pesquisa (Query).

77

Filtros: Os dados selecionados por uma Query podem ser submetidos a condies para a leitura na fonte de dados. Os dados j recuperados pelo usurio podem ser novamente filtrados para facilitar anlises diretamente no documento. Sorts: servem para ordenar uma informao. Esta ordenao pode ser customizada, crescente ou decrescente. Breaks: servem para separar o relatrio em grupos de informaes (blocos). Por exemplo: O usurio tem a necessidade de visualizar a informao por cidades, ento ele deve solicitar um Break. Aps esta ao ter sido executada, automaticamente o relatrio ser agrupado por cidades, somando os valores mensurveis por cidades. XII.3.1. OLAP com IBExpert

O IBExpert oferece uma ferramenta OLAP para ser usada com os resultados de qualquer Query que tenha sido executada dentro da IDE do IBExpert. A figura e cdigo abaixo representa uma visualizao no cubo de deciso, baseada no resultado da Query executada. Para acessar a ferramenta, basta executar qualquer query, e na tela de apresentao do resulta, clicar no boto com o cone de um cubo, na barra de botes.
select cli.customer, c.country, c.currency, vend.total_value, vend.order_date from customer cli inner join country c on (cli.country = c.country) inner join sales vend on (cli.cust_no = vend.cust_no)

Figura 8 OLAP com IBExpert

78

Figura 9 Grfico OLAP - IBExpert

Atravs da ferramenta, possvel configurar dinamicamente o cubo, invertendo as posies e agrupamentos dos dados, trocando linhas por colunas, etc. Com uma ferramenta deste tipo, possvel em poucos minutos extrair informaes para anlise de negcio e verificar, por exemplo, reas deficientes, etc.

XII.4. DATA MINING


Data Mining um termo em ingls que quer dizer minerao de dados e empregada como sinnimo de extrao de informaes implcitas constantes de base de dados, sendo muito usada como ferramenta de apoio a decises. Esse assunto vem ganhando ateno de muitas reas de interesse, sejam comerciais ou cientficas, pois todos os dias so armazenadas milhares de informaes em meios eletrnicos, com tendncia a esse nmero crescer exponencialmente, e as empresas em geral esto interessadas em buscar tecnologias e ferramentas que extraiam informaes teis desses dados de forma a se ter acesso a elementos valiosos que contribuiro na competitividade entre as empresas, bem como em seus resultados. Vrias tendncias, como a economia crescente baseada em servios, personalizao em massa e crescente importncia da informao que vm influenciando no aumento da importncia da informao sob o enfoque da competitividade. Apesar de essa coleta de dados e posterior anlise poder ser feita manualmente, so atividades lentas, em razo do volume de dados que cresce exponencialmente, alm de serem caras e com tendncias pessoais. Por isso, tem-se buscado utilizar outras tcnicas para a realizao dessa tarefa. A utilizao do Data mining ainda um campo pouco explorado devido ser uma concepo desconhecida e ainda requer muita pesquisa e desenvolvimento, dessa forma, um campo promissor para aqueles profissionais de tecnologia da informao que se identificam com o assunto de banco de dados e com essa rea emergente de extrao de conhecimento de dados. A utilizao de data mining busca permitir que as empresas aumentem suas operaes de marketing, de vendas e de apoio aos clientes. Basicamente os autores dividem o processo de descoberta do conhecimento utilizando a tcnica de data mining nos seguintes estgios: seleo dos dados, pr-processamento, transformao, data mining propriamente dito, interpretao e avaliao. Sendo que a fase

79

data mining se preocupa com a extrao de padres dos dados, utilizando algoritmos de procura. Grandes empresas j vm aplicando essa ferramenta como instrumento de suporte a tomada de decises, como Lojas Brasileiras, Wal-Mart, Bank of America, entre tantas outras. XII.4.1. Tarefas e tcnicas em minerao de dados

Descobrir padres e tendncias escondidos em grandes massas de dados no um processo trivial. Em minerao de dados este processo envolve o uso de diversas tarefas e tcnicas. As tarefas so classes de problemas, que foram definidas atravs de estudos na rea. As tcnicas so grupos de solues (algoritmos) para os problemas propostos nas tarefas. Cada tarefa apresenta vrias tcnicas, e algumas tcnicas podem ser utilizadas para solucionar tarefas diferentes. As classes de tarefas bsicas so: Classificao: consiste em examinar as caractersticas de um objeto (ou situao) e atribuir a ele uma classe pr-definida. Ou seja, esta tarefa objetiva a construo de modelos que permitam o agrupamento de dados em classes. Essa tarefa considerada preditiva (afirmar sobre algo que ocorrer no futuro), pois uma vez que as classes so definidas, ela pode prever automaticamente a classe de um novo dado. Por exemplo, uma populao pode ser dividida em categorias para avaliao de concesso de crdito com base em um histrico de transaes de crditos anteriores. Em seguida, uma nova pessoa pode ser enquadrada, automaticamente, em uma categoria de crdito especfica, de acordo com suas caractersticas. Associao: estuda um padro de relacionamento entre itens de dados. Por exemplo, uma anlise das transaes de compra em um supermercado pode encontrar itens que tendem a ocorrerem juntos em uma mesma compra (como caf e leite). Os resultados desta anlise podem ser teis na elaborao de catlogos e layout de prateleiras de modo que produtos a serem adquiridos na mesma compra fiquem prximos um do outro. Essa tarefa considerada descritiva, ou seja, ela usada para identificar padres em dados histricos. Clusterizao (segmentao): as informaes podem ser particionadas em classes de elementos similares. neste caso, nada informado ao sistema a respeito das classes existentes. O prprio algoritmo descobre as classes a partir das alternativas encontradas na base de dados, agrupando assim um conjunto de objetos em classes de objetos semelhantes. Por exemplo, uma populao inteira de dados sobre tratamento de uma doena pode ser dividida em grupos baseados na semelhana de efeitos colaterais produzidos; acessos a WEB realizados por um conjunto de usurios em relao a um conjunto de documentos podem ser analisados para revelar clusters ou categorias de usurios. Essa tarefa considerada descritiva. Estimativa (regresso): objetiva definir um valor (numrico) de alguma varivel desconhecida a partir dos valores de variveis conhecidas. Exemplos de aplicaes so: estimar a probabilidade de um paciente sobreviver dado o resultado de um conjunto de diagnsticos de exames; predizer quantos carros passam em determinado pedgio, tendo alguns exemplos contendo informaes como: cidades mais prximas, preo do pedgio, dia da semana, rodovia em que o pedgio est localizado, entre outros. Essa tarefa considera preditiva.

XII.5. BANCO DE DADOS ORIENTADO A DOCUMENTOS


Os Bancos de Dados Orientados a Documentos foram construdos tendo a arquitetura Web como principal referncia de implementao. Portanto, seria mais interessante armazenar e recuperar estas informaes como foram construdas. Os SGBDRs por definio trabalham com

80

tabelas e suas relaes, uma linguagem de manipulao e definio de dados, que so estruturas de tabulao de dados, fugindo do conceito dos documentos, que so estruturas livres, com dados autocontidos e autodescritivos. Os bancos orientados a documentos surgiram devido a dificuldades do SQL de se lidar com bancos de dados gigantescos e com diversos tipos de documentos. Um movimento chamado de noSQL fomentou o desenvolvimento de algumas tecnologias para ligar com bases de dados "super poderosas". Algumas iniciativas de projetos open-source criaram padres de bancos nosql como: MongoDB um banco de dados orientado a documentos de alta performance, open source e schema-free, escrito em C++ e CouchDB um banco de dados Orientado a Documentos que funciona bem com a linguagem Ruby. Grandes empresas tambm criaram suas tecnologias para melhorar os resultados de bancos relacionais tradicionais ou orientados a objetos: Google Bigtable - Usado para armazenar bases de dados com n petabytes de dados e muito rpido. Armazenamento em coluna e no em linhas com os bancos relacionais. Amazon Dynamo (Sistema de armazenamento distribudo com processamento em cluster) Hadoop (Pataforma Java para aplicaes distribudas criada pelo Yahoo). O Facebook tambm usa esta plataforma. Cassandra (Criado pelo Facebook baseado no Dynamo e Bigtable) Estas tecnologias foram desenvolvidas para atender a alta demanda de consultas, volumes de dados e principalmente para garantir melhor disponibilidade. A principal caracterstica destes bancos a implementao de diversos algoritmos de indexao/busca que permita alta performance mesmo com grandes volumes de dados e diversos tipos de documentos. XII.5.1. Comparativo Relacional e Orientado a Documentos

Modelagem de Dados: Os BDODs utilizam o conceito de dados e documentos autocontidos e autodescritivos, isso implica que o documento em si j define como ele deve ser apresentado e o significado dos dados em cuja sua estrutura esto armazenados. Os autores explicam que o conceito de dados autocontidos ajudam a entender como se d a modelagem orientada a documentos e utilizam o exemplo de uma nota fiscal para mostrar como funcionam os documentos no mundo real. Em um documento fiscal, todas as informaes sobre uma transao j esto l contidas: nome do tomador do servio, dados do prestador do servio, data de prestao, servios efetuados, entre outras. No h nenhuma referncia abstrata para um outro pedao de papel que indique o nome do prestador do servio ou o nome os itens que compem aquela nota fiscal. Mesmo assim, esta a forma como os dados so armazenados em um banco de dados relacional: cada nota fiscal gravada em uma tabela tal que suas tuplas referenciem outras tuplas em outras tabelas, onde teramos uma tupla para as informaes do prestador de servio, uma para o tomador do servio, outra para cada item cobrado e assim por diante. Os autores deixam claro que muitas vezes a forma como o modelo deve ser projetado, de acordo com seu paradigma, muitas vezes no refletem a forma como um desenvolvedor gostaria de ter seus dados armazenados. A forma como os dados so modelados em BDODs permitem que haja redundncia e inconsistncia dos dados, sem que haja nenhuma camada semntica para permitir o acesso a uma nica verso de um dado.

81

H ainda, outra forma de modelagem de dados baseada em: uma pilha de cartes de visita. Da mesma forma que uma nota fiscal, um carto de visita contm todas as informaes importantes em um nico documento. A maioria dos cartes de visita contm as mesmas informaes: a identificao de uma pessoa, sua afiliao e informaes de contato. A diferena principal que o carto de uma pessoa A pode conter o nmero do seu telefone celular, enquanto de uma pessoa B, somente seja informado um telefone fixo. Como a pessoa B no informou o nmero de um telefone celular, ela no tem a necessidade de tornar isso explcito, escrevendo no carto algo como Telefone Celular: nenhum. Ao invs, por simplesmente omitir esta informao, a pessoa j est declarando que no possui um contato deste tipo disponvel. Observa-se logo, que documentos do mundo real tendem a variar de forma similar na semntica dos dados, ou seja, o tipo de informao que estes documentos apresentam. Porm, a sintaxe com a qual as informaes so apresentadas, ou seja, sua estrutura, pode variar enormemente. Em face ao exposto, conclui-se que enquanto num modelo relacional tradicional necessrio que os dados estejam modelados antes de serem utilizados, em um BDOD livre de esquema, os documentos esto prontos para agregarem informaes aps serem criados, exatamente da mesma forma como feita com os documentos do mundo real. Desta forma, os documentos esto preparados para a evoluo natural dos dados. Esta evoluo pode ser exemplificada quando uma pessoa com um carto de visitas risca um nmero desatualizado e escreve a informao mais atual, evoluindo os dados do documento. Estado Global de Recursos: Durante o processo de modelagem relacional, uma das premissas a identificao nica de registros. A chave natural a coleo de colunas que identificam uma tupla como nica dentro de uma tabela e que uma forma de facilitar a criao de chaves nicas em uma tupla, ao invs da utilizao de chaves naturais est na atribuio de um identificador numrico nico para cada tupla. A maioria dos bancos de dados relacionais prov estruturas chamadas de sequences, que podem atribuir automaticamente estes identificadores numricos a uma tupla. O principal problema das sequences que elas representam um estado global compartilhado, ou seja, a fim de atribuir um identificador numrico para uma tupla, a obteno do valor desta entidade deve ser realizada de forma seqencial, com um nico acesso por vez. Isso se torna um problema quando h dois bancos de dados em redes distintas que necessitam realizar uma atualizao concorrente de dados, pois no h uma forma de ambos os bancos saber em qual ser o prximo valor a ser atribudo. Surge ento o conceito que em uma arquitetura sem nada compartilhado (shared-nothing architecture) no h um estado ou valor prximo, pelo fato que nenhum estado global armazenado entre os bancos, ou seja, cada instncia toma decises baseadas somente no seu estado atual. Para contornar o problema das sequences, os BDODs podem utilizar o conceito de Universally Unique Identifiers (Identificadores nicos Universais, ou somente UUID), onde a possibilidade de acidentalmente utilizar um mesmo identificador que outro banco de dados efetivamente zero. Os UUIDs so atribudos como identificadores do documento, que devem ser nicos dentro de um BDOD. Caso o usurio ache necessrio atribuir uma chave natural a um documento, ele deve utilizar campos especficos e armazen-los dentro do documento. No que concerne a melhorias em relao aos bancos de dado relacionais, o conceito de UUID no apresenta muita utilidade. O importante entender que em BDODs no ser necessrio consultar os documentos atravs de um identificador, j que estes oferecem mtodos avanados de agrupamento e filtragem de documentos baseado em seu contedo, atravs das views e do MapReduce. Um pouco sobre CouchDB:

82

O CouchDB um sistema distribudo, acessvel atravs de uma API RESTful, realiza o armazenamento versionado de objetos que utiliza a abstrao de documentos, disponibiliza uma forma de agregar e consultar dados atravs do MapReduce e replica seus dados de forma incremental, bi-direcional e multi-master, utilizando o MVCC, um algoritmo de consenso de conflitos, onde os dados esto sujeitos a consistncia eventual em cada n. O projeto Apache CouchDB ainda est nos seus estgios iniciais e a verso mais atual do software (denominada 0.9) ainda considerada alfa (software que ainda no est pronto para produo). Apesar disso, aplicaes como wikis, blogs, fruns de discusso e sistemas de gerenciamento de documentos tm evitado a utilizao de SGBDRs a fim de tornar-se cada vez mais eficientes no que concerne ao gerenciamento de reviso de documentos e a contnua mudana de requisitos de esquema de dados, e utilizam o CouchDB em suas aplicaes. Concluso Bancos de Dados Relacionais definem uma estrutura rgida a fim de prover a manuteno de consistncia de dados para uma aplicao. Os BDODs oferecem uma nova forma de armazenamento dos dados, referenciada como livre de esquema, por permitir o armazenamento de dados de forma semi-estruturada, ainda fornecendo mecanismos de tornar estes dados acessveis e manipulveis, sendo construdos especificamente no contexto da Web. Em despeito a sua abordagem diferenciada em relao ao armazenamento, consulta e distribuio de dados, os BDODs no substituem os SGBDRs, apenas realizam tarefas especficas de forma mais eficiente, como o armazenamento versionado de objetos.

83

XII.6. ATIVIDADE XII


Passo 1: Utilize o IBExpert verso Trial para testar o recurso de OLAP e descreva abaixo os passos necessrios para realizar Slice and dice:

84

REFERNCIAS ELMASRI, R. E.; NAVATHE S. Sistemas de Banco de Dados. 6 ed., So Paulo: Pearson Prentice Hall, 2011. DATE, C. J. Introduo a sistemas de banco de dados. 7 ed. So Paulo: Campus, 2000. www.devmedia.com/br acessado em 01/12/2009 www.firebase.com.br acessado em 03/01/2010 CANTU, Carlos Henrique. Firebird Essencial. Rio de Janeiro: Editora Cincia Moderna Ltda, 2005. CANTU, Carlos Henrique. Firebird: O banco de dados do novo milnio. Rio de Janeiro: Editora Cincia Moderna Ltda, 2006. WATSON, John; BERSINIC, Damir. Oracle Database 10g: Certificao OCP: Guia Completo para o Exame. Rio de Janeiro: Editora Alta Books, 2006. THE POSTGRESQL GLOBAL DEVELOPMENT GROUP. Documentao do PostgreSQL 8.0.0. Rio de Janeiro, 2005. MySQL-AB. MySQL Technical Reference for Version 5.1 Including MySQL Cluster NDB 6.X/7.X Reference Guide, 2011. TODD, Bill. Introduo a Stored Procedures e Triggers no Firebird. Artigo, 2002. http://www.comunidade-firebird.org/modules.php?name=Downloads&d_op=getit&lid=43 acessado em 09/01/2010. ALAN, C. Galante et al. Banco de dados Orientado a Objetos: Uma realidade. Artigo.

Você também pode gostar