projeto de sistemas de informação 2003-2 prof. schneider oracle object-relational

37
Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Upload: internet

Post on 22-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Projeto de Sistemas de Informação2003-2 Prof. Schneider

Oracle Object-Relational

Page 2: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Necessidades:

– Projetos de engenharia– Imagens– Bancos de dados científicos– Sistemas de informações geográficas– Multimídia

SGBD Orientado a Objetos

Page 3: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Vantagens:

- Objetos podem encapsular operações além dos dados.

- Objetos são reutilizáveis.- Objetos têm maior significado.

SGBD Orientado a Objetos

Page 4: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i (“Views” ou tipos “nativos”)

Object views

Visões criadas sobre dados relacionais existentes, “convertendo-os” para a modelagem a objetos.

Page 5: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i (“Views” ou tipos “nativos”)

CREATE TABLE EMP ( ID NUMBER (5), NOME VARCHAR2 (20), SALARIO NUMBER (9,2));

CREATE TYPE T_EMP ( ID NUMBER (5), NOME VARCHAR2 (20), SALARIO NUMBER (9,2));

Page 6: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i (“Views” ou tipos “nativos”)

CREATE

VIEW V_EMP OF T_EMP

WITH

OBJECT IDENTIFIER (ID) AS

SELECT

E.ID, E.NOME, E.SALARIO

FROMEMP E

WHERE

E.SALARIO > 2000

Page 7: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i (“Views” ou tipos “nativos”)

Object tables

Armazenamento de dados como Object: cada linha é um objeto.

Page 8: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i (“Views” ou tipos “nativos”)

CREATE TYPE T_PESSOA AS OBJECT ( NOME VARCHAR2 (50), TELEFONE VARCHAR2 (20));

CREATE TABLE TAB_PESSOA OF T_PESSOA;

Page 9: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i

Herança de tipos

– Aumenta a capacidade de reutilização– Hierarquia de tipos com um ancestral comum

genérico– Permite adicionar novos atributos e métodos– Permite alterar a implementação de métodos

Page 10: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i

CREATE TYPE T_PESSOA AS OBJECT (NOME VARCHAR2(50),TELEFONES T_TELEFONES,DATA_NASCIMENTO DATE,...

) NOT FINAL;

CREATE TYPE T_ALUNO UNDER T_PESSOA (DRE NOME VARCHAR2(15),...

);

Page 11: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i

Evolução de tipos (ALTER TYPE)

– Adicionar ou apagar atributos e métodos– Modificar tamanho ou precisão de atributos.– Validações ao alterar

Page 12: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i(Coleções)

Varrays

– Coleção ordenada de elementos: posição de cada elemento tem um índice.

– Máximo número de elementos definido na hora da criação. (pode ser alterado posteriormente)

Page 13: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i(Coleções)

CREATE TYPE T_TELEFONES AS VARRAY(3) OF VARCHAR2(20);

CREATE TYPE T_PESSOA AS OBJECT (NOME VARCHAR2(50),TELEFONES T_TELEFONES,DATA_NASCIMENTO DATE,...

);

Page 14: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i(Coleções)

Nested tables

– Número indefinido de elementos.– Ordem não preservada.

Page 15: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i(Coleções)

CREATE TYPE T_TELEFONES AS TABLE OF T_TELEFONE;

CREATE TYPE T_PESSOA AS OBJECT (NOME VARCHAR2(50),TELEFONES T_TELEFONES,DATA_NASCIMENTO DATE,...

)

NESTED TABLE TELEFONES STORE AS TAB_TELEFONES;

Page 16: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Possibilidades no Oracle9i(JDBC)

• Classes Java correspondendo a classes do Oracle permitem que você trabalhe com muito mais eficiência.

• Classes Java criadas implementando as interfaces oracle.sql.CustomDatum ou oracle.jdbc2.SQLData

Page 17: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Extensão da Linguagem SQLExemplo de aplicação

CREATE TYPE T_ESTADO AS OBJECT (NM_ESTADO CARCHAR2(70),SG_ESTADO VARCHAR2(2)

)

CREATE TYPE T_CIDADE AS OBJECT (NM_CIDADE VARCHAR2(70),REF_ESTADO REF T_ESTADO

)

CREATE TYPE T_BAIRRO AS OBJECT (NM_BAIRRO VARCHAR2(70),REF_CIDADE REF T_CIDADE

)

Page 18: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Extensão da Linguagem SQLExemplo de aplicação

CREATE TABLE ESTADO OF T_ESTADO;

CREATE TABLE CIDADE OF T_CIDADE;

CREATE TABLE BAIRRO OF T_BAIRRO;

