Estudo de Caso, modelo Oracle 10g

Slides:



Advertisements
Apresentações semelhantes
O Comando DROP INDEX Para eliminar um índice definido sobre uma tabela, utilize: Drop Index on ; Ex: No Access: Drop Index X on.
Advertisements

I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Object Definifion Language - ODL
Gerenciamento de Dados e Informação Estudo de caso – PL/SQL
VI- Implementação Objeto-Relacional
Modelo de Objetos ODMG.
SQL Renata Viegas.
SQL Avançado Continuação
Banco de Dados II Prof. Carlos Eduardo Pires
Prof.: Bruno Rafael de Oliveira Rodrigues
Prof.: Bruno Rafael de Oliveira Rodrigues
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
Maurício Edgar Stivanello
SGBD.
1 MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE) BREVE HISTÓRICO CARACTERÍSTICAS CONCEITOS DE PROGRAMAÇÃO ORIENTADA A OBJETOS MODELAGEM DE ANÁLISE E DE.
Introdução à Engenharia da Computação
Oficina sobre banco de dados
FRB - Maio 2002MCS9–1 Regras (Restrições) de Integridade Sistemas comerciais relacionais são muito finos de restrições para garantir a qualidade dos dados.
Bancos de Dados Orientados a Objeto
Banco de dados Profª Kelly Medeiros.
Equipe de monitoria Aula prática 4.  Tipos  Tabela de Objetos  Herança  Métodos  Referências  Coleções  Composição de coleções  Conectividade.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Conceitos de SGBD Objeto-Relacional Oracle 10g [2]
Equipe de monitoria Aula prática 4
Equipe de monitoria Aula prática 4
Vânia Maria Ponte Vidal
SQL Server 2012 Tipos de Dados e Tabelas
PL/SQL, Procedures e Funções
Autora: Carla DeAngelis Autor: Adilson da Silva Lima
Design Patterns / Acesso ao banco de dados (java.sql)
Tipos de Linguagens do Banco de Dados
Equipe de monitoria Aula prática 3.  Caso de estudo  Igualando situações  Cursor  Function  Procedure  Trigger  Package  Surpresa...
Equipe de monitoria Aula prática 4
Primeira aula de PL/SQL Parte II
Especialização em Tecnologia da Informação
Oracle 9i: SQL e PL/SQL Bruno Celso Cunha de Freitas
Conceitos de SGBD Objeto-Relacional Oracle 10g [1]
III – Oracle10g Apontadores – Tipo de Dado (REF).
III – O Modelo OR Estudo de Caso, modelo Oracle 10g.
III – Oracle10g Funções que Manipulam Apontadores.
III – Oracle 10g Herança.
Com coleções, cursor não é mais necessário
SEQUENCE, PROCEDURE, FUNÇÃO, TRIGGER
Desenvolvendo um script SQL
Linguagem SQL.
Banco de dados.
Criação de Tabelas. CREATE TABLE nome_da_tabela ( >>. >> ) Ex.: SQL SERVER 2008 CREATE TABLE pessoa ( CPF VARCHAR(11) NOT NULL, NOME VARCHAR(100) NOT.
Projeto de Sistemas de Informação Prof. Schneider Oracle Object-Relational.
SQL- Structured Query Language  SQL é uma linguagem de comandos para interagir com uma BD relacional (não é case-sensitive).  A linguagem Java permite.
Ricardo Ferreira Schiavo
©Silberschatz, Korth and Sudarshan (modificado)9.1.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
III – Oracle 9i Indexação. Índices Baseados em Funções É um índice baseado no valor de retorno de uma expressão ou função –A função pode ser um método.
Banco de dados 1 Modelagem de Dados Utilizando MER
III - Oracle9i Apontadores – Tipo de Dado (REF). Identificador de Objeto A todo objeto de uma “object table” é associado um OID (“Object IDentifier”)
Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina.
Equipe de monitoria Aula prática 4.  Tipos  Tabela de Objetos  Herança  Métodos  Referências  Coleções  Composição de coleções  Conectividade.
 Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto.
III – Oracle 9i Herança. Pessoa EmpregadoEstudante Est. Parcial Pessoa_tab.
III – Oracle 9i Herança. Pessoa EmpregadoEstudante Est. Parcial Pessoa_tab.
Banco de Dados Relacional Objeto-
III – O Modelo OR Estudo de Caso, modelo Oracle9i.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Daniel Paulo Introdução Neste capítulo trataremos a relação entre tabelas e FILEGROUPS, bem como a alocação interna de dados.
Linguagem de definição de dados - SQL
Fundamentos de Banco de Dados Prof. André Cypriano M. Costa
Banco de Dados II Prof: Márcio Soussa Curso de Sistemas de Informação Faculdades Jorge Amado.
Programação para Internet Aula 11 SQL (Introdução a linguagem, comandos de modificação: Create, Drop, Alter, Insert, Delete, Update)
Prática O-R Fernando Fonseca.
Aula Prática Objeto-Relacional Monitoria GDI
Transcrição da apresentação:

Estudo de Caso, modelo Oracle 10g III – O Modelo OR Estudo de Caso, modelo Oracle 10g

Pedidos de Compra Esquema Conceitual

Interface I-Endereco { attribute struct end {string rua, string cidade, string estado, string cep} endereco; } Class Cliente : I-Endereco (extent Clientes key codigo) attribute integer codigo; attribute string nome; attribute Array<string, 10> telefones

Class Pedido : I-Endereco (extent Pedidos key codigo) { attribute integer codigo; attribute date data_pedido; attribute date data_entrega; attribute List<struct linha{integer num_linha, integer quantidade, float desconto}> linhas; relationship List<Produto> refere_se; relationship Cliente feito_por; float total() } Class Produto (extent Produtos key codigo) { attribute integer codigo; attribute float preco }

Pedidos de Compra Esquema Lógico Oracle

Problemas a Resolver Uma nova sintaxe Algumas coisas mudam Class ODL  Type Oracle Extent ODL  Object Table Oracle Oracle PL/SQL Algumas coisas mudam Oracle não oferece os tipos-coleção Set, Bag, Array e List Tipos-coleção Oracle: Varray e Nested Table Oracle não oferece o conceito de Interface, e nem de Estrutura Oracle Abstract (Virtual) Type Um tipo sem repositório (“default”)

No mundo da implementação, temos que pensar em situações específicas de ambientes de produção “Deadlock” de tipos Tipos inter-dependentes Corpos dos métodos Ordenação de objetos Controle de acesso a BD (Segurança)

Solução Oracle para os Problemas Apontados Resolvendo “deadlock” de tipos Tipos incompletos CREATE TYPE Produto CREATE TYPE Pedido

Ordenação de objetos Métodos de instância ORDER MAP

Segurança para invocação de métodos WNDS Write No Database State WNPS Write No Package State RNDS Read No Database State RNPS Read No Package State

Tipos Instanciável e Não-Instanciável No Oracle, todo tipo é instanciável (“default”) Se o tipo for não instanciável, a cláusula Not Instantiable deve ser explicitamente declarada Se o tipo for instanciável Seu repositório (“extent”) será criado possivelmente mais tarde CREATE TABLE ... OF <type> ... (<integriy constraints>)

Tipo abstrato Um tipo abstrato pode ser Instanciável Não instanciável porém jamais será instanciado Tipo abstrato e Tipo instanciável são conceitos ortogonais

Tipos instanciáveis e abstratos CREATE TYPE Telefones AS VARRAY(10) OF VARCHAR2(20) CREATE TYPE Endereco AS OBJECT ( rua VARCHAR2(200), cidade VARCHAR2(200), estado CHAR(2), cep VARCHAR2(20) )

Um tipo instanciável e concreto CREATE TYPE Cliente AS OBJECT ( codigo NUMBER, nome VARCHAR2(200), endereco Endereco, telefones Telefones, ORDER MEMBER FUNCTION comparaClientes(x IN Cliente) RETURN INTEGER, PRAGMA RESTRICT_REFERENCES ( comparaClientes, WNDS, WNPS, RNPS, RNDS) )

Sobre Métodos Tipo ORDER Deve retornar sempre um inteiro com sinal (INTEGER) Deve ter 2 parâmetros de entrada SELF Um objeto X do mesmo tipo de SELF A interpretação do Oracle é sempre Positivo, SELF > X Negativo, SELF < X Zero, SELF = X Em resumo, somente a lógica do método é da exclusividade do projetista do BD

Sobre Métodos Tipo MAP Objetos de tipo definido pelo usuário Objetos de um dos tipos primitivos* Map() *- INTEGER, NUMBER, DATE, CHAR e VARCHAR

Mais Transformação (Mapeamento) Relationship ODL REFerence Oracle

Sobre Repositórios de Tipo “Object Table” de um Tipo É uma tabela onde cada linha representa o estado corrente de um objeto do tipo ~1FN Coluna Endereco é de um tipo estruturado Coluna Telefones é de um tipo coleção – VARRAY - de tipos simples – VARCHAR2 Coluna Linhas é de um tipo coleção – NESTED TABLE - de tipos estruturados - Linha

Onde estão os métodos comuns aos objetos de uma “object table”? Em um outro lugar (depende do SGBD específico) Entenda uma “object table” como uma representação tabular ou relacional dos estados (i.e., valores dos atributos) dos objetos de um certo tipo

Esquema Oracle para o BD Pedido

Um Esboço de Processo de Definição de Esquema OR e de Criação de BDOR Passo 1: Definição de Tipos Passo 2: Definição de Repositórios de Tipos Passo 3: Definição de Corpos de Métodos de Tipos Passo 4: Criação de Objetos

Passo 1: Tipos

Tipos Incompletos CREATE TYPE Cliente CREATE TYPE Produto CREATE TYPE Pedido

Tipos Abstratos, para o Tipo Concreto Cliente CREATE TYPE Telefones AS VARRAY(10) OF VARCHAR2(20) CREATE TYPE Endereco AS OBJECT ( rua VARCHAR2(200), cidade VARCHAR2(200), estado CHAR(2), cep VARCHAR2(20) )

Tipo Concreto Cliente CREATE TYPE Cliente AS OBJECT ( codigo NUMBER, nome VARCHAR2(200), endereco Endereco, telefones Telefones, ORDER MEMBER FUNCTION comparaClientes(x IN Cliente) RETURN INTEGER, PRAGMA RESTRICT_REFERENCES ( comparaClientes, WNDS, WNPS, RNPS, RNDS) )

Tipos Abstratos para o Tipo Concreto Pedido CREATE TYPE Linha AS OBJECT ( num_linha NUMBER, refere_se REF Produto, quantidade NUMBER, desconto NUMBER ) CREATE TYPE ListaDeLinhas AS TABLE OF Linha

Tipo Concreto Pedido CREATE TYPE Pedido AS OBJECT ( codigo NUMBER, feito_por REF Cliente, data_pedido DATE, data_entrega DATE, linhas ListaDeLinhas, MAP MEMBER FUNCTION getCodigoPedido RETURN NUMBER, MEMBER FUNCTION total RETURN NUMBER, PRAGMA RESTRICT_REFERENCES (getCodigoPedido, WNDS, WNPS, RNPS, RNDS), PRAGMA RESTRICT_REFERENCES (total, WNDS, WNPS) )

Tipo Concreto Produto CREATE TYPE Produto AS OBJECT ( codigoProduto NUMBER, preco NUMBER) Obs: Os repositórios dos tipos Cliente, Pedido e Produto serão criados mais tarde

Passo 2: Repositórios Object Tables

Criando as “Object Tables” CREATE TABLE Clientes OF Cliente (PRIMARY KEY (codigo)) CREATE TABLE Produtos OF Produto (PRIMARY KEY (codigo))

CREATE TABLE Pedidos OF Pedido (PRIMARY KEY (codigo), FOREIGN KEY (feito_por) REFERENCES Clientes) NESTED TABLE linhas STORE AS LinhasPedido ALTER TABLE LinhasPedido ADD (SCOPE FOR (refere_se) IS Produtos)

- Cada valor da coluna Linhas é uma tabela (“nested table”), Clientes Produtos Pedidos Feito _por Linhas 1 Linha: o estado de um objeto 2 - Cada valor da coluna Linhas é uma tabela (“nested table”), dentro da tabela Pedidos - Todos os valores de Linhas são armazenados em uma estrutura única, LinhasPedido, indexada

LinhasPedido Índice p/ Pedido Índice p/ Linhas Produtos Linha 3, de X Entrada X Entrada Y Linha 1, de X Linha 4, de X Pedido X (Integridade de Escopo) Linha 2, de X

Passo 3: Corpos de Métodos

Método de Cliente CREATE OR REPLACE TYPE BODY Cliente AS ORDER MEMBER FUNCTION comparaClientes (x IN Cliente) RETURN INTEGER IS BEGIN RETURN SELF.codigo - x.codigo; END;

Método de Pedido CREATE OR REPLACE TYPE BODY Pedido AS MAP MEMBER FUNCTION obtemCodigo RETURN NUMBER IS BEGIN RETURN SELF.codigo; END; MEMBER FUNCTION total RETURN NUMBER IS Total NUMBER := 0; SELECT SUM(L.quantidade * L.refere_se.preco) INTO Total FROM TABLE(CAST(SELF.linhas AS ListaDeLinhas)) L; RETURN Total;

Passo 4: Objetos

Criando Objetos INSERT INTO Produtos VALUES(1004, 6750.00, 2) INSERT INTO Clientes VALUES (1, ‘Marcus Sampaio', endereco('2 Aprígio Veloso', ‘Campina Grande', ‘PB', ‘58109-970'), telefones(‘083-555-5555') )

INSERT INTO Pedidos SELECT 1001, REF(C), SYSDATE, '10-MAIO-2007', ListaDeLinhas() FROM Clientes C WHERE C.codigo = 1

INSERT INTO TABLE (SELECT P.linhas FROM Pedidos P WHERE P.codigo = 1001) SELECT 01, REF(Prod), 12, 0 FROM Produtos Prod WHERE Prod.codigo = 1004

Tudo em um único comando: INSERT INTO Pedidos SELECT 1001, REF(C), SYSDATE, '10-MAIO-2007', linhas(linha(1, (Select …), …), linha(…)) FROM Clientes C WHERE C.codigo = 1

Clientes Produtos Pedidos Feito _por Linhas 1 2

Manipulando os Objetos

Consultando Objetos Imprimir os números dos pedidos em ordem SELECT P.codigo FROM Pedidos P ORDER BY VALUE(P)

Para o pedido 1, os detalhes SELECT P.feito_por.nome, P.codigo, P.data_pedido, L.num_linha, L.refere_se.codigo, L.quantidade FROM Pedidos P, TABLE(P.linhas) L WHERE P.codigo = 1001 Note que, essencialmente, SQLOR é como OQL, salvo algumas idiossincrasias da SQLOR

O valor total dos pedidos de compra SELECT P.codigo, P.total() FROM Pedidos P

SELECT P.codigo, P.feito_por.codigo, L.* FROM Pedidos P, Pedidos do item 1004 SELECT P.codigo, P.feito_por.codigo, L.* FROM Pedidos P, TABLE (P.linhas) L WHERE L.refere_se.codigo = 1004 Qual é o problema com esta consulta?

Destruindo Objetos DELETE FROM Pedidos P WHERE P.codigo = 1001