160 likes | 302 Views
Hierarquia de Visões de Objeto. Vânia Maria Ponte Vidal. Hierarquia de Visões de Objeto. Pessoa_ty. Estudante_ty. Empregado_ty. CREATE VIEW Pessoas_v OF Pessoa_ty AS SELECT. EstudantePós_ty. CREATE VIEW Estudantes_v OF Estudante_ty UNDER Pessoas_v AS SELECT.
E N D
Hierarquia de Visões de Objeto Vânia Maria Ponte Vidal
Hierarquia de Visões de Objeto Pessoa_ty Estudante_ty Empregado_ty CREATE VIEW Pessoas_v OF Pessoa_ty AS SELECT ... EstudantePós_ty CREATE VIEW Estudantes_v OF Estudante_ty UNDER Pessoas_v AS SELECT ...
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)
Modelo “FLAT” Tabela Pessoas Tipo Atributos_Pessoa Atributos_Estudante Atributos_Empregado Visão Pessoas_V {1,2,ou 3} Atributos_Pessoa Visão Empregados_V Atributos_Pessoa Atributos_Empregado Visão Estudantes_V Atributos_Pessoa Atributos_Estudante
Modelo “FLAT” CREATE TYPE Pessoa_ty AS OBJECT ( tipo NUMBER(1), cpf NUMBER, nome VARCHAR2(100)) NOT FINAL; CREATE TABLE Pessoas ( tipo NUMBER(1), cpf NUMBER, nome VARCHAR2(100), deptid NUMBER, curso NUMBER, empid NUMBER, ger NUMBER); CREATE TYPE Estudante_ty UNDER Pessoa_ty (deptid NUMBER, curso NUMBER); CREATE TYPE Empregado_ty UNDER Pessoa_ty (empid NUMBER, ger NUMBER);
Modelo “FLAT” 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 cpf, nome, deptid, curso FROM Pessoas WHERE tipo = 2; CREATE VIEW Empregados_v OF Empregado_ty UNDER Pessoas_v AS SELECT cpf, nome, empid, ger FROM Pessoas WHERE tipo = 3;
Modelo “FLAT” • 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 “Horizontal” Tabela SóPessoa_ty Visão Pessoas_V Atributos_Pessoa Atributos_Pessoa Visão Empregados_V Tabela SóEmpregado_ty Atrib_Pessoa Atrib_Empregado Atrib_Pessoa Atrib_Empregado Tabela SóEstudante_ty Visão Estudantes_V Atrib_Pessoa Atrib_Estudante Atrib_Pessoa Atrib_Estudante
Modelo “Horizontal” CREATE TABLE SóEmp_ty ( cpf NUMBER, nome VARCHAR2(100), empid NUMBER, ger NUMBER); CREATE TABLE SóPessoa_ty ( cpf NUMBER, nome VARCHAR2(100)); CREATE TABLE SóEstudante_ty ( cpf NUMBER, nome VARCHAR2(100), deptid NUMBER, curso NUMBER);
Modelo “Horizontal” CREATE VIEW Pessoas_v OF Pessoa_ty WITH OBJECT OID (cpf) AS SELECT * FROM SóPessoas; CREATE VIEW Estudantes_v OF Estudante_ty UNDER Pessoas_v AS SELECT * FROM SóEstudantes; CREATE VIEW Empregados_v OF Empregado_ty UNDER Pessoas_v AS SELECT * FROM SóEmpregados ;
Modelo “Horizontal” • Vantagens • Todos os dados de um objeto estão em uma única tabela. • evita valores nulos. • É muito eficiente para processar consultas da forma: • 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
Modelo “Vertical” Tabela Todas_Pessoas Visão Pessoas_V Tipo Atributos_Pessoa Atributos_Pessoa {1,2,ou 3} Visão Empregados_V Tabela Todos_Empregados Atrib_Pessoa Atrib_Empregado CPF Atrib_Empregado Tabela Todos _Estudantes Visão Estudantes_V CPF Atrib_Estudante Atrib_Pessoa Atrib_Estudante
Modelo “Vertical” CREATE TABLE Pessoas ( tipo NUMBER(1), cpf NUMBER, nome VARCHAR2(100)); CREATE TABLE Empregados ( cpf NUMBER, empid NUMBER, ger NUMBER); CREATE TABLE Estudantes ( cpf NUMBER, deptid NUMBER, curso NUMBER);
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
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
Modelo “Horizontal” • Vantagens • Evita valores nulos • É muito eficiente para processar consultas da forma: • 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.