introdução definindo visões de objeto usando visões de objeto atualizando visões de objeto

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

Upload: gabriela-lemos

Post on 07-Apr-2016

237 views

Category:

Documents


3 download

TRANSCRIPT

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

Introdução

Definindo Visões de Objeto

Usando Visões de Objeto

Atualizando Visões de Objeto

Page 2: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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.

Page 3: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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

Page 4: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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.

Page 5: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

DEPTO_REL

codigo nomeruacidadeestadocep

EMP_REL

número nomesalariodepto (FK)

Page 6: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

Depto_ty

codigo nome

Endereço_tyruacidadeestadocep

endereço

Emp_tynúmero nomesalariodepto

empregados

Crie a visão dept_view de objetos do tipo Depto_ty

Page 7: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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

Page 8: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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 eWHERE e.depto = d.codigo)

AS Emp_lista_ty)

FROM DEPT_REL d;

Criando Visões de “Row Objects”

Page 9: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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)

Page 10: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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

Page 11: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

A maior vantagem de definir visões de “row objects” é que estes objetos podem ser referenciados.

emp_ty dept_ty

emp_view dept_view

<<tipo dos objetos>> <<tipo dos objetos>>

deptref

Page 12: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

CREATE TYPE Emp_ty AS OBJECT(Numero NUMBER,Nome VARCHAR2(20),Salario NUMBERDept_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

Page 13: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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

Page 14: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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:MÉTODO 1:

Page 15: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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 2MÉTODO 2

Page 16: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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

Page 17: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

emp_ty dept_ty

emp_view dept_view

<<tipo dos objetos>> <<tipo dos objetos>>

dept_ref

empregados

Page 18: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

CREATE TYPE Emp_lista_ty AS TABLE OF REF Emp_ty;

CREATE TYPE Emp_ty AS OBJECT(Numero NUMBER,Nome VARCHAR2(20),Salario NUMBERDept_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 incompletoCREATE TYPE Endereço_ty AS OBJECT(

Rua VARCHAR, Cidade VARCHAR, Estado VARCHAR,);

Page 19: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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

Page 20: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

CREATE VIEW Emp_view OF Emp_ty

WITH OBJECT IDENTIFIER(numero)

AS SELECT e.numero,

e.nome,

e.salario,

NULL

FROM EMP_REL e;

Page 21: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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 eWHERE e.depto = d.codigo)

AS Emp_lista_ty)

FROM DEPT_REL d;

Page 22: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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;

Page 23: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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.

Page 24: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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;

Page 25: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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.

Page 26: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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%';

Page 27: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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%';

Page 28: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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.

Page 29: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

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.

Page 30: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

- 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.

Page 31: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

CREATE TRIGGER dept_ins INSTEAD OF INSERT ON Dept_viewDECLARE

dept_var dept_t;emp_count integer;

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

Page 32: Introdução  Definindo Visões de Objeto  Usando Visões de Objeto  Atualizando Visões de Objeto

CREATE TRIGGER emp_ins INSTEAD OF INSERT ON Emp_viewDECLARE

dept_var depto_ty;emp_count integer;

BEGIN-- obtenha o numero do departamento da referênciaUTL_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