01.apostila banco de dados ii

36
Centro Universitário Newton Paiva BACHARELADO EM SISTEMAS DE INFORMAÇÃO BANCO DE DADOS II Prof. Iremar Nunes de Lima [email protected] http://iremar.prof.sites.uol.com.br Proibida reprodução e distribuição desta apostila por quaisquer meio. @Copyright By Iremar Nunes de Lima

Upload: antonio-faustino

Post on 14-Aug-2015

176 views

Category:

Documents


76 download

TRANSCRIPT

Page 1: 01.Apostila Banco de Dados II

Centro Universitário Newton Paiva

BACHARELADO EM SISTEMAS DE INFORMAÇÃO

BANCO DE DADOS II

Prof. Iremar Nunes de Lima

[email protected]://iremar.prof.sites.uol.com.br

Proibida reprodução e distribuição desta apostila por quaisquer meio.

@Copyright By Iremar Nunes de Lima

Page 2: 01.Apostila Banco de Dados II

Índice 1. INTRODUÇÃO ............................................................................................................................................................................. 2

1.1. CRONOGRAMA........................................................................................................................................................................ 2 1.2. BIBLIOGRAFIA BÁSICA......................................................................................................................................................... 2 1.3. REVISÃO – MODELO CONCEITUAL E MODELO RELACIONAL .................................................................................................. 3 1.4. REVISÃO – SQL...................................................................................................................................................................... 5

2. SQL AVANÇADO......................................................................................................................................................................... 6 2.1. CONSULTAS AVANÇADAS EM SQL......................................................................................................................................... 6 2.2. SUBCONSULTAS EM SQL ........................................................................................................................................................ 7 2.3. VIEWS................................................................................................................................................................................... 10 2.4. STOREDS PROCEDURES......................................................................................................................................................... 12 2.5. FUNÇÕES .............................................................................................................................................................................. 14 2.6. TRIGGER ............................................................................................................................................................................... 17 2.7. OTIMIZAÇÃO (ÍNDICES) ........................................................................................................................................................ 19 2.8. SEGURANÇA EM BANCO DE DADOS ...................................................................................................................................... 21

3. TÓPICOS AVANÇADOS EM BD............................................................................................................................................. 23 3.1. ARQUITETURA DE SGBDS.................................................................................................................................................... 23 3.2. SGBDOO – SISTEMA GERENCIADOR DE BD ORIENTADO A OBJETOS ................................................................................... 25 3.3. SGBDDD – SISTEMA GERENCIADOR DE BD DISTRIBUÍDOS ................................................................................................ 26 3.4. DATAWAREHOUSE (DW) E BUSINESS INTELIGENCE............................................................................................................... 28 3.5. MODELAGEM DE DATAWAREHOUSE E DATA MARTS ............................................................................................................ 30

4. ESTUDOS DE CASOS ............................................................................................................................................................... 33

1

Page 3: 01.Apostila Banco de Dados II

1. Introdução 1.1. CRONOGRAMA

• Tópicos Avançados em SQL (capítulos 08, 09, 14, 23 e 24 do livro texto). Consultas avançadas. Subconsultas. View. Stored Procedure. Funções. Gatilhes (Trigger). Índices. Segurança. Práticas no SGBD Microsoft SQL Server 2005.

• Tópicos Avançados em Banco de Dados (capítulos 02, 20, 25 e 28 do livro texto). Arquitetura do SGBD. Sistemas Gerenciadores de Banco de dados OO. Sistemas Gerenciadores de Banco de dados Distribuído. DataWarehouse, Datamarts, Dataming, OLAP e Business Intelligence.

• Implementação de estudo de caso em um SGBD comercial (Microsoft SQL Server 2005).

1.2. BIBLIOGRAFIA BÁSICA

ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de Banco de Dados. 4. ed. São Paulo: Pearson Addison Wesley, 2005. 724 p.

KORTH, HENRY F.; SILBERSCHATZ, ABRAHAM; SUDARSHAN, S. Sistema de Banco de Dados. 5 ed. Elsevier, 2006. 808 p.

TAYLOR, Allen G. SQL para Dummies. Rio de Janeiro: Campus, 2001. 409 p.

2

Page 4: 01.Apostila Banco de Dados II

1.3. REVISÃO – MODELO CONCEITUAL E MODELO RELACIONAL

Etapa 1: Construir o modelo conceitual do banco de dados (DCP segundo a notação UML):

3

Page 5: 01.Apostila Banco de Dados II

Etapa 2: Construir o modelo relacional (DER segundo a notação Peter Chen - Pés de Galinha):

4

Page 6: 01.Apostila Banco de Dados II

1.4. REVISÃO – SQL

Exemplo 1: Recupere o Nome e Endereço dos Funcionários que tenham salário igual ou inferior a 500.00 reais e que tenham sido admitidos após o ano de 2000.

SELECT Nome, Endereco FROM Funcionario WHERE Salario <= 500.00 AND DataAdmissao >= '01/01/2001'

Exemplo 2: Selecione o nome dos departamentos com o nome dos funcionários atualmente lotados nele mostrando o salário de cada funcionário.

SELECT D.Nome, F.Nome, F.Salario, F.Salario FROM Departamento D INNER JOIN Lotacao L ON

(D.CodDepartamento=L.CodDepartamento ) INNER JOIN Funcionario F ON (L.CodFunc = F.CodFunc)

WHERE L.DataFimLotacao IS NULL

Exemplo 3: Recupere o nome dos funcionários admitidos a mais de três anos e que trabalham em no máximo dois projetos. Mostre o total de projetos que eles trabalham.

SELECT F.Nome, COUNT(T.CodFunc) AS 'Total Projetos' FROM Funcionario F INNER JOIN TrabalhaEm T ON (F.CodFunc = T.CodFunc) WHERE (Getdate() - F.DataAdmissao) > 3 * 365 GROUP BY F.Nome HAVING COUNT(T.CodFunc) <= 2

Exemplo 4: (Left Outer Join) Recupere o código, data e valor total dos pedidos e o nome do vendedor que fez o pedido. Mostre todos os pedidos mesmo que não tenha vendedor:

SELECT P.CodPedido, P.DataPedido, P.ValorTotalPedido, F.Nome FROM Pedido P LEFT OUTER JOIN Funcionario F

ON (P.CodFunc = F.CodFunc)

5

Page 7: 01.Apostila Banco de Dados II

2. SQL Avançado 2.1. CONSULTAS AVANÇADAS EM SQL.

Exemplo 1: Auto Relacionamento - Recupere o Nome e salário dos funcionários e o nome e salário de seus supervisores. SELECT F.NOME AS NOMEFUNC, F.SALARIO AS SALARIOFUNC, S.NOME AS NOMESUP, S.SALARIO AS SALARIOSUP FROM FUNCIONARIO F LEFT OUTER JOIN FUNCIONARIO S ON (F.CODFUNCSUPERVISOR = S.CODFUNC) Exemplo 2: Tabela Repetida - Para cada departamento, recupere o nome do departamento, o nome do gerente e o total de funcionários que recebem mais de 500 reais lotados atualmente no departamento. SELECT D.NOME, G.NOME AS GERENTE, COUNT(F.CODFUNC) AS TOTALFUNC FROM DEPARTAMENTO D LEFT OUTER JOIN FUNCIONARIO G ON (D.CODFUNCGERENTE = G.CODFUNC) LEFT OUTER JOIN LOTACAO L ON (D.CODDEPARTAMENTO = L.CODDEPARTAMENTO) LEFT OUTER JOIN FUNCIONARIO F ON (L.CODFUNC = F.CODFUNC) WHERE L.DATAFIMLOTACAO IS NULL AND F.SALARIO > 500 GROUP BY D.NOME, D.CODDEPARTAMENTO, G.NOME Exemplo 3: Cláusula TOP - Recupere o nome e salário dos 10 funcionários não demitidos com o maior salário na empresa. SELECT TOP 10 NOME, SALARIO FROM FUNCIONARIO WHERE DATADEMISSAO IS NULL ORDER BY SALARIO DESC Exemplo 4: Funções YEAR, MONTH, DAY - Recupere o nome dos 20 produtos mais vendidos no ano atual. SELECT TOP 20 P.NOME, SUM(I.QUANTIDADE) AS TOTALVENDIDOMES FROM PRODUTO P INNER JOIN ITENSPEDIDO I ON (P.CODPRODUTO = I.CODPRODUTO) INNER JOIN PEDIDO PE ON (I.CODPEDIDO = PE.CODPEDIDO) WHERE YEAR(PE.DATAPEDIDO) = YEAR(GETDATE()) GROUP BY P.NOME ORDER BY SUM(I.QUANTIDADE) DESC Exemplo 4: UNION/INTERSECT - Recupere o código dos funcionários que são vendedores ou/e engenheiros (ou = UNION ; e = INTERSECT). SELECT CODFUNC FROM VENDEDOR UNION / INTERSECT SELECT CODFUNC FROM ENGENHEIRO Exemplo 5: DISTINCT - Recupere o código dos empregados (uma única vez) que trabalham nos projetos 1, 2 ou 3. SELECT DISTINCT CODFUNC FROM TRABALHAEM WHERE CODPROJETO IN (1,2,3)

6

Page 8: 01.Apostila Banco de Dados II

