A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

 Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto.

Apresentações semelhantes


Apresentação em tema: " Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto."— Transcrição da apresentação:

1  Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

2  Mecanismo de Visão para suportar Visão de Objetos.  Uma Visão de Objeto é uma visão com “row objetos” (objetos com identificador).  Da mesma forma que podemos definir “column objects” e “row Objects” em tabelas, podemos defini-los em visões.  Estes objetos (column e row) podem existir fisicamente no banco de dados (em tabelas de objetos) e podem ser “sintetizados” de dados no formato relacional ou de objetos em outro formato.

3  Provê um caminho de migração gradual para “legacy data”.  Dados Relacionais podem ser mapeados em objetos e aplicações podem manipula-los como estruturas nativas.  Provê a co-existência de aplicações relacionais e OO.  Provê a flexibilidade de ver o mesmo dado relacional ou OO de mais de uma maneira.  Como os objetos da visão são processados no Servidor, não no cliente, isto pode resultar em menos tráfico na rede

4 1. Defina um tipo de Objeto para ser representado pelas linhas de uma visão de Objetos. 2. Escreva uma consulta que especifique quais dados em quais tabelas contem os atributos para os objetos daquele tipo. 3. Especifique um identificador de objeto, baseado nos atributos dos dados do BD, para permitir REFs para os objetos da visão de Objetos. (usa uma chave). 4. Se é permitido atualização através da visão então escreva triggers INSTEAD OF para ORACLE executar sempre que um programa de aplicação tentar realizar uma atualização atraves da visão.

5 DEPTO_REL codigo nome rua cidade estado cep EMP_REL número nome salario depto (FK)

6 Depto_ty codigo nome Endereço_ty rua cidade estado cep endereço Emp_ty número nome salario depto empregados  Crie a visão dept_view de objetos do tipo Depto_ty

7 CREATE TYPE Emp_lista_ty AS TABLE OF Emp_ty; CREATE TYPE Emp_ty AS OBJECT( Numero NUMBER, Nome VARCHAR2(20), Salario NUMBER); CREATE TYPE Endereço_ty AS OBJECT( Rua VARCHAR2(20), Cidade VARCHAR2(20), Estado VARCHAR2(20)); CREATE TYPE Depto_ty AS OBJECT( Codigo NUMBER, Nome VARCHAR2(20), endereço Endereço_ty, empregados Emp_lista_ty );

8 CREATE VIEW dept_view OF Depto_ty WITH OBJECT IDENTIFIER (codigo) AS SELECT d.codigo, d.nome, Endereço_ty( d.rua, d.cidade, d.estado, d.cep), CAST( MULTISET (SELECT e.numero, e.nome, e.salario FROM EMP_REL e WHERE e.depto = d.codigo) AS Emp_lista_ty ) FROM DEPT_REL d ; Criando Visões de “Row Objects”

9  MULTISET  Indica que o resultado da consulta é uma lista e não um único valor.  Operador CAST  Põe o conjunto do resultado no formato do tipo apropriado (no caso o tipo coleção employee_list_t)

10 CREATE VIEW dept_view OF dept_t WITH OBJECT IDENTIFIER DEFAULT AS SELECT....  Se a visão é baseada em uma tabela ou visão de objetos, então o identificador da tabela ou da visão pode ser usado. Neste caso a cláusula WITH OBJECT IDENTIFIER pode ser omitida ou especificada com valor DEFAULT

11 A maior vantagem de definir visões de “row objects” é que estes objetos podem ser referenciados. emp_ty dept_ty emp_view dept_view > deptref

12 CREATE TYPE Emp_ty AS OBJECT( Numero NUMBER, Nome VARCHAR2(20), Salario NUMBER Dept_ref REF Dept_ty); CREATE TYPE Endereço_ty AS OBJECT( Rua VARCHAR2(20), Cidade VARCHAR2(20), Estado VARCHAR2(20), CEP VARCHAR(8)); CREATE TYPE Depto_ty AS OBJECT( Código NUMBER, Nome VARCHAR2(20), Endereço Endereço_ty ); Tipo REF

13 CREATE VIEW dept_view OF Depto_ty WITH OBJECT IDENTIFIER (codigo) AS SELECT d.codigo, d.nome, Endereço_ty( d.rua, d.cidade, d.estado, d.cep) FROM DEPTO_REL d ; Cria Visão Referenciada dept_view

14 CREATE VIEW Emp_view OF Emp_ty WITH OBJECT IDENTIFIER(numero) AS SELECT e.numero, e.nome, e.salario, MAKE_REF(dept_view, e.depto) FROM EMP_REL e; MAKE_REF: Usa o valor da chave estrangeira para criar o identificador de objeto que corresponde a um dado objeto da visão referenciada MÉTODO 1:

15 CREATE VIEW Emp_view OF Emp_ty WITH OBJECT IDENTIFIER(numero) AS SELECT e.numero, e.nome, e.salario, REF(d ) FROM EMP_REL e, dept_view d WHERE e.depto = d.codigo; Usa REF para obter a referência para um objeto da visão. MÉTODO 2

