Bancos de Dados Objetorelacional e Orientados a Objetos
Bancos de Dados Objeto-relacional e Orientados a Objetos Especialização em Tecnologia da Informação Maria Carolina (mcts@cin. ufpe. br)
Motivação Conteúdo na prática Projeto a ser desenvolvido Prática é necessária
Roteiro Metodologia Exemplo Minimundo Modelagem Implementação Tipos Tabelas Apresentação de uma solução Consultas
Metodologia
Metodologia escolhida Uso de um caso de estudo Firmar conceitos Tirar dúvidas Realizar implementação . . .
Caso prático
Domínio da aplicação Qualquer estabelecimento comercial que precise armazenar informações sobre seus funcionários, clientes, produtos. . . Supermercado simples Loja que vende a varejo ou a atacado . . .
Minimundo (1) Um cliente do supermercado é identificado por um código único, nome, endereço, telefone, CPF e data de nascimento. Cada cliente realiza vários pedidos, os quais só podem estar associados a um cliente.
Modelo Conceitual (1)
Minimundo (2) Sobre um pedido, deseja-se armazenar um código de controle e a data de realização. A cada pedido, um ou mais produtos podem ser solicitados, mas é necessário saber a quantidade vendida e o valor de venda de cada unidade.
Modelo Conceitual (2)
Minimundo (3) Um produto é reconhecido no sistema através de um código único, nome e preço. Cada produto é fornecido por um fornecedor, o qual é representado por um identificador, nome, endereço e CNPJ.
Modelo Conceitual (3)
Minimundo (4) Cada pedido é atendido por apenas um funcionário, o qual é representado por um código único, nome, telefone, CPF, data de nascimento, endereço, função e salário, mas o mesmo funcionário é responsável por mais de um atendimento. Não existe a obrigatoriedade de que pessoas com a mesma função recebam o mesmo salário.
Modelo Conceitual (4. 1)
Modelo Conceitual (4. 2)
Minimundo (5) Os funcionários possuem uma organização interna na empresa: eles estão distribuídos em departamentos, porém um funcionário trabalha em apenas um departamento. Cada departamento possui um nome e um código.
Modelo Conceitual (5)
Minimundo (Observações) Quando houver necessidade de armazenar telefone de alguém envolvido no sistema, deve-se armazenar no máximo 3 telefones (residencial, celular e comercial). Já quando se falar em endereço, lembrar de especificar cada campo: Logradouro CEP Número Bairro Cidade Estado
Implementação
Implementação Implementar esse modelo conceitual usando os conceitos Objeto-relacional da Oracle. Tipos Tabela de tipos Ref Nested Varray . . .
Contas Oracle www. cin. ufpe. br/~mcts/ETI/OR-Oracle Arquivo. Contas ORACLE. txt
Uma solução
Minha implementação www. cin. ufpe. br/~mcts/ETI/OR-Oracle Script. Criacao. SQL Arquivos adicionais ▪ Script. DROP. SQL ▪ Script. Povoamento. SQL
Consultas
Consulta (1) Selecionar os dados clientes que moram em Recife. SELECT C. * from tb_cliente C WHERE C. endereco. cidade = 'Recife'
Consulta (2) Selecionar os telefones de todos os funcionários. SELECT F. nome, T. * FROM tb_funcionario F, TABLE(SELECT telefones FROM tb_funcionario WHERE id = F. id) T ORDER BY 1, 2;
Consulta (3) Selecionar o nome e a quantidade de funcionários de cada departamento. SELECT D. nome, COUNT(value(FUNC)) from tb_departamento D, TABLE(SELECT dep. funcionarios FROM tb_departamento dep where dep. coddepartamento = D. coddepartamento) FUNC GROUP BY D. nome
Consulta (4) Inserir um novo funcionário e associá-lo ao departamente de vendas. INSERT INTO tb_funcionario VALUES (8, null, 'Funcionario Novo', TO_DATE('20/08/1980', 'dd/MM/yyyy'), array_telefone(null, tp_telefone(81, 89632541), null), tp_endereco('Ponte Velha', 1548, 'Recife Antigo', 'Recife', 'PE', '20639 -154'), 1000, 'Vendedor', NESTED_REF_PEDIDO()); INSERT INTO TABLE(SELECT D. FUNCIONARIOS FROM tb_departamento D WHERE D. nome = 'Vendas') F VALUES ((SELECT REF(Func) FROM tb_Funcionario Func WHERE Func. id = 8));
Consulta (5) Selecionar quantos pedidos cada cliente já realizou. SELECT c. nome, COUNT(p. codigo) AS Qtde. Pedidos FROM tb_cliente c LEFT OUTER JOIN tb_pedido p ON (p. ref_cliente = REF(c)) group by c. nome;
Consulta(6) Selecionar o número de celular de cada funcionário Escreva uma função que receba dois parâmetros: ▪ Uma lista do tipo dos telefones ▪ Índice onde se localiza o telefone que ser que buscar. Utilize essa função para implementar essa consulta
Consulta (6) CREATE OR REPLACE FUNCTION get. Member (vlist tb_funcionario. telefones%type, indice NUMBER) RETURN tp_telefone IS BEGIN IF indice <= vlist. last THEN RETURN vlist(indice); END IF; RETURN NULL; END get. Member; SELECT nome, get. Member(telefones, 2) FROM tb_funcionario; SELECT X. nome, DECODE(get. Member(X. telefones, 2), null, 'No members', to_char (get. Member(X. telefones, 2). to. String)) FROM tb_funcionario X;
Consulta (7) Selecionar o valor gasto por cada cliente que já realizou alguma compra. SELECT S. ref_pedido. ref_cliente. nome As nome. CLiente, SUM(S. valorvenda) AS Qtde. Gasta from tb_solicitacao S GROUP BY S. ref_pedido. ref_cliente. nome;
Dúvidas do projeto O que sobrar do tempo. . . =D
Bancos de Dados Objeto-relacional e Orientados a Objetos Especialização em Tecnologia da Informação Maria Carolina (mcts@cin. ufpe. br)
- Slides: 35