Exemplo 6: INSERT INTO - Suponha que a tabela T_Exemplo abaixo já tenha sido criada: INSERT INTO T_EXEMPLO (NOMEFUNC, NOMECARGO) SELECT F.NOME, C.DESCRICAO FROM FUNCIONARIO F LEFT OUTER JOIN CARGO C ON (F.CODCARGO = C.CODCARGO) Exemplo 7: IS NULL em Outer Joins - Recupere o nome dos funcionários que não trabalham em nenhum projeto. SELECT F.NOME FROM FUNCIONARIO F LEFT OUTER JOIN TRABALHAEM T ON

(F.CODFUNC = T.CODFUNC) WHERE T.CODFUNC IS NULL Exemplo 8: IS NULL em Outer Joins - Recupere o nome dos funcionários que não são vendedores, mas são coordenadores de projetos. SELECT F.NOME FROM FUNCIONARIO F INNER JOIN PROJETO P ON (F.CODFUNC = P.CODFUNCCOORDENADOR) LEFT OUTER JOIN VENDEDOR V ON (F.CODFUNC = V.CODFUNC) WHERE V.CODFUNC IS NULL Exemplo 9: Função Substring, convert, upper, ltrim, rtrim, SELECT SUBSTRING(NOME, 1, 10) FROM FUNCIONARIO SELECT SUBSTRING(CONVERT(CHAR(20), DATANASCIMENTO), 1, 10) FROM FUNCIONARIO SELECT UPPER(LTRIM(RTRIM(NOME))) FROM FUNCIONARIO Exemplo 10: Operador CASE SELECT NOME, CASE WHEN SALARIO < 500 THEN 'Salário menor que 500' WHEN SALARIO < 2000 THEN 'Salário maior ou igual a 500 e menor 2000' ELSE 'Salário maior ou igual a 2000' END FROM FUNCIONARIO

2.2. SUBCONSULTAS EM SQL

Exemplo 1: Recupere o Nome e Salário dos funcionários que recebem o maior salário na empresa. SELECT NOME, SALARIO FROM FUNCIONARIO WHERE SALARIO = (SELECT MAX(SALARIO) FROM FUNCIONARIO)

7

Page 9: 01.Apostila Banco de Dados II

Exemplo 2: Recupere o Nome e salário dos funcionários que ganham abaixo da média salarial dos gerentes de departamento. Mostre o resultado ordenado pelo nome do funcionário. SELECT NOME, SALARIO FROM FUNCIONARIO WHERE SALARIO < (SELECT AVG(F.SALARIO)

FROM FUNCIONARIO F INNER JOIN DEPARTAMENTO D ON F.CODFUNC = D.CODFUNCGERENTE)

ORDER BY NOME

Exemplo 3: (IN) Recupere o nome de cada um dos empregados que tenham dependentes com mais de dez anos. SELECT NOME FROM FUNCIONARIO WHERE CODFUNC IN (SELECT CODFUNC FROM DEPENDENTE WHERE (GETDATE() - DATANASCIMENTO) > 10*365)

Atenção: Em geral, subconsultas com o operador IN podem ser reescritas como um bloco único

Exemplo 4: (NOT IN) Recupere nome dos funcionários que não são gerentes: SELECT NOME FROM FUNCIONARIO WHERE CODFUNC NOT IN (SELECT CODFUNCGERENTE FROM DEPARTAMENTO

WHERE CODFUNCGERENTE IS NOT NULL)

Atenção: O resultado de uma subconsulta não pode retornar um valor NULL.

Exemplo 5: Recupere o nome dos funcionários que não são vendedores, mas são coordenadores de projetos. SELECT NOME FROM FUNCIONARIO WHERE CODFUNC NOT IN (SELECT CODFUNC FROM VENDEDOR) AND CODFUNC IN (SELECT CODFUNCCOORDENADOR FROM PROJETO WHERE

CODFUNCCOORDENADOR IS NOT NULL)

Exemplo 6: (SUBCONSULTAS CORRELACIONADAS) Recupere o nome dos vendedores que fizeram mais de dez pedidos no mês atual SELECT F.NOME FROM FUNCIONARIO F WHERE (SELECT COUNT(P.CODFUNC) FROM PEDIDO P WHERE F.CODFUNC = P.CODFUNC AND MONTH(GETDATE()) = MONTH(P.DATAPEDIDO) GROUP BY P.CODFUNC ) > 10

Exemplo 7: (EXISTS) Recupere o nome dos projetos que tenham pelo menos um funcionário trabalhando nele. SELECT P.NOME FROM PROJETO P WHERE EXISTS ( SELECT * FROM TRABALHAEM T WHERE P.CODPROJETO = T.CODPROJETO)

Exemplo 8: Recupere o nome dos gerentes que possuem ao menos um dependente. SELECT F.NOME AS ´GERENTE´ FROM FUNCIONARIO F WHERE EXISTS ( SELECT * FROM DEPARTAMENTO D WHERE (F.CODFUNC = D.CODFUNCGERENTE)) AND EXISTS ( SELECT * FROM DEPENDENTE D WHERE (F.CODFUNC =D.CODFUNC))

8

Page 10: 01.Apostila Banco de Dados II

Exemplo 9: (NOT EXISTS) Recupere o nome dos departamentos que não contenha funcionários lotados atualmente. SELECT D.NOME FROM DEPARTAMENTO D WHERE NOT EXISTS (SELECT * FROM LOTACAO L

WHERE D.CODDEPARTAMENTO = L.CODDEPARTAMENTO AND L.DATAFIMLOTACAO IS NULL)

Exemplo 10: (EXCEPT) Recupere o nome dos vendedores que não são gerentes de departamentos. SELECT NOME FROM FUNCIONARIO WHERE CODFUNC IN (SELECT CODFUNC FROM VENDEDOR EXCEPT

(SELECT CODFUNCGERENTE FROM DEPARTAMENTO))

Exemplo 11: (SUBCONSULTAS NA CLÁUSULA FROM) Recupere o nome dos projetos ainda não encerrados em que mais de três funcionários já trabalharam. SELECT P.NOME FROM PROJETO P INNER JOIN (SELECT CODPROJETO FROM TRABALHAEM

GROUP BY CODPROJETO HAVING COUNT(CODFUNC) > 3) AS P3F ON (P.CODPROJETO = P3F.CODPROJETO) WHERE P.DATAFIM IS NULL

Exemplo 12: (SUBCONSULTAS NA CLÁUSULA SELECT) Recupere o nome dos funcionários e o total de projetos que cada um deles já trabalhou. SELECT F.NOME, (SELECT COUNT(T.CODPROJETO) FROM TRABALHAEM T

WHERE F.CODFUNC = T.CODFUNC GROUP BY T.CODFUNC) FROM FUNCIONARIO F

Exemplo 13: (DELETE COM SUBCONSULTAS) Remova os funcionários que já foram demitidos. DELETE FROM FUNCIONARIO WHRE CODFUNC IN (SELECT CODFUNC FROM FUNCIONARIO WHERE DATADEMISSAO IS NOT NULL)

Exemplo 14: (UPDATE COM SUBCONSULTAS) Aumente em 20% o salário dos funcionários que são vendedores UPDATE FUNCIONOARIO SET SALARIO = SALARIO *1.2 WHERE CODFUNC IN (SELECT CODFUNC FROM VENDEDOR)

9

Page 11: 01.Apostila Banco de Dados II

2.3. VIEWS

São tabelas virtuais derivadas de outras tabelas. Estas tabelas não contém linhas. Exemplo 1: CREATE VIEW VFuncCargoFormacao (NomeFunc, NomeCargo, NomeFormacao) AS SELECT F.Nome, C.Descricao, FE.Descricao FROM Funcionario F LEFT OUTER JOIN Cargo C ON (F.CodCargo = C.CodCargo)

LEFT OUTER JOIN FormacaoEscolar FE ON (F.CodFormacao = FE.CodFormacao)

SELECT * FROM VfuncCargoFormacao

Vantagens das Visões: 1. Destacam os dados para um usuário: As visões criam um ambiente controlado que

permite acesso a dados específicos enquanto outros dados são ocultos. Dados desnecessários, confidenciais ou inapropriados podem ser excluídos de uma visão.

2. Mascaram a complexidade do banco de dados: As visões escondem a complexidade do design do banco de dados do usuário. Isso fornece aos desenvolvedores a capacidade de alterar o design sem afetar a interação do usuário com o banco de dados. Ou seja, o desenvolvimento e manutenção de aplicações fica simplificado.

3. Simplificam o gerenciamento de permissões do usuário: Em vez de conceder permissão para os usuários consultarem colunas específicas em tabelas base, os proprietários do banco de dados podem conceder permissão para usuários consultarem dados apenas através de visões.

4. Aprimoram o desempenho: As visões permitem que você armazene resultados de consultas complexas. Outras consultas podem usar esses resultados resumidos.

5. Organizam dados a serem exportados para outros aplicativos: Você pode criar uma visão com base em uma consulta complexa que associe duas ou mais tabelas e depois exportar os dados para outro aplicativo.

Exemplo 2: CREATE VIEW VProjetoFuncionario