16 SELECT e.numero, e.salario, e.deptref.nome FROM emp_view e WHERE e.dept_ref.endereço.cidade = `Fortaleza’; Encontre os empregados cujo departamento está localizado na cidade de Fortaleza

17 emp_ty dept_ty emp_view dept_view > dept_ref empregados

18 CREATE TYPE Emp_lista_ty AS TABLE OF REF Emp_ty; CREATE TYPE Emp_ty AS OBJECT( Numero NUMBER, Nome VARCHAR2(20), Salario NUMBER Dept_ref REF Dept_ty); CREATE TYPE Dept_ty ; CREATE OR REPLACE TYPE Dept_ty AS OBJECT( Código NUMBER, Nome VARCHAR2(20), endereço Endereço_ty, empregados Emp_lista_ty ); Tipo incompleto CREATE TYPE Endereço_ty AS OBJECT( Rua VARCHAR, Cidade VARCHAR, Estado VARCHAR,);

19 MÉTODO 1 1. Cria a visão A sem referenciar a visão B 2. Cria a Visão B que referencia a visão A 3. Redefine a visão A com referência para a visão B

20 CREATE VIEW Emp_view OF Emp_ty WITH OBJECT IDENTIFIER(numero) AS SELECT e.numero, e.nome, e.salario, NULL FROM EMP_REL e;

21 CREATE VIEW dept_view OF Depto_ty WITH OBJECT IDENTIFIER (codigo) AS SELECT d.codigo, d.nome, Endereço_ty( d.rua, d.cidade, d.estado, d.cep), CAST( MULTISET (SELECT MAKE_REF(emp_view, e.numero) FROM EMP_REL e WHERE e.depto = d.codigo) AS Emp_lista_ty ) FROM DEPT_REL d ;

22 CREATE OR REPLACE VIEW Emp_view OF Emp_ty WITH OBJECT IDENTIFIER(numero) AS SELECT e.numero, e.nome, e.salario, MAKE_REF(dept_view, e.depto) FROM EMP_REL e;

23 MÉTODO 2 1. Cria a visão A com uma referencia para a visão B usando FORCE 2. Cria a Visão B que referencia a visão A 3. Quando a visão A é usada, ela é validada e recompilada.

24 CREATE FORCE VIEW Emp_view OF Emp_ty WITH OBJECT IDENTIFIER(numero) AS SELECT e.numero, e.nome, e.salario, MAKE_REF(dept_view, e.depto) FROM EMP_REL e;

25 SELECT DEREF(t.COLUMN_VALUE) FROM TABLE( SELECT e.empregados FROM dept_view e WHERE e.codigo = 100) t; COLUMN_VALUE denota a referência para um objeto do tipo emp_t na nested table empreflist.

26 SELECT e.COLUMN_VALUE.eno FROM TABLE (SELECT e.empreflist FROM dept_view e WHERE e.dno = 100) e WHERE e.COLUMN_VALUE.ename like `John%';

27 SELECT e.deptref.dno, DEREF(f.COLUMN_VALUE) FROM emp_view e, TABLE(e.deptref.empreflist) f WHERE e.deptref.dno = 100 AND f.COLUMN_VALUE.ename like `John%';

28 1. Defina um tipo de Objeto para ser representado pelas linhas de uma visão de Objetos. 2. Escreva uma consulta que especifique quais dados em quais tabelas contem os atributos para os objetos daquele tipo. 3. Especifique um identificador de objeto, baseado nos atributos dos dados do BD, para permitir REFs para os objetos da visão de Objetos. (usa uma chave). 4. Se é permitido atualização através da visão então escreva triggers INSTEAD OF para ORACLE executar sempre que um programa de aplicação tentar realizar uma atualização atraves da visão.

29  Uma atualização de visão é simplesmente uma atualização que é especificada em uma visão, mas ela deve ser traduzida em uma sequência de atualizações no banco de dados. Chamamos esta sequência de atualizações do banco de dados de tradução da atualização da visão requisitada.

30  - Os triggers para cada tipo de atualização da visão (que são permitidas) devem ser definidos em tempo de projeto da visão.  - A semântica necessária para remover ambiguidades deve ser obtida através de diálogo com o usuário na hora da definição da visão.  - Uma vez que o tradutor é escolhido, os usuários especificam o trigger correspondente, e o trigger converte estas atualizações em atualizações do banco de dados, sem que seja necessário nenhum diálogo adicional para remover ambiquidades.

31 CREATE TRIGGER dept_ins INSTEAD OF INSERT ON Dept_view DECLARE dept_var dept_t; emp_count integer; BEGIN INSERT INTO DEPTO_REL VALUES (: NEW.codigo, :NEW.nome, :NEW.endereço.rua, :NEW. endereço.cidade, :NEW. endereço.estado, :NEW. endereço.CEP); END;

32 CREATE TRIGGER emp_ins INSTEAD OF INSERT ON Emp_view DECLARE dept_var depto_ty; emp_count integer; BEGIN -- obtenha o numero do departamento da referência UTL_REF.SELECT_OBJECT (:NEW.depto_ref, dept_var) INSERT INTO EMP_REL VALUES (: NEW.numero, :NEW.nome :NEW.salario, dept_var.codigo); END; UTL_REF: obtem o objeto referenciado


Carregar ppt " Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto."

Apresentações semelhantes


Anúncios Google