Hierarquia de Visões de Objeto
description
Transcript of Hierarquia de Visões de Objeto
Hierarquia de Visões de Objeto
Vânia Maria Ponte Vidal
2
Hierarquia de Visões de Objeto
Pessoa_ty
Estudante_ty Empregado_ty
EstudantePós_tyCREATE VIEW Pessoas_v OF Pessoa_ty
AS SELECT ...
CREATE VIEW Estudantes_v OF Estudante_ty UNDER Pessoas_v
AS SELECT ...
3
Hierarquia de Visões de Objeto
Uma consulta a visão Pessoas_v Pode conter objetos do tipo Pessoa_ty e Estudante_ty
Uma sub-visão herda o OID da super visão. A consulta que define a visão determina se a
visão é atualizável. Para uma visão ser atualizável, sua consulta não pode conter: junção, operadores de conjunto, funções de agregação, GROUP BY, DISTINCT, expressões.
Uma mesma hierarquia de visões pode estar baseada em diferentes modelos de armazenamento (FLAT, HORIZONTAL e VERTICAL)
4
Modelo “FLAT”
Tipo Atributos_Pessoa Atributos_Estudante Atributos_Empregado
{1,2,ou 3}Atributos_PessoaVisão Pessoas_V
Atributos_Pessoa Atributos_Empregado
Visão Empregados_V
Atributos_Pessoa Atributos_Estudante
Visão Estudantes_V
Tabela Pessoas
5
Modelo “FLAT”
CREATE TABLE Pessoas ( tipo NUMBER(1), cpf NUMBER, nome VARCHAR2(100), deptid NUMBER, curso NUMBER, empid NUMBER, ger NUMBER);
CREATE TYPE Pessoa_ty AS OBJECT( tipo NUMBER(1), cpf NUMBER, nome VARCHAR2(100)) NOT FINAL;
CREATE TYPE Estudante_ty UNDER Pessoa_ty(deptid NUMBER, curso NUMBER);
CREATE TYPE Empregado_ty UNDER Pessoa_ty(empid NUMBER, ger NUMBER);
6
Modelo “FLAT”CREATE VIEW Pessoas_v OF Pessoa_ty WITH OBJECT OID (cpf) AS SELECT cpf, nome FROM Pessoas WHERE tipo = 1;
CREATE VIEW Empregados_v OF Empregado_ty UNDER Pessoas_v AS SELECT cpf, nome, empid, ger FROM Pessoas WHERE tipo = 3;
CREATE VIEW Estudantes_v OF Estudante_ty UNDER Pessoas_v AS SELECT cpf, nome, deptid, curso FROM Pessoas WHERE tipo = 2;
7
Vantagens Simplicidade Todos os dados de um objeto estão em uma única tabela. Todas os objetos de uma visão de Objeto estão em uma
única tabela. Objetos podem “mudar de tipo” facilmente.
Desvantagens Valores nulos Dificuldades na evolução do esquema (criar novos
atributos ou subtipos) Sutipos têm que ser disjuntos.
Modelo “FLAT”
8
Modelo “Horizontal”
Atributos_Pessoa Atributos_PessoaVisão Pessoas_V
Visão Empregados_V
Visão Estudantes_V
Tabela SóPessoa_ty
Atrib_Pessoa Atrib_Empregado
Tabela SóEmpregado_ty
Tabela SóEstudante_ty
Atrib_Pessoa Atrib_Estudante Atrib_Pessoa Atrib_Estudante
Atrib_Pessoa Atrib_Empregado
9
Modelo “Horizontal”
CREATE TABLE SóPessoa_ty ( cpf NUMBER, nome VARCHAR2(100));
CREATE TABLE SóEstudante_ty( cpf NUMBER, nome VARCHAR2(100), deptid NUMBER, curso NUMBER);
CREATE TABLE SóEmp_ty( cpf NUMBER, nome VARCHAR2(100), empid NUMBER, ger NUMBER);
10
Modelo “Horizontal”
CREATE VIEW Pessoas_v OF Pessoa_ty WITH OBJECT OID (cpf) AS SELECT * FROM SóPessoas;
CREATE VIEW Empregados_v OF Empregado_ty UNDER Pessoas_v AS SELECT * FROM SóEmpregados ;
CREATE VIEW Estudantes_v OF Estudante_ty UNDER Pessoas_v AS SELECT * FROM SóEstudantes;
11
Vantagens Todos os dados de um objeto estão em uma única tabela. evita valores nulos. É muito eficiente para processar consultas da forma:
Modelo “Horizontal”
SELECT VALUE (p) FROM Pessoas_v p
WHERE VALUE(P) IS OF (ONLY Pessoa_ty )
Desvantagens Objetos não podem “mudar de tipo” facilmente.. Não é eficiente para processar consultas da forma:
SELECT * FROM Pessoas_v
12
Modelo “Vertical”
Tipo Atributos_Pessoa Atributos_PessoaVisão Pessoas_V
Visão Empregados_V
Visão Estudantes_V
Tabela Todas_Pessoas
CPF Atrib_Empregado
Tabela Todos_Empregados
Tabela Todos _Estudantes
Atrib_Pessoa Atrib_Estudante
Atrib_Pessoa Atrib_Empregado
{1,2,ou 3}
CPF Atrib_Estudante
13
Modelo “Vertical”
CREATE TABLE Pessoas ( tipo NUMBER(1), cpf NUMBER, nome VARCHAR2(100));
CREATE TABLE Estudantes ( cpf NUMBER, deptid NUMBER, curso NUMBER);
CREATE TABLE Empregados ( cpf NUMBER, empid NUMBER, ger NUMBER);
14
Modelo “vertical”
CREATE VIEW Pessoas_v OF Pessoa_ty WITH OBJECT OID (cpf) AS SELECT cpf, nome FROM Pessoas WHERE tipo = 1;
CREATE VIEW Estudantes_v OF Estudante_ty UNDER Pessoas_v AS SELECT p.cpf, p.nome, e.deptid, e.curso FROM Pessoas p, Estudantes e; WHERE p.tipo=2 AND e.cpf=p.cpf
15
Modelo “vertical”
CREATE VIEW Empregados_v OF Empregado_ty UNDER Pessoas_v AS SELECT p.cpf, p.nome, e.empid, e.ger FROM Pessoas p, Empregados e; WHERE p.tipo=3 AND e.cpf=p.cpf
16
Vantagens Evita valores nulos É muito eficiente para processar consultas da
forma:
Modelo “Horizontal”
SELECT * FROM Pessoas_v
Desvantagens os dados de um objeto estão distribuídos várias tabelas.
Precisa fazer a junção destas tabelas para criar o objeto.