(CodProjeto, NomeProjeto, CodFunc, NomeFuncionario) AS SELECT P.CodProjeto, P.Nome, F.CodFunc, F.Nome FROM Projeto P LEFT OUTER JOIN TrabalhaEm TE ON (P.CodProjeto = TE.CodProjeto) RIGHT OUTER JOIN Funcionario F ON (TE.CodFunc = F.CodFunc) /* Recupera a quantidade de funcionários por projeto */ SELECT NomeProjeto, Count(CodFunc) AS "Total de Funcionários" FROM VProjetoFuncionario GROUP BY NomeProjeto

/* Recupera o nome dos Funcionários que não trabalham em nenhum projeto */ SELECT NomeFuncionario FROM VProjetoFuncionario WHERE CodProjeto IS NULL

10

Page 12: 01.Apostila Banco de Dados II

Exemplo 3: CREATE VIEW FolhaPgtoPorDepto (CodDepartamento, TotalFolha) AS SELECT D.CodDepartamento, SUM(F.Salario) FROM Departamento D JOIN Lotacao L ON (D.CodDepartamento = L.CodDepartamento)

JOIN Funcionario F ON (L.CodFunc = F.CodFunc) WHERE L.DataFimLotacao IS NULL GROUP BY D.CodDepartamento

Exemplo 4: DROP VIEW VFuncCargoFormacao Exemplo 5: SET DATEFORMAT dmy; CREATE VIEW V_10_Funcionario_TotalPedidos_Ano_2007 -- Esta view recupere o 10 vendedores que mais venderam em 2007 AS SELECT TOP 10 V.CodFunc, F.Nome, SUM(P.ValorTotalPedido) AS Total FROM Vendedor V LEFT OUTER JOIN Pedido P ON (V.CodFunc = P.CodFunc) JOIN Funcionario F ON (V.CodFunc = F.CodFunc) WHERE DataPedido > '31/12/2006' GROUP BY V.CodFunc, F.nome ORDER BY Total DESC ; SELECT * FROM V_10_Funcionario_TotalPedidos_Ano_2007 ORDER BY total ASC Exemplo 6: Como as views podem melhorar a segurança de acesso ao Banco de Dados: CREATE VIEW VISOES_BD_PESSOAL.V_FuncSupervisor (NomeFunc, SalarioFunc, NomeSupervisor, SalarioSup) WITH ENCRYPTION AS SELECT F.nome, F.Salario, S.nome, S.Salario FROM Funcionario F LEFT OUTER JOIN Funcionario S ON (F.CodFuncSupervisor = S.CodFunc); DENY SELECT ON FUNCIONARIO TO BD; GRANT SELECT ON VISOES_BD_PESSOAL TO BD; Observações: • O Projeto de quais Views um sistema deve ter é uma tarefa crítica em um grande sistema e

deve ser feita pelo analista e DBA na fase do Projeto do sistema. • Uma View não pode conter a cláusula ORDER BY.

11

Page 13: 01.Apostila Banco de Dados II

2.4. STOREDS PROCEDURES São funções armazenadas no BD, compiladas e disponibilizadas para execução pela aplicação. Exemplo 1: CREATE PROCEDURE SPFolhaPagamento AS BEGIN SELECT D.Nome, F.Nome, F.Salario FROM Departamento D JOIN Lotacao L ON (D.CodDepartamento = L.CodDepartamento)

JOIN Funcionario F ON (L.CodFunc = F.CodFunc) WHERE L.DataFimLotacao IS NULL ORDER BY D.Nome, F.Nome END Para executar a procedure depois dela criada: EXEC SPFolhaPagamento São criadas pelo DBA/Analista ou pelo próprio fabricando do SGBD para: 1. Encapsular regra de negócio e criar lógica do aplicativo reutilizável. Facilita a manutenção e alteração da

aplicação, pois se a regra muda basta mudar na procedure. 2. Execução mais rápida para consultas repetitivas. Todas as instruções SQL tornam-se parte de um único

plano de execução no servidor e uma vez executada, o plano de execução fica em memória cache. 3. Redução no tráfego de rede gerado pela aplicação. Não trafega código SQL. 4. Facilitar e centralizar o gerenciamento de permissões. 5. Esconder dos usuários os detalhes das tabelas, não sendo necessário o acesso às tabelas diretamente. 6. Eliminar a possibilidade de um hacker enviar instruções SQL incorporadas nos valores de parâmetro dos

formulários da aplicação. Exemplo 2: CREATE PROCEDURE SPTotalFolhaDepartamento (@CodDepartamento INTEGER) AS BEGIN SELECT D.Nome, SUM(F.Salario) AS "Total Folha" FROM Departamento D JOIN Lotacao L ON (D.CodDepartamento = L.CodDepartamento) JOIN Funcionario F ON (L.CodFunc = F.CodFunc) WHERE D.CodDepartamento = @CodDepartamento AND L.DataFimLotacao IS NULL GROUP BY D.Nome END EXEC SPTotalFolhaDepartamento 1 ou EXEC SPTotalFolhaDepartamento 3 Exemplo 3: CREATE PROCEDURE SPRemoveFuncionario (@CodFunc INTEGER) AS BEGIN TRANSACTION DELETE FROM Dependente WHERE CodFunc = @CodFunc; DELETE FROM Lotacao WHERE CodFunc = @CodFunc; DELETE FROM TrabalhaEm WHERE CodFunc = @CodFunc; DELETE FROM Engenheiro WHERE CodFunc = @CodFunc; UPDATE Pedido SET CodFunc = NULL WHERE CodFunc = @CodFunc; DELETE FROM Vendedor WHERE CodFunc = @CodFunc; UPDATE Departamento SET CodFuncGerente = NULL WHERE CodFuncGerente = @CodFunc; UPDATE Projeto SET CodFuncCoordenador = NULL WHERE CodFuncCoordenador = @CodFunc; DELETE FROM Administrador WHERE CodFunc = @CodFunc; DELETE FROM Funcionario WHERE CodFunc = @CodFunc; COMMIT

12

Page 14: 01.Apostila Banco de Dados II

Exemplo 4: DROP PROCEDURE SPTotalFolhaDepartamento Exemplo 5: Tratamento estruturado de exceções em Procedures (Microsoft SQL Server): CREATE PROCEDURE USP_ATUALIZA_GERENTE_DEPARATAMENTO (@CODDEPTO INTEGER,@CODGERENTENOVO INTEGER, @NOVAGRATIFICACAO MONEY) AS BEGIN TRY BEGIN TRANSACTION DECLARE @CODGERENTEANTIGO INTEGER SELECT @CODGERENTEANTIGO = (SELECT ISNULL(CODFUNCGERENTE, 0) FROM DEPARTAMENTO WHERE CODDEPARTAMENTO = @CODDEPTO) DECLARE @VALORGRATIFICACAOANTIGA MONEY SELECT @VALORGRATIFICACAOANTIGA = (SELECT ISNULL(GRATIFICACAOGERENTE, 0) FROM DEPARTAMENTO WHERE CODDEPARTAMENTO = @CODDEPTO) IF @CODGERENTEANTIGO <> 0 – NESTE CASO O DEPARTAMENTO TEM GERENTE BEGIN -- ATUALIZA SALARIO DO GERENTE ANTIGO UPDATE FUNCIONARIO SET SALARIO = SALARIO - @VALORGRATIFICACAOANTIGA WHERE CODFUNC = @CODGERENTEANTIGO -- ATUALIZA O GERENTE DO DEPARTAMENTO UPDATE DEPARTAMENTO SET CODFUNCGERENTE = @CODGERENTENOVO WHERE CODDEPARTAMENTO = @CODDEPTO -- ATUALIZA O SALARIO DO NOVO GERENTE UPDATE FUNCIONARIO SET SALARIO = SALARIO + @NOVAGRATIFICACAO WHERE CODFUNC = @CODGERENTENOVO END ELSE -- NESTE CASO O DEPARTAMENTO NÃO TINHA GERENTE DEFINIDO BEGIN -- ATUALIZA O GERENTE DO DEPARTAMENTO UPDATE DEPARTAMENTO SET CODFUNCGERENTE = @CODGERENTENOVO WHERE CODDEPARTAMENTO = @CODDEPTO -- ATUALIZA O SALARIO DO NOVO GERENTE UPDATE FUNCIONARIO SET SALARIO = SALARIO + @NOVAGRATIFICACAO WHERE CODFUNC = @CODGERENTENOVO END COMMIT TRANSACTION END TRY BEGIN CATCH ROLLBACK TRANSACTION SELECT ERROR_NUMBER() NUMEROERRO, ERROR_MESSAGE() MENSAGEMERRO END CATCH EXEC USP_ATUALIZAGERENTEDEPARATAMENTO 2, 100, 300 30001 - Cannot insert/update into table ‘Departamento’ because the values entered for ‘CodFuncGerente’ in ‘Departamento’ must correspond to the values of primary key column(s) of the table ‘Administrador’ Observações: • O Projeto de quais SPs um sistema deve ter é uma tarefa crítica em um grande sistema e deve ser

feita pelo analista e DBA na fase do Projeto do sistema.

13

Page 15: 01.Apostila Banco de Dados II

2.5. FUNÇÕES Funções são rotinas compostas de um ou mais instruções T-SQL usadas para encapsular lógica

executada com freqüência. Uma função obtém zero ou mais parâmetros de entrada e retorna um valor escalar ou uma

