Вы находитесь на странице: 1из 31

CAMPUS MARTE (MR) - UNIBERO

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";

Tabela CLIENTE

INSERIR REGISTRO

INSERT INTO cliente (IDCLIENTE, NOME, CPF, RG, ENDERECO, CIDADE, UF,
FONE, CELULAR, EMAIL, DATANASCIMENTO, GENERO)
VALUES
(9,'Tereza', '0111111110', '000000000','Rua Nona, xx','So Paulo','SP','0000-
0000','00000000','tereza@yahoo.com.br','1900-00-00','M');

APAGAR REGISTRO

DELETE FROM CLIENTE WHERE IDCLIENTE = 1;

ALTERAR REGISTRO

UPDATE CLIENTE SET CIDADE = So Paulo
WHERE IDCLIENTE = 1;

Tabela VENDA

INSERIR REGISTRO

INSERT INTO VENDA (IDVENDA, CLIENTEVENDA, DATA, HORA,
VALORTOTAL, FUNCIONARIO_VENDA)
VALUES
(1,'Mario', 2014-09-14, 21:35:00','100.00','Antonio');

APAGAR REGISTRO

DELETE FROM VENDA WHERE IDVENDA = 1;

ALTERAR REGISTRO

UPDATE VENDA SET VALORTOTAL = 150.00
WHERE IDVENDA = 1;

Tabela ITEMVENDA

INSERIR REGISTRO
9


INSERT INTO itemvenda (IDITEMVENDA, VENDAITEMVENDA,
PRODUTOITEMVENDA, QTDE, VALORUNITARIO, VALORDESCONTO,
VALORTOTAL)
VALUES
(0, 1, 10, 1,'01,50','100.00','10.00','90.00');

APAGAR REGISTRO

DELETE FROM ITEMVENDA WHERE IDITEMVENDA = 1;

ALTERAR REGISTRO

UPDATE ITEMVENDA SET QTDE = 2
WHERE IDITEMVENDA = 1;


Tabela FUNCIONARIO

INSERIR REGISTRO

INSERT INTO funcionario (IDFUNCIONARIO, NOME, CPF, RG, CTPS, CARGO,
DATANASCIMENTO, DATAADMISSAO, DATADEMISSAO, ATIVO,
COMISSAO)
VALUES
(9,'Nome 9', 'CPF 9', 'RG 9','CTPS 9','Cargo 9','2014-09-09','2014-09-09','2014-09-
09','0','850.00');

APAGAR REGISTRO

DELETE FROM FUNCIONARIO WHERE IDFUNCIONARIO = 1;

ALTERAR REGISTRO

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:

CREATE PROCEDURE nome_do_stored_procedure
[
{@parametro tipo_de_dados_parametro}[=valor_default] [output]
]
[,...n]
AS comando1, comando2, comando3,
...,
comando2

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

Um Exemplo:

USE Northwind

GO

CREATE PROCEDURE usp_ExIF
@pais1 nVarchar(15),
@pais2 nVarchar(15),

AS

/* CRIA AS VARIAVEIS LOCAIS */

DECLARE @TotPed1 int, @TotPed2 int

DECLARE @mensagem1 Char(100), @mensagem2 Char(100)

DECLARE @mensagem2 CHAR(100)

/* DEFINE O VALOR DE CADA VARIVEL */

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


3.1 procedure ret_comissao_funcionario

delimiter //

create procedure ret_comissao_funcionario (v_MES Int(2), v_ANO Int(4),
v_Cod Int(2)


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:


3.2 Procedure inc_item_venda.
Valortotal = valorunitario * qtde do itemvenda - desconto

20

delimiter //

create procedure inc_item_venda (Cod_venda Int(2), Cod_Prod Int(2),
Qtde Int(3), Valor_Unit numeric(15,2), Tipo varchar(1)

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.