TECNOLOGIA EM ANLISE E DESENVOLVIMENTO DE SISTEMAS
PROGRAMAO EM BANCO DE DADOS
TUTOR PRESENCIAL: MAURCIO FAZOLI TUTOR A DISTNCIA: JOO ALEXANDRE BALDOVINOTTI
HILTON JOS DE CARVALHO RA: 6791394243 MARCOS DIAS MIRANDA RA: 7707667853 MARCIDIO JOS RANIERI CARDOSO RA: 7536615802 ARMANDO SUGUIMOTO RA: 7984728530 JUSCELINO VARGAS DOS SANTOS JNIOR RA: 7308195992
SO PAULO / SP 18 de Setembro de 2014 INTRODUO
A empresa de desenvolvimento de software chamada Microsys XYZ S.A. est projetando um novo produto a ser lanado. Este novo software chamado SIG Sistema Integrado de Gerenciamento 1.0 ir atender a diversas empresas que precisam de um sistema para controlar suas operaes de vendas, controle de estoque, funcionrios e demais atividades.
As consultas e outras atividades relacionadas a Banco de Dados devem ser realizadas com o melhor desempenho possvel, pois as empresas que utilizaro o SIG possuem grandes volumes de dados. A Microsys XYZ S.A. tambm necessita de consultoria em algumas reas mais abrangentes que podem fazer parte do projeto como Banco de Dados Distribudos e Data Warehouse.
Devido a esses requisitos a Microsys XYZ S.A. est recrutando uma equipe para trabalhar na base de dados do SIG.
Sumrio
Objetivo do Desafio .......................................................................................................... 4 1. Consultas SQL e DML .................................................................................................. 5 1.1 Consultas e Filtros 1.2 Comandos DML 2. Tutorial Procedures e Trigger ..................................................................................... 10 2.1 Procedures 2.2 Triggers 3. Comandos para criao das procedures para o sistema SIG ...................................... 15 3.1 Procedure ret_comissao_funcionario 3.2 Procedure inc_item_venda 4. Comandos para criao das trigger para o sistema SIG. ............................................ 17 4.1 Trigger atualiza_valor_venda 5. Otimizao de Consultas e Gerenciamento de Transaes ........................................ 18 5.1 Otimizao de Consultas 5.2 Gerenciamento de Transao 6. Banco de Dados Distribudos e Data Warehouse ....................................................... 21 6.1 Banco de Dados Distribudos 6.2 Data Warehouse e Data Mining
4
Objetivo do Desafio
Elaborar de um projeto de programao de banco de dados para o SIG, que deve abordar as diversas fases de documentao, gerao de scripts para inserir, excluir e consulta de dados, otimizao de consulta, gerao de procedures e triggers e estudos e relatrios sobre Data Warehouse e Data Mining.
5
1. Consultas SQL e DML
Para realizar as atividades relacionadas ao banco de dados do SIG, devem-se utilizar as tabelas mostradas no diagrama apresentado na figura 1 a seguir:
1.1 Consultas e Filtros
Consulta Clientes: Exibir os campos: nome, cidade, UF, idade, gnero. Os registros devem estar ordenados por nome. Filtros da consulta: cidade.
SELECT nome, cidade, uf, DATEDIFF( '2014-09-14', datanascimento ) /365 AS Idade, genero FROM cliente WHERE cidade = 'So Paulo' ORDER BY nome
6
Consulta Funcionrios: Exibir os campos: nome, cargo, idade, data de admisso, valor da comisso. Os registros devem estar ordenados por cargo. Filtros da consulta: ativo.
SELECT nome, cargo, DATEDIFF( '2014-09-14', datanascimento ) /365 AS Idade, dataadmissao, comissao FROM funcionario WHERE ativo =1 ORDER BY cargo
Consulta Vendas por Funcionrio: Exibir os campos: nome do funcionrio, valor da venda. Os registros devem estar ordenados por valor da venda, sendo os maiores valores exibidos primeiro. Filtros da consulta: dia da venda.
SELECT f.nome, v.valortotal FROM funcionario f, venda v WHERE f.idfuncionario = v.idvenda ORDER BY v.valortotal DESC
Consulta Vendas por Produtos: Exibir os campos: descrio do produto, preo de venda do produto, valor total de vendas para produto. Os registros devem estar 7
ordenados pelo valor total das vendas, sendo os valores maiores nos primeiros registros. Filtros da consulta: ms em que foram realizadas as vendas.
SELECT DISTINCT p.descricao, p.precovenda, v.data FROM produto p, venda v WHERE MONTH( v.data ) =9 ORDER BY p.precovenda DESC
Consulta Vendas por Cliente2: Exibir o nome do cliente, cidade, quantidade total de vendas, valor total de vendas. A consulta deve exibir todos os clientes, inclusive aqueles que no possuem registros de venda. Os registros devem estar ordenados por nome e cidade. Filtros da consulta: ms em que foram realizadas as vendas.
SELECT DISTINCT c.nome, c.cidade, v.valortotal, v.clientevenda AS Total FROM cliente c, venda v WHERE c.idcliente = v.idvenda AND MONTH( v.data ) =9 ORDER BY c.nome, c.cidade ASC
8
1.2 Comandos DML
AO/TABELA DML DML INSERIR REGISTRO TABELA INSERT INTO TABELA (Campo) VALUES (Valor); APAGAR REGISTRO TABELA DELETE FROM TABELA WHERE "condio"; ALTERAR REGISTRO TABELA UPDATE TABELA SET "campo" = [novo valor] WHERE "condio";
UPDATE FUNCIONARIO SET COMISSAO = 200.00 WHERE IDFUNCIONARIO = 1;
Tabela PRODUTO
INSERIR REGISTRO
INSERT INTO PRODUTO (IDPRODUTO, DESCRICAO, PRECOVENDA, PRECOCOMPRA, MARCA, TIPO) VALUES (1, Produto 1, 100.00, 80.00, Marca 1, Tipo 1
APAGAR REGISTRO
DELETE FROM PRODUTO WHERE IDPRODUTO = 1;
ALTERAR REGISTRO 10
UPDATE PRODUTO SET MARCA = Marca 2 WHERE IDPRODUTO = 1;
2. Tutorial Procedures e Trigger
2.1 Procedures
Stored Procedure um conjunto de comandos, ao qual atribudo um nome. Este conjunto fica armazenado no Banco de Dados e pode ser chamado a qualquer momento tanto pelo SGBD (sistema Gerenciador de Banco de Dados) quanto por um sistema que faz interface com o mesmo.
A utilizao de Stored Procedures uma tcnica eficiente de executarmos operaes reetitivas. Ao invs de digitar os comandos cada vez que determinada operao necessite ser executada, criamos um Stored Procedure e o chamamos. Em um Stored Procedure tambm podemos ter estruturas de controle e deciso, tpicas das linguagens de programao. Em termos de desenvolvimento de aplicaes, tambm temos vantagnes com a utilizao de Stored Procedures.
Imaginemos que estamos criando uma aplicao em Delphi e que a mesma acesse dados de um Banco de Dados do SQL Server 2000. Sem a utilizao de Stored Procedures, a aplicao deveria enviar o conjunto de comandos T-SQL necessrios execuo de cada tarefa. Imagine ainda ter que enviar os comandos em vrias partes do programa. Qualquer alterao necessria demandaria uma reviso em todas as partes do programa que enviam estes comandos.
Uma soluo para o problema acima seria isolar e fechar os comandos T-SQL em uma funo e cham-la quando for necessrio. O problema que a cada alterao o programa dever ser recompilado e, numa empresa com centenas de computadores conectados em rede, demandaria numa reinstalao em cada mquina. A tarefa de manuteno da aplicao atualizada em cada mquina torna-se bastante complicada.
Se ao invs de uma funo interna da aplicao, criarmos um Stored Procedure e fizermos com que o programa chame-o para executar os comandos necessrios, teremos mais facilidades no momento de atualizar a aplicao. Pois, neste caso, bastaria 11
atualizar o Stored Procedure e pronto, a aplicao j passaria a ter a verso atualizada, evitando uma reinstalao em centenas de estaes de trabalho.
Agora que j ponderamos as vantagens da utilizao dos Stored Procedures, vamos parte boa da coluna... A prtica.
Voc pode criar uma Stored Procedure em linha de comando no Query Analizer com a seguinte sintaxe:
Somente podero executar o comando CREATE STORED PROCEDURE, usurios que so membros da role de servidor sysadmin ou das roles de Banco de Dados db_owner e db_ddladmin;
Em um Stored Procedure, podemos incluir qualquer comando T-SQL, com exceo dos seguintes: CREATE PROCEDURE, CREATE DEFAULT, CREATE RULE, CREATE TRIGGER E CREATE VIEW;
Em um Stored Procedure podemos referenciar tabelas, Views, outras Stored Procedures e tabelas temporrias.
Vamos a um exemplo simples. Exemplo: Criar um Stored Procedure que retorna todos os registros da tabela order, em que o campo ShipCountry igual a London. Gravar o Stored Procedure com o nome usp_PedidosLondon. O mesmo ser criado no Banco de Dados Northwind da instncia SERVIDORSRVINST01.
USE Northwind GO CREATE PROCEDURE usp_PedidosLondon 12
AS SELECT * FROM Orders WHERE ShipCity = 'London'
O comando executado e a seguinte mensagem exibida: The command(s) completed successfully. Agora podemos executar o Stored Procedure sempre que for necessrio. Para execut- lo, execute o comando:
exec usp_PedidosLondos
O Stored Procedure executado, os comandos que o compem so executados e os resultados, retornados (somente os pedidos para London). Criando Stored Procedures com parmetros de Entrada A utilizao de parmetros de entrada permite a criao de Stored Procedures mais flexveis. Voc pode inclusive criar Stored Procedures com comandos de Insero (INSERT), Alterao (UPDATE) e Deleo (DELETE). Vamos a um exemplo: EXEMPLO: Se no case anterior, utilizasse-mos um parmetro para determinar o Pas ao invs de fechar-mos a opo em um s.
USE Northwind GO CREATE PROCEDURE us_Pedidos_Pais @pais nvarchar(15) AS
SELECT * FROM Orders WHERE ShipCity = @ pais
Para executar o Stored Procedure usp_Pedidos_Pais, passando Brazil como Parmetro, utilizamos o seguinte comando:
Execute usp_Pedidos_pais "Brazil"
Percebam que nosso Stored Procedure se tornou bem mais flexvel, agora podemos pesquisar por qualquer pas dentro da tabela Orders, de acordo com o parmetro passado. Utilizando Estruturas de Deciso em um Stored Procedure 13
A linguagem que utilizamos para os comandos de um Stored Procedure a linguagem T-SQL. A seguir vou apresentar as principais estruturas de controle disponveis. A Estrutura IF...ELSE
Este o velho conhecido comando IF existente em qualquer linguagem:
IF teste_booleano Comandos_Se_Verdadeiro Else Comandos_Se_Falso
SET @TotPed1 = (SELECT Count(OrderID) FROM Orders WHERE ShipCountry=@pais1)
SET @TotPed2 = (SELECT Count(OrderID) FROM Orders WHERE ShipCountry=@pais2)
/* EXECUTO O TESTE, UTILIZANDO IF...ELSE */
IF (@TotPed1) > (@TotPed2)
BEGIN
SET @ mensagem1 = 'O Nmero de pedidos do primeiro pas maior'
PRINT(@mensagem1)
14
END
ELSE
IF (@TotPed1) < (@TotPed2)
BEGIN
SET @mensagem2 = 'O nmero de pedidos do segundo pas maior'
PRINT(@mensagem2)
END
ELSE
BEGIN
SET @mensagem3 = 'O nmero de pedidos dos dois pases igual'
PRINT(@mensagem3)
END
A Estrutura WHILE...CONTINUE Esta esturura faz com que um conjunto de comandos continue sendo executado, enquanto uma determinada condio for verdadeira. A sintaxe para este comando a seguinte:
WHILE Teste BEGIN Comando1 Comando2 Comando3 ... Comando4
END
Vamos a um exemplo:
USE Northwind
GO
CREATE PROCEDURE usp_CalculaSoma
@numero int
15
AS
/*CRIA AS VARIVEIS PARA UM CONTROLE DE LAO INICIALIZA A VARIVEL COM O VALOR 1 */
DECLARE @contador int
SET @soma=0
WHILE (@contador<=numero)
BEGIN
SET @soma=@soma+@contador
INSERT INTO SomaNaturais VALUES (@contador,@soma)
SET @contador = @contador+1
END
Para executar esta Stored Procedure entre com o seguinte comando:
EXEC usp_CalculaSoma 10
2.2 Trigger
O propsito de um trigger processar sentenas SQL automaticamente ao acontecer uma ao em uma tabela. Por exemplo, se um representante de atendimento ao cliente acessar os dados financeiros de uma pessoa, um trigger pode registrar a consulta. As empresas os usam para as auditorias de acesso a informao privada, o que permite flagrar empregados inescrupulosos que usam esses dados para cometer fraudes. Os triggers tambm so usados para manter a integridade dos dados. Por exemplo, se um cliente atualizar o nmero de telefone de uma encomenda, um trigger atualizar o nmero no registro de detalhes privados. Isso assegura a consistncia dos dados na base completa.
Clicar com o boto direito em uma tabela d ao administrador a opo de "criar um trigger". A sintaxe de um trigger a seguinte: create trigger <nome do trigger> on <nome da tabela> for <tipo de comando> as <sentenas do comando> O <nome do trigger> dado pelo administrador do banco de dados. A parte <nome da tabela> da consulta a tabela na qual ser executado o comando. O <tipo de comando> faz com 16
que o SQL Server execute o trigger depois de um comando especfico. Por exemplo, se o administrador configurar o trigger para ser executado para uma sentena "insert", as <sentenas do comando> sero executadas ao inserir um registro. Podem ser usados mltiplos triggers em uma tabela, mas muitos ao mesmo tempo podem prejudicar o desempenho. Em alguns casos, criar sentenas extras em um procedimento armazenado do SQL Server mais eficiente com os recursos do banco de dados.
o sistema que deve controlar e tomar as decises sobre o que fazer em determinadas situaes. Assim em um programa para controlar os produtos de uma empresa quando a quantidade de um produto atingir uma certa quantidade o sistema dever avisar o operador/usurio para providenciar a reposio do mesmo. Ao trabalhar com base de dados Cliente/Servidor como SQL Server, Oracle, Informix, dentre outras, podemos usar um recurso muito poderoso chamado Trigger. Um Trigger bloco de comandos Transact-SQL que automaticamente executado quando um comando INSERT, DELETE ou UPDATE for executado em uma tabela do banco de dados. Os Triggers so usados para realizar tarefas relacionadas com validaes, restries de acesso, rotinas de segurana e consistncia de dados; desta forma estes controles deixam de ser executados pela aplicao e passam a ser executados pelos Triggers em determinadas situaes: Mecanismos de validao envolvendo mltiplas tabelas Criao de contedo de uma coluna derivada de outras colunas da tabela Realizar anlise e atualizaes em outras tabelas com base em alteraes e/ou incluses da tabela atual
A criao de um Trigger envolve duas etapas:
1. Um comando SQL que vai disparar o Trigger (INSERT, DELETE, UPDATE) 2. A ao que o Trigger vai executar (Geralmente um bloco de cdigos SQL)
Como no poderia deixar de ser, existem certas limitaes na utilizao de um Trigger:
No possvel criar um Trigger para uma viso 17
O resultado da execuo de um Trigger retornado para a aplicao que o chamou. O comando WRITETEXT no ativa um Trigger O comando TRUNCATE TABLE no pode ser reconhecido por um Trigger No podemos usar em um Trigger os seguintes comandos SQL:
ALTER DATABASE, ALTER TRIGGER, ALTER PROCEDURE, ALTER TABLE, ALTER VIEW. CREATE DATABASE, CREATE INDEX, CREATE PROCEDURE, CREATE SCHEMA, CREATE TABLE, DROP DATABASE, DROP TABLE, DROP PROCEDURE, DROP TRIGGER, DROP INDEX, GRANT, LOAD DATABASE, REVOKE, RESTORE DATABASE, TRUNCATE TABLE.
Como criar um Trigger
Podemos criar um Trigger usando o comando Create Trigger do SQL Server ou atravs do Enterprise Manager. A Sintaxe de um Trigger a seguinte:
CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) { comparison_operator } column_bitmask [ ...n ] } ] sql_statement [ ...n ] } }
a. ON Table - a tabela para o qual o trigger est sendo criado b. FOR - deve ser seguido do tipo de comando que acionam o trigger c. AFTER - determina que o trigger somente ser disparado quando todas as rotinas especificadas no comando de disparo forem executadas com sucesso 18
d. INSTEAD OF - Determina que o trigger ser executado ao invs do comando de disparo do mesmo. e. [ DELETE ] [INSERT] [UPDATE] - indicam o tipo de ao que deve disparar o trigger. Quando voc for criar um Trigger dever definir: 1. O nome 2. A Tabela para o qual o Trigger ir ser criado 3. Quando o Trigger dever ser disparado 4. Os comandos que determinam qual ao o Trigger dever executar
Exemplo de Triggers:
1- O trigger abaixo ser disparado quando algum tentar incluir ou alterar dados na tabela Titles. Ele emite uma mensagem ao usurio. ( 50009 uma mensagem definida para o usurio em sysmessages.)
USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'reminder' AND type = 'TR') DROP TRIGGER reminder GO CREATE TRIGGER reminder ON titles FOR INSERT, UPDATE AS RAISERROR (50009, 16, 10) GO
3. Comandos para criao das procedures para o sistema SIG
Set v_Mes = month(v.data) Set v_ANO = year(v.data) Set v_Cod = f.idfuncionario
19
begin if (v_Cod = 0 then
begin
SELECT f.nome, f.comissao * i.valortotal /100 AS comissao FROM funcionario f, itemvenda i WHERE f.idfuncionario = i.iditemvenda end; else begin
SELECT f.nome, f.comissao * i.valortotal /100 AS comissao FROM funcionario f, itemvenda i WHERE f.idfuncionario = i.iditemvenda AND f.idfuncionario =8 end; end if; end
// DELIMITER
Resultado da consulta for se o cdigo informado for = 0:
Resultado da consulta se for informado um cdigo qualquer <> 0:
Set Cod_venda = venda.idvenda Set Cod_prod = produto.idproduto Set Qtde = venda.qtde Set Valor_unit = itemvenda.valorunitario Set Tipo = produto.tipo
begin
INSERT INTO VENDA (IDVENDA, CLIENTEVENDA, DATA, HORA, VALORTOTAL, FUNCIONARIOVENDA) SELECT v.idvenda, v.clientevenda, v.data, v.hora, i.valorunitario * i.qtde - i.valordesconto AS valortotal, v.funcionariovenda FROM venda v, itemvenda i WHERE v.idvenda = i.iditemvenda end; // DELIMITER
4. Comandos para criao das trigger para o sistema SIG
4.1 Trigger atualiza_valor_venda
// DELIMITER CREATE TRIGGER atualiza_valor_venda ON ITEMVENDA FOR INSERT,DELETE,UPDATE AS BEGIN SELECT VALORUNITARIO * QTDE AS NOVOVALOR FROM `itemvenda` FROM INSERTED UPDATE VENDA SET VALORTOTAL = NOVOVALOR END DELIMITER // 21
5. Otimizao de Consultas e Gerenciamento de Transaes
5.1 Otimizao de Consultas
A otimizao de consulta o processo de selecionar o plano de avaliao de consulta mais eficiente para uma consulta. Ento, a finalidade do otimizador de um banco de dados livrar os usurios de suas complexidades e das exigncias necessrias para se conseguir consultas de forma eficiente. Usar tcnicas para reformular consultas em outra(s) que desempenham a mesma funcionalidade, mas com tempo de resposta menor que a consulta original uma das principais caractersticas de um otimizador de consulta. O otimizador faz com que reduza o esforo manual e repetitivo de identificar e corrigir comandos de SQL realizados de maneira incorreta, causando em baixos desempenhos. Isso uma vantagem do otimizador evitando-se assim aquisio de novos hardwares mais poderosos para se alcanar ainda mais quanto ao desempenho. Por isto, um SGBD deve oferecer solues eficientes para obter dados de um banco de dados atravs de seu processador. Em se tratando de otimizao de consulta s faz sentido se falarmos em uma linguagem de alto nvel como o caso do SQL que uma linguagem de manipulao e modificao de estruturas do banco de dados. Quando uma consulta SQL realizada pelo usurio, estas so decompostas em pequenas unidades chamadas de blocos de consulta, e estas so otimizadas um bloco por vez. J em relao aos blocos aninhados esses so tratados como uma chamada de uma sub-rotina, feita uma vez por tupla mais externa. So esses blocos que sero convertidos pela lgebra relacional. O modelo relacional sem dvida uma das tecnologias de banco de dados mais utilizada no mundo. Esse modelo representado por operaes da teoria dos conjuntos como unio, produto cartesiano, interseco e diferena e por operaes especficas para banco de dados relacionais com a seleo, juno, agregao e projeo. A primeira ao que o sistema tem de executar em uma consulta traduzir a expresso em uma expresso equivalente da lgebra relacional e represent-la em uma estrutura de dados conhecida como rvore de consulta. Tendo convertido a representao em uma forma interna melhor, o otimizador deve ento decidir como avaliar a consulta transformada representada pela forma convertida. 22
Um simples bloco de consulta em SQL no aninhado possui a clusula SELECT que relaciona os atributos que representam os dados desejados da consulta, a clusula FROM relaciona as tabelas envolvidas na consulta, a clusula WHERE especifica as condies de escolha das tuplas das tabelas, a GROUP BY agrupa tuplas que possuem o mesmo valor para a lista de atributos de agrupamento em grupos e, sobre estes, so aplicados funes de agregao. Por ltimo a clusula HAVING que especifica as condies de escolha dos grupos de tuplas produzidos pela clusula GROUP BY. Uma caracterstica importante no modelo relacional que favorece seu desempenho so os catlogos que oferece informaes sobre a estrutura de dados, os tipos e formatos de armazenamento e as restries sobre os dados. Estas informaes so armazenadas na forma de tabelas e so requisitadas vrias vezes e se uma implementao no planejada do catlogo poder ocasionar um baixo desempenho no acesso aos dados.
5.2 Gerenciamento de Transaes
Uma transao uma unidade de execuo do programa que acessa e possivelmente atualiza vrios itens de dados. Normalmente, uma transao iniciada por um programa do usurio escrito em linguagem de manipulao de dados (normalmente, SQL) ou linguagem de programao (por exemplo, C++ ou Java), com acessos embutidos ao banco de dados em JDBC ou ODBC. Uma transao delimitada pelas instrues (ou chamadas de funo) na forma begin transaction e end transaction. A transao consistem em todas as operaes executadas entre o begin transaction e o end transaction. Essa coleo de etapas precisa aparecer ao usurio como uma nica unidade, indivisvel. Como uma transao indivisvel, ela executada em sua totalidade ou no executada. Assim, se uma transao comea a ser executada, mas falha por um motivo qualquer, quaisquer mudanas no banco de dados que a transao possa ter feito so desfeitas. Esse requisito mantido independentemente de a transao em si ter falhado (por exemplo, se ela dividiu por zero), de o sistema operacional ter falhado ou de o prprio computador ter deixado de operar. difcil garantir que esse requisito seja atendido, pois algumas mudanas no banco de dados ainda podem ser armazenadas somente nas variveis da memria principal da transao, enquanto outras podem ter 23
sido gravadas no banco de dados e armazenadas no disco. Essa propriedade "tudo ou nada" conhecida como atomicidade. Alm do mais, como uma transao uma nica unidade, suas aes no podem parecer estar separadas por outras operaes do banco de dados que no fazem parte da transao. Embora queiramos apresentar essa impresso das transaes em nvel de usurio, sabemos que a realidade muito diferente. At mesmo um nico comando SQL envolve muitos acessos separados ao banco de dados, e uma transao pode consistir em vrios comandos SQL. Portanto, o sistema de banco de dados precisa tomar aes especiais para garantir que as transaes operem corretamente, sem interferncia de comandos de banco de dados executando simultaneamente. Essa propriedade conhecida como isolamento. Mesmo que o sistema garanta a execuo correta de uma transao, isso tem pouco propsito se o sistema de "esquecer" da transao. Assim, as aes de uma transao precisam persistir entre as falhas. Essa propriedade conhecida como durabilidade. Devido a essas trs propriedades, as transaes so uma forma ideal de estruturar a interao com um banco de dados. Isso nos leva a impor um requisito sobre as prprias transaes. Uma transao precisa preservar a consistncia do banco de dados - se uma transao for executada atomicamente em isolado, comeando de um banco de dados consistente, o banco de dados precisa novamente estar consistente no final da transao. Esse requisito de consistncia vai alm das restries de integridade de dados (como restries de chave primria, integridade referencial, restries de verificao e outras semelhantes). Em vez disso, as transaes devero ir alm para garantir a preservao daquelas restries de consistncia dependentes da aplicao, que so muito complexas para se declarar usando as construes SQL para integridade de dados. O modo com isso feito responsabilidade do programador que codifica uma transao. Essa propriedade conhecida como consistncia. De forma mais concisa, necessrio que o sistema de banco de dados mantenha as seguintes propriedades das transaes:
Atomicidade: Todas as operaes da transao so refletidas corretamente no banco de dados, ou nenhuma delas; 24
Consistncia: A execuo de uma transao isolada (ou seja, sem qualquer outra transao executando simultaneamente) preserva a consistncia do banco de dados; Isolamento: Embora vrias transaes possam ser executadas simultaneamente, o sistema garante que cada transao no esteja ciente das outras transaes executando simultaneamente no sistema; Durabilidade: Depois que uma transao for completada com sucesso, as mudanas que ela fez no banco de dados persistem, mesmo que existam falhas no sistema.
Essas propriedades normalmente so conhecidas como propriedades ACID; o acrnimo derivado da primeira letra de cada uma das quatro propriedades.
6. Banco de Dados Distribudos e Data Warehouse
6.1 Banco de Dados Distribudos
Existem dois tipos de banco de dados distribudos, os homogneos e os heterogneos. Os homogneos so compostos pelos mesmos bancos de dados, j os heterogneos so aqueles que so compostos por mais de um tipo de banco de dados. Num banco de dados distribudos os arquivos podem estar replicados ou fragmentados, esses dois tipos podem ser encontrados ao longo de seus ns. Quando os dados se encontram replicados, existe uma cpia de cada um dos dados em cada n, tornando as bases iguais (ex: tabela de produtos de uma grande loja). J na fragmentao, os dados se encontram divididos ao longo do sistema, ou seja, a cada n existe uma base de dados diferente se olharmos de uma forma local, mas se analisarmos de uma forma global os dados so vistos de uma forma nica, pois cada n possui um catlogo que contm cada informao dos dados dos bancos adjacentes. A replicao dos dados pode se dar de maneira sncrona ou assncrona. No caso de replicao sncrona, cada transao dada como concluda quando todos os ns confirmam que a transao local foi bem sucedida. Na replicao assncrona, o n principal executa a transao enviando confirmao ao solicitante e ento encaminha a transao aos demais ns.
25
Vantagens
Os dados ficam localizados prximos aos locais de maior demanda Os dados ficam dispersos para atender a necessidade comercial;
Maior rapidez de acesso aos dados Os usurios finais costumam trabalhar apenas com um sub-conjunto dos dados da empresa, armazenado localmente;
Maior rapidez de processamento de dados Um SGBDD divide a carga de trabalho do sistema, processando dados em vrios locais;
Facilidade de ampliao possvel adicionar novos locais rede sem afetar as operaes de outros locais;
Aprimoramento das comunicaes Como os sites locais so menores e mais prximos dos clientes, promovem melhor comunicao entre os departamentos e entre os clientes e a equipe da empresa;
Custos operacionais reduzidos Do ponto de vista dos custos, mais eficiente adicionar estaes de trabalho a uma rede do que atualizar um sistema de mainframe. O trabalho de desenvolvimento feito de modo mais rpido e barato em PCs de baixo custo do que em mainframes;
Interface amigvel Os PCs e as estaes de trabalho costumam ser equipados com interface grfica de usurio (GUI) fcil de usar. A GUI simplifica o treinamento e a utilizao dos usurios finais;
Menor risco de falha em ponto nico Quando um componente dos computadores falha, o trabalho mantido por outras estaes. Os dados tambm so distribudos em vrios locais;
Independncia de processador O usurio final capaz de acessar todas as cpias disponveis dos dados e suas solicitaes so processadas por qualquer processador no local dos dados. 26
Desvantagens
Complexidade de gerenciamento e controle As aplicaes devem reconhecer a localizao dos dados e ter a capacidade de integr-los a partir de vrios locais. necessrio que os administradores tenham a capacidade de coordenar as atividades do BD, evitando sua degradao em funo de anomalias;
Dificuldade tecnolgica necessrio tratar e solucionar a integridade de dados, o gerenciamento de transaes, o controle de concorrncia, o backup, a recuperao, a otimizao de consultas, a seleo do caminho de acesso, etc;
Segurana A probabilidade de falhas de segurana aumenta quando os dados so armazenados em vrios locais. A responsabilidade do gerenciamento dos dados ser compartilhada por diferentes pessoas em diversos locais; Falta de padres No h protocolos de comunicao padronizado no nvel de BD. (Embora o TCP/IP seja, na prtica, um padro no nvel de rede, no h padronizao no nvel de aplicao). Por exemplo, diferentes fornecedores de BD empregam tcnicas diferentes e geralmente incompatveis de gerenciamento da distribuio de dados e processamento no ambiente de SGBDD;
Ampliao das necessidades de armazenamento e infraestrutura So necessrias vrias cpias de dados em diferentes locais, exigindo, assim, espao adicional de armazenamento em disco;
Aumento de custos com treinamento Os custos com treinamento costumam ser mais elevados em modelos distribudos do que em centralizados, s vezes a ponto de compensar as economias operacionais de hardware;
Custos Os BDD exigem uma infraestrutura duplicada para operar (localizao fsica, ambiente, pessoal, software, licenciamento, etc).
Cuidados com banco de dados distribudos devem ser tomados para assegurar o seguinte:
27
A distribuio transparente Usurios devem poder interagir com o sistema como se ele fosse um nico sistema lgico. Isso se aplica ao desempenho do sistema, mtodos de acesso, entre outras coisas.
Transaes so transparentes Cada transao deve manter a integridade do banco de dados dentre os mltiplos bancos de dados. Transaes devem tambm ser divididas em subtransaes, cada subtransao afetando um sistema de banco de dados.
MySQL
O MySQL permite um tipo de replicao conhecido como Master-Slave, onde temos um servidor atuando como master e um ou mais servidores atuando como slave. O master grava em um log binrio de alterao todos os comandos de atualizaes da base de dados. Desta forma, todas as alteraes ocorridas no master so imediatamente replicadas para os outros servidores slave. A replicao Master-Slave um processo assncrono, isto , poder existir um atraso de informaes entre o master e os slaves dependendo do meio de comunicao entre eles. Alm disto, como os slaves copiam as alteraes do master, todas as modificaes dos dados devem ser aplicadas ao master, caso contrrio os servidores ficaro sem sincronismo. Este processo incremental com a execuo de todas as alteraes indicadas no log binrio a partir de um determinado momento, no garante que os dados existentes antes do incio da replicao eram idnticos. Neste caso, antes de iniciar a replicao preciso sincronizar todos os servidores, colocando em todos eles uma cpia da base de dados a ser replicada. Para configurar a replicao cada servidor MySQL dever possuir um server-id nico e o master deve estar com o log binrio habilitado. Alm disto, crie um usurio no master com o privilgio FILE (3.23.x) ou REPLICATION SLAVE (4.x ou superior), para que os slaves possam se conectar a este servidor e fazer a leitura do seu log binrio. Nos slaves preciso indicar o endereo do servidos master e o usurio que ser utilizado para fazer a conexo.
28
SQL Server
A replicao um conjunto de tecnologias para copiar e distribuir dados e objetos de um banco de dados para outro e, em seguida, sincronizar entre os bancos de dados para manter a consistncia. Usando replicao, possvel distribuir dados para diferentes locais e para usurios remotos e mveis atravs de redes locais e de longa distncia, conexes discadas, conexes sem-fio e a Internet. A replicao transacional normalmente usada em cenrios de servidor para servidor que requerem alta taxa de transferncia, incluindo: melhora da escalabilidade e disponibilidade; armazenamento de dados em data warehouse e relatrios; integrao de dados de vrios sites; integrao de dados heterogneos e descarregamento de processamento em lote. A replicao de mesclagem projetada principalmente para aplicativos mveis ou de servidor distribudo que possuem possveis conflitos de dados. Os cenrios comuns incluem: troca de dados com usurios mveis; aplicativos de POS (ponto de vendas) para o consumidor e integrao de dados de vrios sites. A replicao instantnea usada para fornecer o conjunto inicial de dados para replicao transacional e de mesclagem. Ela tambm pode ser usada quando atualizaes completas de dados forem apropriadas.
Firebird
Todas as estratgias de replicao de dados requerem um mtodo para capturar as mudanas em uma base de dados replicada. No Firebird, pode ser utilizado o mecanismo de Triggers (Gatilhos), para propagar as mudanas quando elas ocorrem em uma tabela de log da base de dados para transmisso. Como a linguagem procedural da base de dados pode ser usada para estes mtodos, ela prov maior flexibilidade em decidir quais os dados sero replicados. Transmitir mudanas para replicao requer softwares que leiam os logs (registros) de mudanas e se conectem a todos os servidores de bases de dados alvo localizados em uma LAN ou WAN e aplique estas mudanas na base de dados alvo. Este software conhecido como gerenciador de replicao e devem tambm gerar logs de erros e conflitos de atualizao.
29
6.2 Data Warehouse e Data Mining
Data Warehouse
Grandes empresas tm presena em muitos lugares, cada uma delas podendo gerar um grande volume de dados. Por exemplo, grandes cadeias de revenda possuem centenas ou milhares de lojas, enquanto companhias de seguro podem ter dados de milhares de filiais locais. Alm do mais, grandes organizaes possuem uma estrutura organizacional interna bastante complexa e, por isso, diferentes dados podem estar presentes em diferentes locais ou em diferentes sistemas operacionais, ou sob diferentes esquemas. Por exemplo, os dados de problema de manufatura e os dados de reclamao do cliente podem ser armazenados em diferentes sistemas de banco de dados. As empresas frequentemente compram dados de fontes externas, como listas de discusso, usadas para promover produtos ou pontuao de crdito fornecidos por escritrios de crdito para decidir a capacidade de endividamento dos clientes. Os que tomam decises corporativas exigem o acesso a informaes de todas essas fontes. A preparao de consultas em fontes individuais desajeitada e ineficaz. Alm do mais, as fontes de dados s podem armazenar dados atuais, enquanto os que tomam decises podem precisar de acesso tambm a dados do passado; por exemplo, informaes sobre como os padres de compra mudaram no ano passado poderiam ser de grande importncia. Depsitos de dados oferecem uma soluo para esses problemas. Um depsito de dados (data warehouse) um repositrio (ou arquivo) de informaes colhidas de vrias origens, armazenadas sob um esquema unificado, em um nico local. Uma vez reunidos, os dados so armazenados por muito tempo, permitindo o acesso a dados histricos. Assim, os depsitos de dados oferecem ao usurio uma nica interface consolidada para os dados, facilitando a escrita de consultas de apoio deciso. Alm do mais, acessando informaes para apoio deciso a partir de um depsito de dados, quem toma decises pode garantir que os sistemas de processamento de transao on-line no sero afetados pela carga de trabalho de apoio deciso. A arquitetura de um depsito de dados tpico composta pela coleta de dados, o armazenamento de dados e o suporte da consulta e anlise de dados. Os depsitos de dados normalmente possuem esquemas que so projetados para anlise de dados, usando ferramentas do tipo OLAP (processamento analtico online). Assim, os dados normalmente so multidimensionais, com atributos de dimenso e 30
atributos de medida. As tabelas contendo dados multidimensionais so denominadas tabelas de fatos, e normalmente so muito grandes. Para reduzir os requisitos de armazenamento, os atributos de dimenso normalmente so identificadores curtos, que so chaves estrangeiras para outras tabelas, chamadas tabelas de dimenso. O esquema com uma tabela de fatos, vrias tabelas de dimenso e chaves estrangeiras da tabela de fatos para as tabelas de dimenso chamado esquema de estrela. Podemos citar, como exemplo, empresas que utilizam Data Warehouse: Banco Ita, Vivo, Anvisa, etc.
Data Mining
O termo minerao de dados (ou data mining) refere-se, em geral, ao processo de analisar grandes bancos de dados de forma semiautomtica para encontrar padres teis. Assim como a descoberta de conhecimento na inteligncia artificial (tambm chamada aprendizado de mquina) ou na anlise estatstica, a minerao de dados tenta descobrir regras e padres a partir dos dados. Porm, a minerao de dados difere do aprendizado de mquina e da estatstica porque lida com grande volume de dados, armazenados principalmente no disco. Ou seja, a minerao de dados lida com "descoberta de conhecimento nos bancos de dados". Alguns tipos de conhecimento descoberto em um banco de dados podem ser representados por um conjunto de regras. Naturalmente, essas regras no so universalmente verdadeiras e possuem graus de "suporte" e "confiana". Outros tipos de conhecimento so representados por equaes relacionando diferentes variveis entre si ou por outros mecanismos para prever resultados quando os valores de algumas variveis so conhecidos. Existem diversos tipos possveis de padres que podem ser teis, e diferentes tcnicas so utilizadas para encontrar diferentes tipos de padres. Normalmente, existe um componente manual para a minerao de dados, consistindo no pr-processamento dos dados para um formato aceitvel aos algoritmos e no ps-processamento de padres descobertos para encontrar outros que poderiam ser teis. Tambm pode haver mais de um tipo de padro que pode ser descoberto a partir de determinado banco de dados, e a interao manual pode ser necessria para apanhar tipos teis de padres. Por esse motivo, a minerao de dados na realidade um processo semiautomtico na vida real. 31
O conhecimento descoberto possui vrias aplicaes. As aplicaes mais utilizadas so aquelas que exigem algum tipo de previso, ou as que procuram associaes (que so exemplos de padres descritivos). Podemos citar, como exemplo, empresas que utilizam Data Mining: Submarino, Netshoes, Americanas, etc.