tabela. Benefícios: encapsula código para reutilização e em alguns casos, podem ser invocadas em

qualquer lugar de uma instrução T-SQL. Não oferecem suporte a parâmetros de saída como as procedures.

Exemplos (Microsoft SQL Server): 1) Diferença entre VIEWS, PROCEDURES e FUNCTIONS: a) VIEW:

CREATE VIEW V_EXEMPLO AS SELECT CODFUNC, NOME FROM FUNCIONARIO SELECT * FROM V_EXEMPLO WHERE CODFUNC = 10

b) PROCEDURE:

CREATE PROCEDURE SP_EXEMPLO (@CODFUNC INT) AS SELECT CODFUNC, NOME FROM FUNCIONARIO WHERE CODFUNC = @CODFUNC EXECUTE SP_EXEMPLO 10

c) FUNCTION: CREATE FUNCTION F_EXEMPLO (@CODFUNC INT) RETURNS TABLE AS RETURN ( SELECT CODFUNC, NOME FROM FUNCIONARIO WHERE CODFUNC = @CODFUNC) SELECT * FROM F_EXEMPLO (1)

TIPOS DE FUNÇÕES: A) FUNÇÕES ESCALARES

Semelhantes a uma função interna (COUNT(), SUM(), MAX()). Retornam um único valor do tipo definido na cláusula RETURNS Semelhantes a Visões com a vantagem de oferecer suporte a parâmetros de saída. Deve ser definida em um bloco BEGIN ... END.

Exemplos: 1) CREATE FUNCTION SOMAPRODUTOSVENDIDOS (@CODPRODUTO INT) RETURNS INT -- Objetivo: Para cada produto passado como parâmetros retorna a quantidade -- total de produtos vendidos. AS BEGIN DECLARE @RETORNO INT SELECT @RETORNO = SUM(QUANTIDADE) FROM ITENSPEDIDO WHERE CODPRODUTO = @CODPRODUTO

14

Page 16: 01.Apostila Banco de Dados II

IF (@RETORNO IS NULL) SET @RETORNO = 0 RETURN @RETORNO END -- Para executar a Função: SELECT NOME, DBO.SOMAPRODUTOSVENDIDOS(CODPRODUTO) AS TOTALVENDIDO FROM PRODUTO Atenção: Observe a necessidade de referenciar o ESQUEMA onde se encontra a Função. 2) Cria uma função escalar para ser usado na cláusula CHECK. CREATE FUNCTION VALIDADATA (@DATA DATETIME) RETURNS INT AS -- Objetivo: Cria uma função que valida uma data: a data deve ser maior ou -- igual à data de hoje e deve ser menor que '0'/01/2100'. BEGIN DECLARE @RETORNO INT SELECT @RETORNO = 0 IF (ISDATE(@DATA) = 0) – O parâmetro não é do tipo datetime RETURN @RETORNO IF (@DATA < GETDATE()) RETURN @RETORNO IF (@DATA > '01/01/2100') RETURN @RETORNO SELECT @RETORNO = 1 RETURN @RETORNO END -- Associa a função à uma nova coluna de uma tabela CREATE TABLE PEDIDOTESTE ( CODPEDIDO INT, DATAPEDIDO DATETIME CHECK (DBO.VALIDADATA(DATAPEDIDO) > 0) ) -- Testa a função definida na cláusula CHECK INSERT INTO PEDIDOTESTE VALUES (1, '01/01/2006') Msg 547, Level 16, State 0, Line 1 The INSERT statement conflicted with the CHECK constraint ‘CK__PEDIDOTES__DATAP__60A75C0F’. The conflict occurred in database ‘Pessoal’, table ‘dbo.PEDIDOTESTE’, column 'DATAPEDIDO'. The statement has been terminated. B) FUNÇÕES COM VALOR DE TABELA EM LINHA

Semelhantes a uma visão com parâmetros. Retornam uma tabela como resultado da única instrução SELECT. Semelhantes a Visões com a vantagem de oferecer suporte a parâmetros de saída.

Exemplo:

15

Page 17: 01.Apostila Banco de Dados II

-- Cria uma função que retorna uma tabela contendo o código, nome e salário -- dos funcionários lotados em um departamento: CREATE FUNCTION DBO.FUNCLOTADODEPTO (@CODDEPTO INT) RETURNS TABLE AS RETURN (

SELECT F.CODFUNC, F.NOME, F.SALARIO FROM FUNCIONARIO F INNER JOIN LOTACAO L ON (F.CODFUNC = L.CODFUNC) WHERE L.DATAFIMLOTACAO IS NULL AND L.CODDEPARTAMENTO = @CODDEPTO)

-- Invocando a função: SELECT * FROM DBO.FUNCLOTADODEPTO (2) -- Invocando a função dentro da cláusula FROM: -- Seleciona os funcionários do departamento 2 que ganham mais de 1000 e -- nome dos respectivos dependentes. SELECT FF.NOME, D.NOME AS NOMEDEPENDENTE FROM DBO.FUNCLOTADODEPTO(2) AS FF INNER JOIN DEPENDENTE D ON (FF.CODFUNC = D.CODFUNC) WHERE FF.SALARIO > 1000 C) FUNÇÕES COM VALOR DE TABELA COM VÁRIAS INSTRUÇÕES.

Combina views e procedimentos armazenados. Retorna uma tabela que é resultado de várias instruções T-SQL.

Exemplo: Recupera o nome dos Coordenadores de projeto ou Gerentes de Departamentos, conforme o parâmetro recebido: Se valor do parâmetro for 1 retorna os coordenadores de projetos, se for 2 retorna os gerentes de departamentos. CREATE FUNCTION COORD_OU_GERENTE (@TIPO INT) RETURNS @TBL_COORD_OU_GERENTE TABLE (CODFUNC INT, NOMEFUNC VARCHAR(50), FUNCAO VARCHAR(20)) AS BEGIN IF (@TIPO = 1) -- SOLICITOU OS COORDENADORES INSERT INTO @TBL_COORD_OU_GERENTE SELECT F.CODFUNC, F.NOME, 'COORDENADOR' FROM FUNCIONARIO F INNER JOIN PROJETO P ON (F.CODFUNC=P.CODFUNCCOORDENADOR) ELSE IF (@TIPO = 2) -- SOLICITOU OS GERENTES INSERT INTO @TBL_COORD_OU_GERENTE SELECT F.CODFUNC, F.NOME, 'GERENTE' FROM FUNCIONARIO F INNER JOIN DEPARTAMENTO D ON (F.CODFUNC = D.CODFUNCGERENTE) RETURN END SELECT * FROM COORD_OU_GERENTE (1)

16

Page 18: 01.Apostila Banco de Dados II

2.6. TRIGGER

São Storeds Procedures (funções) que são disparadas automaticamente pelo SGBD durante um evento de inserção, exclusão ou atualização de linhas nas tabelas do BD. São úteis para: • Controlar restrições de domínio que depende de valores dinâmicos. • Realizar tarefas em cascata antes ou após um INSERT, DELETE ou UPDATE (Exemplos:

atualização do estoque ou implementação de opções de Cascade Delete, Set NULL, etc). • Atualizar atributos derivados de tabelas (Ex: Total de dependentes de um Funcionário ). • Auditar ações realizadas pelos usuários.

Nota: Em SQL Server as tabelas DELETED e INSERTED contém as linhas removidas e inseridas. Por exemplo, se a ação declarada for UPDATE a tabela DELETED conterá as linhas antes da atualização e a tabela INSERTED conterá as linhas depois da atualização.

Exemplo 1: Restrição de domínio (SQL Server) CREATE TRIGGER TGVerificaSalarioMinimo ON Funcionario FOR INSERT, UPDATE AS BEGIN IF (SELECT Salario FROM INSERTED) < (SELECT SalarioMinimo FROM Parametros) BEGIN PRINT 'Erro! Salário do funcionário é menor que o salário mínimo ' ROLLBACK TRANSACTION END END

Exemplo 2: Atualização em cascata (SQL Server): Cria a Trigger que aumenta o salario de um funcionario que se tornou gerente: CREATE TRIGGER TGAtualizaSalarioGerenteNovo ON Departamento FOR INSERT AS BEGIN UPDATE Funcionario SET Salario = Salario + INSERTED.GratificacaoGerente FROM INSERTED WHERE Funcionario.CodFunc = INSERTED.CodFuncGerente END Exemplo 3: Cria a Trigger que reduz o salario de um gerente cujo departamento que gerenciava foi removido: CREATE TRIGGER TGAtualizaSalarioGerenteDepartamentoRemovido ON Departamento FOR DELETE AS BEGIN UPDATE Funcionario SET Salario = Salario - DELETED.GratificacaoGerente FROM DELETED WHERE Funcionario.CodFunc = DELETED.CodFuncGerente END

17

Page 19: 01.Apostila Banco de Dados II