Page 19: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Extensão da Linguagem SQLExemplo de aplicação

INSERT INTO ESTADO VALUES (‘Rio de Janeiro’, ‘RJ’)

INSERT INTO CIDADE VALUES (‘Rio de Janeiro’,(SELECT REF(P) FROM ESTADO P WHERE SG_ESTADO = ‘RJ’)

)

INSERT INTO BAIRRO VALUES (‘Vila Isabel’, (SELECT REF(P) FROM CIDADE P WHERE NM_CIDADE = ‘Rio de Janeiro’)

)

Page 20: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Extensão da Linguagem SQLExemplo de aplicação

SELECT NM_ESTADO, SG_ESTADO

FROM ESTADO;

SELECT B.NM_BAIRRO

FROM BAIRRO B

WHERE DEREF(B.REF_CIDADE).NM_CIDADE = ‘Rio de Janeiro’;

Page 21: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Extensão da Linguagem SQLExemplo de aplicação

SELECT DEREF(B.REF_CIDADE).NM_CIDADE, DEREF(DEREF(B.REF_CIDADE).REF_ESTADO).NM_ESTADO

FROM BAIRRO B

WHERE B.NM_BAIRRO = ‘Vila Isabel’;

Page 22: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Persistência

– Possui mecanismos próprios que possibilitam a persistência de objetos Classe Storable Classe Environment EiffelStore

Page 23: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Classe Storable

– Grava o objeto e todos os outros objetos referenciados por ele direta ou indiretamente

– Métodos restore_by_name retrieve_by_namebasic_store retrieved

Page 24: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Classe Environment

– Armazena diversos objetos– Métodos

opencloseset_file(f)store retrieve

Page 25: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Classe Environment

– Métodos (cont.)put (objeto, chave_do_objeto)

– Recuperando um objeto:

objeto ?= env.item(chave_do_objeto)

Page 26: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

EiffelStore

– API que permite a persistência de objetos em diversos SGBDs relacionais e OO

ODBC Oracle Sybase Matisse etc.

Page 27: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Sybase

EiffelStore

ODBCOracle

Classe Storable

etc

Page 28: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Conjunto de classes comuns a todos os SGBDs

Classes específicas para cada SGDB

Page 29: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Classe DBControl– Métodos:

connect disconnect commit rollback

Page 30: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Outras classes– DB_SELECTION – DB_CHANGE– DB_STORE– REPOSITORY

Page 31: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffelclass SESSION

feature

db_handle: ORACLE_APPL

session_control: DB_CONTROL

make is

do

!!db_handle.login (...)

db_handle.set_base

!!session_control.make

session_control.connect

-- <consultas, inserções etc>

session_control.commit

session_control.disconnect

rescue

session_control.roll_back

session_control.disconnect

end

-- ...

end -- class SESSION

Page 32: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Exemplo de consulta simples:

selection: DB_SELECTION

tuple: DB_TUPLE

- ...

!!selection.make

io.readline

selection.set_map_name (io.laststring, ”autor")

selection.query ("select * from LIVRO where AUTOR = :autor")

selection.load_result

!!tuple

tuple.copy (selection.cursor)

-- ...

selection.unset_map_name (”autor")

Page 33: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Exemplo de alteração, inclusão e exclusão:

modification: DB_CHANGE

!!modification.make

modification.modify ("update LIVRO %

%set AUTOR = ‘FULANO’ where ISBN = ‘111.222.333’ ”)

modification.modify ("insert into LIVRO %

%values (’BELTRANO’, ‘222.333.111’) ")

modification.modify ("delete from LIVRO where %

%AUTOR = ‘CICRANO’ ")

Page 34: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Mapeamento de objetos em tabelas– Nome do atributo do objeto = nome coluna da tabela– Tipo do atributo do objeto = tipo coluna da tabela

(INTEGER, REAL, DOUBLE, BOOLEAN, CHARACTER, STRING, ABSOLUTE_DATE)

Page 35: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Carregando um objeto

selection: DB_SELECTION

um_aluno: ALUNO

...

!!selection.make

selection.object_convert (um_aluno)

selection.query ("select * from TB_ALUNO")

selection.load_result

selection.cursor_to_object

Page 36: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

Armazenando um objeto

storage: DB_STORE

tabela_aluno: DB_REPOSITORY

um_aluno: ALUNO

!!tabela_aluno.make (”TB_ALUNO")

...

tabela_aluno.load

...

!!storage.make

storage.set_repository (tabela_aluno)

...

storage.put (um_aluno)

...

Page 37: Projeto de Sistemas de Informação 2003-2 Prof. Schneider Oracle Object-Relational

Eiffel

FIM!