Exemplo 4: Cria a Trigger que aumenta o salario do funcionario que se tornou o novo gerente e reduz o salario do funcionario que deixou de ser gerente: CREATE TRIGGER TGAtualizaSalarioGerenteRemovido ON Departamento FOR UPDATE AS BEGIN IF UPDATE("CodFuncGerente") BEGIN /* Aumenta o salario do funcionario que se tornou o novo gerente */ UPDATE Funcionario SET Salario = Salario + INSERTED.GratificacaoGerente FROM INSERTED WHERE Funcionario.CodFunc = INSERTED.CodFuncGerente /* Reduz o salario do funcionario que deixou de ser gerente */ UPDATE Funcionario SET Salario = Salario - DELETED.GratificacaoGerente FROM DELETED WHERE Funcionario.CodFunc = DELETED.CodFuncGerente END END Exemplo 5: Atualização de atributos derivados: Cria a Trigger que calcula o atributo derivado totaldependentes da tabela Funcionario. CREATE TRIGGER TGAtualizaTotalDependentes ON Dependente FOR INSERT, DELETE AS BEGIN IF (SELECT COUNT(*) FROM INSERTED) = 1 /* Houve uma inserção */ BEGIN UPDATE Funcionario SET TotalDependentes = TotalDependentes + 1 WHERE CodFunc = (SELECT CodFunc FROM INSERTED) END ELSE IF (SELECT COUNT(*) FROM DELETED) = 1 /* Houve uma remoção */ BEGIN UPDATE Funcionario SET TotalDependentes = TotalDependentes - 1 WHERE CodFunc = (SELECT CodFunc FROM DELETED) END END Exemplo 6: DROP TRIGGER TGAuditaSalario • O Projeto de quais Triggers um sistema deve ter é uma tarefa crítica em um grande sistema e

deve ser feita pelo analista e DBA na fase do Projeto do sistema. • Um DBA conhecer a sintaxe de criação de triggers do fabricante do SGBD para usar todo o

potencial desta característica. • Cuidado: Uma trigger pode disparar outra trigger em cascata.

18

Page 20: 01.Apostila Banco de Dados II

2.7. OTIMIZAÇÃO (ÍNDICES)

• Índice é uma tabela que implementa uma estrutura de dado, como árvore B, através de uma ou mais colunas especificadas no índice, com o objetivo de evitar o acesso seqüencial.

• Tipos de índices:

♦ Índices implícitos: são os índices que são automaticamente criados pelo SGBD quando o objeto é criado. Ex: os atributos chaves (PKs). Ex: CREATE INDEX I_Funcionario ON Funcionario (CodFunc)

♦ Índices simples: são aqueles baseados em uma única coluna da tabela. Ex: CREATE INDEX I_FuncCargo ON Funcionario (CodCargo) Ex: CREATE INDEX I_ProjDataInicio ON Projeto (DataInicioProjeto)

♦ Índices compostos: são aqueles baseados em duas ou mais colunas de uma tabela. Ex: CREATE INDEX I_DeptoFunc ON Lotacao (CodDepto, CodFunc) Ex: CREATE INDEX I_FuncCargoSalario ON Funcionario (CodCargo, Salario)

♦ Índices únicos: são os índices que implementam valores únicos em uma coluna semelhante a uma PK. Ex: CREATE UNIQUE INDEX I_CPF ON Funcionario (CPF) CREATE UNIQUE INDEX I_Descricao ON Projeto (descricao)

• Removendo índices: DROP INDEX Projeto.I_Descricao

19

Page 21: 01.Apostila Banco de Dados II

Critérios gerais para otimização de um Banco de Dados: 1) Crie índices em: • Colunas utilizadas como chaves estrangeiras. Exceções: A tabela não deve conter poucas

linhas ou os valores da chave estrangeira não deve conter poucos valores distintos. • Colunas freqüentemente utilizadas para unir (JOIN) tabelas. • Colunas freqüentemente utilizadas como condições em uma consulta, desde que a consulta

não retorne mais de 80 % das linhas nas tabelas. 2) Crie Views e/ou Storeds Procedures sobre as consultas mais freqüentes do BD.

Quando você deve evitar criar índices: 1) Em colunas que contenham poucos valores únicos, como sexo e status. 2) Em colunas de consultas que recuperem uma alta percentagem das linhas das tabelas. 3) Um índice geralmente ocupa muito espaço em disco podendo ser maior que a própria tabela.

Portanto veja se espaço de armazenamento é um problema no seu sistema. 4) Se uma coluna sofrer constantes modificações índices nesta coluna devem ser avaliados

sobre pena de o algoritmo de indexação sobrecarregar o sistema. 5) Se existem processos de carga em tabelas deve-se primeiro remover os índices desta tabela e

depois criá-los novamente, de preferência quando o SGBD estiver ocioso.

Nota: O Projeto de quais Índices um sistema deve ter é uma tarefa crítica em um grande sistema e deve ser feita pelo analista e DBA na fase do Projeto do sistema.

20

Page 22: 01.Apostila Banco de Dados II

2.8. SEGURANÇA EM BANCO DE DADOS

• Um banco de dados possui usuários que são autenticados usando logins específicos ou logins validados pelo sistema operacional.

• Para estabelecer uma conexão com SGBD é necessário ter um login no Servidor de BD. • Um Database pode ter usuários que podem ser colocados em um grupo (role). • Todo SGBD possui um grupo default chamado public.

Exemplos: USE master CREATE LOGIN BD WITH PASSWORD = 'sql' , DEFAULT_DATABASE = Pessoal, DEFAULT_LANGUAGE = brazilian USE Pessoal CREATE USER BD FOR LOGIN BD CREATE ROLE ALUNOS SP_ADDROLEMEMBER "ALUNOS", "BD" SP_DROPROLEMEMBER "ALUNOS", "BD" SP_DROPROLE "ALUNOS"

• Existem dois tipos de permissões que controlam as ações de um usuário:

A) Permissão de declaração: CREATE DATABASE, CREATE TABLE, CREATE RULE, CREATE VIEW, CREATE PROCEDURE e CREATE INDEX.

Exemplos: 1) GRANT CREATE TABLE, CREATE VIEW TO cesar 3) GRANT CREATE PROCEDURE TO public

B) Permissão de objetos: SELECT, INSERT, UPDATE, DELETE e EXECUTE (Storeds Procedures)

Exemplos: 1) GRANT UPDATE ON projeto TO cesar, iremar 2) GRANT SELECT ON funcionario (CodFunc, Nome, Endereco, Telefone) TO public 4) GRANT DELETE ON dependente TO marcia WITH GRANT OPTION 5) GRANT EXECUTE ON SPFolhaPagamento TO iremar

C) Opção REVOKE (remove uma ou mais permissões já concedidas) Exemplos: 1) REVOKE CREATE TABLE FROM cesar 3) REVOKE SELECT ON funcionario FROM cesar 4) REVOKE ALL ON projeto FROM public

21

Page 23: 01.Apostila Banco de Dados II

Esquemas (Scheme) em banco de Dados (Microsoft SQL Server) 1. Um esquema (schema) é um container para objetos do banco de dados (ANSI SQL-92). 2. Facilita o gerenciamento de permissões. 3. Quando um objeto é criado se não for definido o esquema a que ele pertence,

automaticamente o objeto vai pertencer ao esquema dbo. Exemplos: a) Cria um esquema de nome RH no banco de dados Pessoal. USE PESSOAL; CREATE SCHEMA RH Atenção: Esquemas são criados em bancos de dados. b) Transfere o esquema da tabela Cargo para o esquema RH ALTER SCHEMA RH TRANSFER dbo.cargo; SELECT * FROM rh.cargo c) Cria um esquema de nome Venda, com algumas opções: USE pessoal; CREATE SCHEMA Vendas AUTHORIZATION iremar CREATE TABLE Pedido (CodPedido int, Valor money, DataPedido datetime) GRANT SELECT TO renata DENY SELECT TO guest; GO Atenção: • Observe que a tabela Pedido irá pertencer ao schema Vendas. Ao se criar um objeto do BD

será possível definir a qual esquema ele pertencerá d) Concede diferentes permissões em esquemas: GRANT SELECT ON SCHEMA::rh TO guest DENY DELETE ON SCHEMA::rh TO guest GRANT UPDATE ON SCHEMA::rh TO iremar WITH GRANT OPTION

22

Page 24: 01.Apostila Banco de Dados II

3. Tópicos Avançados em BD 3.1. ARQUITETURA DE SGBDS

A figura a seguir ilustra, de forma simplificada, os componentes típicos de um SGBD:

Adaptação de "Sistema de Banco de Dados", Henry F. Korth et al.

Índices Dados Estatísticos

Arquivos de Dados Dicionário de Dados

Gerenciador deTransações

Gerenciador deBuffer

Gerenciador deArquivos

Gerenciadorde

memória

Processadorde

ConsultasCompilador

DDL

Otimizadorde Consultas

CompiladorDML

Executorde Consultas

SGBD

Bancode

Dados

Administrador do BD / Usuários / Aplicações

Estes módulos são descritos a seguir: • Compilador DML: Módulo responsável pela tradução de comandos DML (linguagem de

manipulação de dados do tipo SQL), que podem ter sido embutidos em um programa de aplicação ou enviados pelo Administrador do Banco de Dados.

• Compilador DDL: Módulo que traduz comandos DDL (linguagem de definição de dados do tipo SQL), que podem ser submetidos pelo DBA ou usuários avançados do BD.

• Otimizador de consultas: Módulo que tem a tarefa de produzir um plano de execução que permita escolher uma estratégia eficiente para executar a consulta submetida ao SGBD.

23

Page 25: 01.Apostila Banco de Dados II

• Executor de consultas: Módulo que gera e executa o código de baixo nível correspondente à consulta submetida ao SGBD.

• Gerenciador de transações: Módulo responsável pelo controle de concorrência, segurança, controle de restrições e recuperação de falhas das transações submetidas ao SGBD.

• Gerenciador de buffer: Módulo responsável por manusear buffers na memória principal mantendo ali os dados mais acessados pelo SGBD.

• Gerenciador de arquivos: Módulo responsável por transferir dados de baixo nível (arquivos físicos) entre o disco e o armazenamento central do computador (memória principal).

Diferença entre Administrador de banco de dados e Administrador de Dados

• Administrador do banco de dados : Também chamado de DBA - Database Administrator, representa o superusuário do SGBD, responsável por autorizar o acesso ao banco de dados, por coordenar e monitorar sua utilização e por adquirir recursos de hardware e software quando necessário. Ajuda na solução de problemas como violação da segurança ou por tempos demorados de resposta do sistema.

• Administrador de dados: É o profissional especializado nos dados da organização visando o desenvolvimento integrado dos sistemas de informação da empresa. Não precisa conhecer necessariamente o funcionamento do SGBD mas deve ser um profissional especializado na regra de negócios da organização ajudando o analista na definição do modelo conceitual.

Exercícios: Para cada questão abaixo escolha a opção correta apresentando a justificativa da sua escolha.

1) Em relação à arquitetura de um SGBD incorreto afirmar que:

a) O gerenciador de buffer interage como gerenciador de arquivos.

b) O otimizador de consulta interage diretamente com o dicionário de dados do SGBD.

c) O gerenciador de transações não resolve problemas de concorrência de acesso aos dados do Banco de Dados.

d) O executor de consultas realiza a execução de uma sentença SQL submetida ao SGBD.

2) Todas as afirmações abaixo são incorretas exceto:

a) O dicionário de dados é um dos componentes de um SGBD.

b) O gerenciador de buffer procura manter em memória principal os dados mais acessados pelas pelos usuários de um SGBD.

c) O otimizador de consulta não garante uma boa estratégia na execução de uma consulta SQL.

d) Uma das tarefas centrais de um administrador de dados é configurar um SGBD após sua instalação.

3) São funções de um DBA exceto:

a) Definir a estrutura de armazenamento do banco de dados e a estratégia de acesso aos dados.

b) Implementar os controles de segurança e integridade no SGBD.

c) Monitorar o SGBD.

d) Propor o DER.

4) São funções de um Analista de Sistemas exceto:

a) Montar a lista de eventos que um sistema deve responder.

b) Definir as restrições de domínio do banco de dados.

c) Definir um plano de contingência para recuperação do banco de dados.

d) Definir as entidades que um sistema deve ter.

24

Page 26: 01.Apostila Banco de Dados II

3.2. SGBDOO – SISTEMA GERENCIADOR DE BD ORIENTADO A OBJETOS

Por que usar SGBDO? • Existem aplicações de banco de dados complexas onde o modelo relacional é limitado:

o Banco de dados geográficos e multimídia. o Banco de dados para telecomunicações. o Banco de dados para engenharia e manufatura (CAD). o Banco de dados científicos (Genoma).

• Existem aplicações não convencionais que exigem estruturas de dados complexas, armazenamento de imagens e textos longos.

• Uso crescente de linguagens de programação orientadas a objetos: integrar dados e processos.

Como está o mercado atual de SGBDO?

• Fornecedores têm reconhecido a necessidade de incrementar o modelo relacional para atender às novas demandas.

• Versões comerciais: GEMSTONE, ONTOS, VERSANT, ARDENTE, POET. • SGBDORs: ORACLE 10g, DB2, CACHE e INFORMIX entre outros. • Última versão do padrão SQL (99) já inclui características básicas de OO. • ODMG (Object Database Management Group) tem definido padrões como a OQL

(Object Query Language) para SGBDOs. Características de um SGBDOR (ou SGBD Estendido): • Representações de atributos multivalorados. • Suporte Objeto-Relacional na SQL-99: construtores de tipos e herança.

o Create type tipo_endereco AS ( Rua varchar (45), Cidade varchar (25), CEP char(8) )

o Create type tipo_empregado AS ( Nome varchar (35), Endereco tipo_endereco, Idade integer ).

25

Page 27: 01.Apostila Banco de Dados II

• Tabelas aninhadas para representar objetos complexos (quebra da 1Forma Normal).

• Novos tipos de dados: BLOB (Binary Large Object – para vídeos e áudio), CLOB

(Character Large Object – para textos de documentos) , BFILE (arquivo binário armazenado à parte do BD).

Por que os SGBDOs não dominam o mercado?

o Não podemos abandonar os sistemas legados gerenciados pelos SGBDRs. o Muitas aplicações são simples e não precisam do poder dos SGBDOs. o Problemas na definição e implementação dos padrões estabelecidos. o Surgimento dos SGBDORs.

3.3. SGBDDD – SISTEMA GERENCIADOR DE BD DISTRIBUÍDOS

• O que é um Banco de Dados Distribuído (BDD)? É uma coleção de vários bancos de dados logicamente inter-relacionados distribuídos por uma rede computadores. Um SGBDD é o software que gerencia um BDD.

26

Page 28: 01.Apostila Banco de Dados II

• Vantagens de um SGBDD: 1. Melhoria na disponibilidade e confiabilidade dos dados. 2. Melhoria de desempenho das transações. 3. Gerenciamento dos dados de forma transparente.

• Técnicas do projeto de um BDD: 1. Replicação dos dados:

Diversas réplicas (cópias) das tabelas são armazenadas em locais diferentes. Pode não existir replicação, ou a replicação parcial, ou replicação total dos dados.

2. Fragmentação dos dados: Uma tabela é dividida em diversos fragmentos (linhas e/ou colunas) armazenados em locais diferentes. Pode ser uma fragmentação horizontal (linhas), Vertical (colunas) ou mista (híbrida).

• Desvantagens de um SGBDD: 1. Custo alto. 2. Gerenciamento difícil. 3. Implementação complexa:

27

Page 29: 01.Apostila Banco de Dados II

3.4. DATAWAREHOUSE (DW) E BUSINESS INTELIGENCE

• DW são sistemas baseados em dados históricos de banco de dados transacionais, ajudando na tomada de decisões por parte dos usuários da alta direção da empresa.

• Exemplos: 1. Supermercados: Colocar fraldas e cerveja um do lado do outro nas prateleiras do

supermercado aumentam as vendas de ambos os produtos. 2. Bancos: Identificação de perfil de clientes mais propensos à inadimplência. 3. Comércio: Evolução das vendas de um produto em uma região num período.

• Business Intelligence: Uma integração de aplicativos e tecnologias para captar, armazenar, analisar e prover acesso aos dados corporativos de forma a auxiliar os executivos nas decisões de negócio.

• Um sistema de DW é derivado de bancos de dados transacionais. Um DW é um BD. • OLPT x OLAP: OnLine Transaction Processing x OnLine Analytical Processing. • Características de um sistema de DW: 1. São sistemas orientados por temas: DW foca os temas/fatos importantes para o negócio da empresa. Exemplos: Clientes, Faturamento, Vendas, Compras, Estoque. 2. É Integrado: A base de dados do DW são os diversos “Databases” da empresa que, em princípio, não se comunicam diretamente. É necessário na importação destes dados, um tratamento padronizado dos mesmos. Exemplos: Sexo M/F, 0/1, H/M. 3. É variante no tempo: Os dados em um DW são variantes no tempo e referem-se a períodos de tempos bem definidos. Exemplos: Total de vendas no trimestre. Variação do estoque de um produto a cada mês. 4. Os dados em um DW não são voláteis : Em um DW a carga dos dados é feita uma vez e atualizada periodicamente (um mês, uma semana) com base nos dados dos BD Transacionais. Os dados não mudam On-Line.

28

Page 30: 01.Apostila Banco de Dados II

• Arquitetura de um Sistema de DW:

Fontes Externas

Extração Transformação

Carga Atualização

Softwares ETL

(Extrai, Transforma,

Carga)

DW

BD Operacionais

Data Marts (São DWs Setoriais)

Técnicas de Data Mining

(Mineração de Dados, Descoberta de conhecimentos)

Visão Dados (Slice/Dice)

Relatórios Gerenciais

Exemplo de um Cubo de Dados – Diferentes Relatórios Gerenciais:

29

Page 31: 01.Apostila Banco de Dados II

• Diferenças entre os tipos de Sistemas: Características BDs Transacionais DW

Objetivo Operações diárias do negócio Análise do negócio Uso Operacional Informativo Tipo de Processamento OLTP OLAP Unidade de Trabalho Inclusão, Alteração e Exclusão Carga e Consulta Número de Usuários Milhares Dezenas Tipo de Usuários Operadores Alta Gerência Condição dos Dados Dados Operacionais Dados Analíticos Volume Megabytes Gigabytes e Terabytes Histórico 60 a 90 dias 5 a 10 anos Granularidade Detalhados Resumidos Redundância Não ocorre Ocorre Atualização Contínua (tempo real) Periódica (Batch) Uso SQL Select/Insert/Delete/Update/Joins Funções Agregadas/SubConsultas

3.5. MODELAGEM DE DATAWAREHOUSE E DATA MARTS

• Técnica mais usada: Modelagem Multidimensional (Star Schema – Ralph Kimball) • Passos: 1. Definir as necessidades gerenciais da empresa: Exemplos: a) Qual o valor das vendas realizadas ao longo dos últimos 5 anos por estado do Brasil? b) Qual a margem de lucro de um dado produto, por mês e por loja no último ano?

2. Definir as tabelas dimensões que serão necessárias: Objetivo da tabela dimensão: Reunir os atributos que serão utilizados para qualificar as consultas e cujos valores serão utilizados para agrupar e sumarizar as métricas (ou fatos). Exemplos: Dimensão Produto: (COD_PRODUTO, DESCRICAO, LINHA, CATEGORIA) Dimensão Tempo: (COD_TEMPO, DIA, MÊS, SEMESTRE, ANO) Dimensão Localidade: (COD_LOJA, LOJA, CIDADE, ESTADO, REGIÃO) Dados na Tabela Produto: 1 Lápis número 2 – Faber Lápis Escolar 2 Caneta Azul Bic Fina Caneta Escolar 3 CD Regravável – Tent Suprimento Informática ... ... ... ... Dados na Tabela Tempo: 1 01/01/2007 Janeiro 2007 1º. Semestre 2007 2007 2 02/01/2007 Janeiro 2007 1º. Semestre 2007 2007 ... ... ... ... ...

30

Page 32: 01.Apostila Banco de Dados II

Dados na Tabela Localidade: 1 EPA BH Dom Cabral Belo Horizonte MG Sudeste 2 EPA Carmelo Vitória ES Sudeste ... ... ... ... ... Atenção: Observe a redundância dos dados nas tabelas (tabelas não normalizadas). 3. Definir a Tabela Fato (Para Data Mart): Objetivo da tabela fato: Conter as métricas ou valores a serem analisados pelos usuários do DW Exemplo: Vendas (COD_PRODUTO, COD_TEMPO, COD_LOJA, VALORVENDA, QTDEITEM, PRECOMEDIOITEM, CUSTOMEDIOITEM, MARGEMLUCRO, ETC) Dados na Tabela Fato Vendas: 40 5 6 432,50 290 2,50 ... 40 5 12 52,50 27 2,40 ... ... ... ... ... ... ... 4. Montar o Star Schema:

31

Page 33: 01.Apostila Banco de Dados II

• Representação do modelo estrela:

Observação: Existem versões normalizadas para o modelo estrela (snowflake) 5. Usar ferramenta ETL. 6. Usar ferramentas para análise dos dados (data mining) e visualização dos dados.

Conclusão: 1. DW é voltado para a tomada de decisões. 2. Não basta ter um modelo bom, é necessário ter boas ferramentas de visualização. 3. Uso cada vez maior: diferencial competitivo no mercado.

32

Page 34: 01.Apostila Banco de Dados II

4. Estudos de Casos 1. Sistema bancário Um possui diversas agências espalhadas pelo Brasil. Um cliente do banco só pode pertencer a uma destas agências. O cliente solicita abertura de conta corrente e/ou poupança. Existem diversos tipos de movimentações que os clientes podem realizar nas suas contas como saques, depósitos, débitos de cheques, extratos, saldos, etc. Estas movimentações podem ou não serem tarifadas dependendo do tipo do cliente (normal, preferencial, especial, empresarial, etc). Todo dia de vencimento da conta de poupança deve ser executado um processo que atualiza o saldo da conta, baseado numa tabela diária de correção monetária que contém o índice a ser aplicado. Os históricos das correções monetárias aplicadas nas contas poupanças devem ser mantidos pelo sistema. O cliente pode opcionalmente autorizar que determinadas quantias de sua conta corrente sejam depositadas em aplicações financeiras como fundos de ações, CDBs, RDBs, etc. Cada tipo de aplicação financeira possui uma tarifa e prazo da aplicação. Quando do vencimento da aplicação ou quanto solicitado o resgate o sistema automaticamente aplica a taxa do dia para a aplicação. Semanalmente devem ser emitidos diversos relatórios estratégicos que mostrem o desempenho geral de cada agência do banco, clientes com saldos negativos, malas diretas para clientes com saldo acima da média. O cliente pode emitir extratos e saldos de contas (corrente e poupança) e aplicações financeiras em qualquer momento e em qualquer período. 2. Sistema de controle de um congresso de informática Um congresso consiste na seleção de trabalhos versando cada um sobre um único tema. Para cada tema há um ou mais professores responsáveis pela avaliação dos trabalhos submetidos previamente pelos autores. Pode haver mais de um professor por tema, mas cada professor só pode ser responsável um tema. Não há limite quanto ao número de trabalhos inscritos por cada autor. Cada professor que avalia um trabalho dá uma nota de 0 a 10. Os trabalhos que obtiveram a melhor nota por tema é selecionado originando uma palestra que será apresentada no congresso. As palestras serão realizadas em diversas salas e horários mas cada palestra só será apresentada uma vez. A organização do congresso precisa dispor de informações sobre a quantidades de lugares e os recursos (como retroprojetor, painel, computador) a serem utilizados por cada uma das palestras. A palestra deverá ser apresentada por um dos autores em um tempo previamente combinado para cada um. O público realizará avaliação de cada palestra e a média obtida da palestra deverá ser registrada. Os participantes devem se inscrever para o congresso, podendo assistir qualquer palestra. No certificado de participação deverão constar as palestras assistidas por cada participante. Esta informação será colhida quando da entrada do participante na sala da palestra. É importante manter o cadastro das empresas às quais pertencem os participantes para envio de certificado. Se o participante não estiver vinculado a nenhuma empresa seus dados cadastrais devem ser mantidos pelo sistema. O sistema solicitado deve ser capaz de, informar palestras inscritas por tema, com autor(es) e apresentador, resumo; data, sala e horário de cada palestra; controlar inscrições e freqüência dos participantes e emitir os certificados de participação. É importante manter no sistema todas as palestras e trabalhos já apresentados nos congressos anteriores. 3.Sistema para uma agência de turismo Uma agência de turismo deseja informatizar a oferta e o controle de pacotes de viagens nacionais e internacionais. O gerente usuário forneceu as seguintes informações. Um pacote é um programa turístico nacional ou internacional. Cada pacote turístico envolve várias cidades numa seqüência previamente definida pela agência, o que define o roteiro do pacote. O deslocamento para cada cidade do roteiro pode ser feito através de meios de transporte distintos. Em cada cidade envolvida no roteiro o turista pode ficar hospedado em um determinado Hotel conveniado o que compreende a estadia nas cidades do roteiro. Um pacote pode ser realizado várias vezes em épocas diferentes. Cada realização é chamada “oferta” com preço base, período de início e período de término. O turista compra uma oferta de um pacote num determinado período. Cada cidade recebe uma classificação de acordo com seu atrativo principal (ex. estância, praia, histórica, montanha, etc). Uma cidade pode receber mais de uma classificação como a Cidade de Salvador que é histórica e uma cidade praiana. Atrações locais de uma cidade define os pontos turísticos da cidade e podem ser de diversos tipos como museus, restaurantes, praias, igrejas, etc. É importante conhecer a localização dos pontos turísticos das cidades que fazem parte do roteiro, bem como uma breve descrição do ponto turístico e se for pago a visita o preço estimado. Os hotéis conveniados nas cidades que fazem parte do roteiro possuem diferentes categorias (três, quatro ou cinco estrelas). O usuário deseja obter relatórios contendo quais cidades, estados, ou países fazem parte do pacote, quais os hotéis e suas classificações por categoria, quais as atrações turísticas de uma cidade, qual a seqüência entre as cidades de um pacote, quais os horários de chegada e saída de cada cidade e qual o meio de transporte utilizado para os deslocamentos entre elas em cada pacote, qual o tempo de permanência em dias em cada cidade, qual o idioma principal de cada país visitado em um pacote internacional, quais os turistas participantes de cada oferta de pacote e de quais pacotes participou o turista, total de vagas em cada oferta, total arrecadado por ofertas de um determinado pacote em um dado mês. 4.Sistema de apuração de uma eleição A Justiça eleitoral deseja automatizar o processo de votação e apuração dos votos da próxima eleição. Para isso é fornecido o modo de funcionamento da eleição. Cada cidade possui várias zonas eleitorais que funcionam em prédios requisitados pela Justiça Eleitoral, sendo que cada uma das zonas engloba várias seções eleitorais. É importante possuir dados sobre os prédios existentes nas cidades. Várias zonas eleitorais podem funcionar em um mesmo prédio. Em alguns casos, uma zona eleitoral pode ser dividida em mais de um prédio. Um prédio possui várias salas onde funcionam as seções eleitorais. Uma seção eleitoral funciona em somente um prédio. Cada eleitor está vinculado a uma seção eleitoral. Na época da eleição o TRE define as urnas, especifica um número a elas e disponibiliza uma listagem de eleitores para cada urna. Uma seção eleitoral está associada e uma e somente uma urna e vice versa. É convocado pelo TRE com base na formação escolar do eleitor algumas pessoas responsáveis pela urna durante a votação. Isto define a mesa eleitoral composta pelos mesários com títulos como presidente de mesa, primeiro secretário, segundo secretário, etc. Cada candidato

33

Page 35: 01.Apostila Banco de Dados II

concorre a um cargo (prefeito, deputado municipal, estadual, federal, senador, etc) e é filiado a um único partido político. Para cada cargo disputado o eleitor pode votar no candidato, no partido, em branco ou anular o voto. Os votos são totalizados por urna e o sistema deve emitir os boletins de urna. Deverá produzir uma listagem de eleitores de cada seção eleitoral e o resultado geral da eleição por seção e por zona. Deve ser ainda emitido uma listagem contendo a totalização dos 10 candidatos mais votado por cargo, a quantidade de votos por partido para um dado cargo , a quantidade de votos nulos por cargo e a quantidade de eleitores que não votaram por seção e por zona. 5. Sistema estacionamento Modelo O estacionamento Modelo funciona como a maioria dos estacionamentos de BH. Ao deixar o carro o cliente recebe um comprovante no qual consta a placa do veículo, a categoria do veículo e a hora da entrada. Ao sair o cliente apresenta o comprovante e paga em função do tempo em que o veículo ficou estacionado e da categoria do veículo. Existem 4 categorias de veículos "Pequeno, Médio, Grande e Especial". Para cada categoria existe uma taxa horária de estacionamento, cobrada a cada 30 minutos. Um recibo de estacionamento com hora de entrada e de saída, placa e categoria do veículo e valor pago é entregue ao cliente após o pagamento da conta. Todos estes dados devem ser armazenados no banco de dados do sistema. O controle de vagas será automatizado pelo sistema. As vagas do estacionamento são demarcadas em função das categorias, ou seja, dado uma vaga é necessário saber qual a categoria de veículo ela comporta. O recepcionista atribui as vagas desocupadas aos veículos, na ocasião em que eles entram. Por isso o sistema deve exibir um painel mostrando onde se encontra uma vaga livre de acordo com a categoria do veículo. A vaga passa então a ser ocupada e torna-se novamente livre com a saída do veículo. Note que é importante conhecer em que vaga o veículo está estacionado na ocasião da saída, desta maneira o manobrista não perde tempo em procurá-lo. Além dos clientes avulsos, o estacionamento Modelo atende a mensalistas e empresas conveniadas. Os mensalistas pagam uma boleta mensal de acordo com a categoria dos veículos que possuem e têm direito a estacionar o carro a qualquer hora do dia. Ao entrar no estacionamento, eles identificam-se como mensalistas por meio de uma carteirinha especial, emitida na ocasião do pagamento da mensalidade. Caso um mensalista inicie um contrato durante o mês o valor é calculado de maneira proporcional considerando-se os dias que faltam até o final do mês (mês padrão de 30 dias). Na carteirinha de mensalistas consta o mês de vigência e dados do mensalista. É importante saber quais os veículos um mensalista possui. As empresas conveniadas fazem um contrato com o estacionamento Modelo no sentido de evitar que seus visitantes paguem o estacionamento. Dados da empresa devem ser armazenados como o número, CGC da empresa, endereço, data do contrato, etc. No caso das conveniadas o estacionamento Modelo emite cupons contendo um número único, o nome da empresa e dados do estacionamento e os envia às empresas conveniadas quando solicitado. É importante manter o controle dos cupons emitidos. O funcionário responsável na empresa conveniada deve carimbar os cupons relativos aos veículos dos visitantes num espaço especialmente reservado para essa finalidade. Neste caso o estacionamento não emite um recibo, mas envia ao final de cada mês uma fatura aos conveniados constando a relação dos números dos cupons utilizados pela empresa. Sobre o total da fatura é aplicado um desconto padrão de 15%. Para efeitos legais o estacionamento deve manter todos os históricos de ocupações de veículos junto às vagas do estacionamento contendo a placa do veículo, a vaga ocupada, a hora início e a hora fim que o veículo ocupou a vaga. Não é importante guardar dados dos clientes avulsos. O controle de status das boletas mensais, faturas e cupons deve ser feito pelo sistema. A qualquer momento pode ser gerado relatórios contendo a taxa de ocupação das vagas, valores recebidos com diaristas, conveniados e mensalistas 6. Sistema para controle de cinemas Deseja-se projetar um sistema que atenda às necessidades de controle dos cinemas e filmes de uma determinada empresa de distribuição de filmes no país. A empresa de distribuição possui diversos escritórios espalhados pelos municípios do pais. Os escritórios são responsáveis por distribuir os filmes para os diversos cinemas da cidade. Em cada município existe no máximo um escritório de distribuição mas um município pode possuir vários cinemas. Cada cinema possui uma identificação única, um nome fantasia, um endereço completo, incluindo rua, avenida, bairro e CEP. Um cinema pode possuir várias salas de exibição e é necessário conhecer a capacidade de lotação destas salas. Os filmes são cadastrados no sistema e sempre é classificado em um determinado gênero, o que define a censura do filme. Cada filme é registrado com um título original, ano de produção e sua duração e se for filme estrangeiro possuirá também o pais de origem, o título em português e se é legendado ou dublado. Se o filme for nacional é importante saber o nome do principal patrocinador e se foi ou não feito através da lei federal de incentivo à cultura. Informações sobre os atores e atrizes que compõem o elenco principal do filme é importante. Estas informações são nome e a nacionalidade do ator, além disso, saber qual o diretor do filme é interessante. Existirá um único diretor para cada filme. Os atores/atrizes de um filme podem, obviamente, atuar em diversos filmes, assim como o diretor de um filme pode também ser ator neste filme ou ainda mais, ser ator em outro filme. Como já foi dito, alguns cinemas possuem várias salas de exibição e cada sala pode apresentar mais de um filme em cartaz. As sessões possuem horários que variam de acordo com a duração do filme, havendo sempre um intervalo de aproximadamente 15 minutos entre elas. As sessões devem ter seu público registrado diariamente, para que se permita a totalização dos assistentes quando o filme sair de cartaz, ou a qualquer instante. A programação semanal do cinema e suas salas é um relatório importante contendo o dia de exibição do filme, sinopse, diretor, hora início, e uma cotação indicando se o filme é bom ou não. Além das informações acima os usuários necessitam de relatórios como: apuração do público por municípios, por cinemas, e por salas e sessões; permitir uma forma de consulta que dado um determinado ator ou atriz, sejam localizados os cinemas e salas onde estão em cartaz os filmes em que este ator ou atriz atua; em quais cinemas está sendo exibido um determinado gênero de filme; em quais cinemas estão sendo exibido filmes nacionais; e quais filmes de um dado diretor está em cartaz. 7. Sistema hoteleiro Deseja-se desenvolver um sistema para um hotel que atenda aos seguintes requisitos. O hotel possui diferentes quartos que são classificados em uma das seguintes categorias: Presidencial, Econômica, Simples, Duplo ou Triplo. O valor base da diária dos quartos

34

Page 36: 01.Apostila Banco de Dados II

depende da categoria do quarto. Quando o cliente telefona ou vem até o hotel e pede para reservar um quarto a recepção verifica se existe quarto disponível no período solicitado. Caso positivo, o cliente é cadastrado e é feita a reserva do quarto. Caso negativo, o cliente é informado da não disponibilidade do quarto. O período possui uma descrição, data início, uma data fim, uma taxa adicional sobre o valor base da diária dos quartos se o período for em alta temporada. Quando o cliente não mais desejar o quarto reservado o funcionário providencia o cancelamento da reserva, disponibilizando novamente o quarto. Quando o cliente não comparecer ao hotel para hospedar-se até às 12:00hs do dia da reserva, essa deve ser cancelada automaticamente pelo sistema. Quando o cliente ocupar um quarto reservado previamente, caracteriza-se uma ocupação do quarto. Neste caso um pacote com informações úteis sobre a utilização dos serviços do hotel é emitido ao cliente. Neste pacote consta o horário do café da manhã, do almoço, das piscinas, os diversos telefones do hotel, pontos turísticos da cidade, etc. Isto tudo deve ser armazenado pelo sistema. Diariamente é verificado se o cliente consumiu algum produto do frigobar do quarto onde está hospedado, para ser armazenado no sistema. No momento de ocupação de um quarto, o cliente recebe uma relação da quantidade e dos preços dos produtos que se encontra no frigobar. Toda vez que um produto é consumido é dado baixa no estoque. Se a quantidade de estoque de um produto estiver baixo é emitido um relatório à gerência solicitando a compra do produto ao fornecedor previamente cadastrado. Quando o cliente deixar o hotel será fornecida a respectiva conta e o quarto estará disponível para limpeza. Quando o quarto estiver limpo a recepção do hotel torna-o disponível. O cliente pode pagar a conta à vista, cheque ou usando cartão de crédito. Dados sobre a conta são importantes serem armazenados como a forma de pagamento, valor da hospedagem, total do frigobar, telefonemas particulares do cliente, o valor total dos serviços adicionais, dia do pagamento e valor total da conta. Diariamente, deve ser emitido um relatório contendo os quartos ocupados e não ocupados e o fluxo de caixa do hotel (contas a pagar e a receber). Malas diretas com as promoções de um período pode ser enviadas aos clientes.

35