Bancos de Dados Orientados a Objeto Prof. Alexander Roberto Valdameri Evolução BD Hierárquico *; BD de Rede *; BD Relacional *; BD Orientado a Objetos; BD Pós-Relacional. 2 Características comuns * Uniformidade: estruturas de dados similiares; Orientação a registro: itens de dados básicos de comprimento fixo; Itens de dados pequenos: registros curtos, poucos bytes; Campos Atômicos: não há estrutura dentro dos campos. 3 Modelo de dados OO Estrutura do Objeto Variáveis; Mensagens; Métodos; Classe de Objeto Similaridade nos objetos; Instâncias de objetos; Herança Similaridade de classes. 4 Banco de Dados OO “Os BDOOs combinam os benefícios e conceitos da orientação a objeto com a funcionalidade dos banco de dados.” Funcionalidades: Tipos abstratos; Herança; Identidade de objeto; Encapsulamento; Polimorfismo; Persistência. 5 BDOOs - Abordagens Adição de conceitos de OO a linguagens de banco de dados; Extender linguagens orientadas a objeto para tratar de bancos de dados que operam com conceitos de objetos persistentes. 6 Exemplo de Classe class empregado { /* variáveis */ string nome; string endereco; date data_inicio; int salario; /* mensagens */ int salario_anual(); string obter_nome(); string ajustar_endereco(string novo_endereco); int tempo_emprego(); } /* método como exemplo: */ new() -> cria uma nova instância 7 Linguagens OO Conceitos de OO usados puramente para projeto; Conceitos de OO incorporados em uma linguagem usada para manipular o banco de dados; Extensão do SQL com adição de tipos complexos e OO; Linguagens persistentes; ODMG – padronização das extensões. 8 Linguagem Persistente Transparência – não há uma conversão explicita entre a OO e o relacional; Operações são realizadas de forma implícita; Trabalham com a SQL embutida; Exemplos: C++ e Smalltalk. 9 Exemplos de Aplicações CAD – Computer aided design – Projeto auxiliado por computador: componentes do projeto, versões; CASE – Computer aided software engineering – Engenharia de Software auxiliada por computador: código fonte, dependências entre os módulos; definições e uso de variáveis. 10 Exemplos de Aplicações Banco de dados Multimídia Imagens, dados espaciais, áudio, dados de vídeo etc; Banco de dados Hipertexto Hipertexto enriquecido com links. Textos completos armazenados e em condições de serem manipulados. 11 Bancos de Dados Objeto-Relacional ou Pós-Relacional Contextualização Novos tipos de dados (complexos); Modelo relacional acrescido de orientação a objetos; Linguagem padrão de acesso as estruturas do metadados; Linguagem persistente ou extensão para manipulação de objetos. 13 Estudo de Caso Supor estrutura de dados de um SIE: Título do documento; Lista de autores; Data de aquisição; Lista de palavras-chaves. Título Autores Data (d,m,a) Palavras Chaves Meta de vendas {Carlos, Ana} (18, março, 2003) {Estratégia, vendas} Relatório aos Fornecedores {Manoel} (23, maio, 2002) {Aquisição, compras} 14 Exemplo Tipo Complexo Create type MinhaSequencia char varying; Create type MinhaData ( dia integer, mes char(10), ano integer); Create type Documento ( nome MinhaSequencia, lista_autor setof (MinhaSequencia), lista_palavras_chaves setof (MinhaSequencia), data MinhaData); Create table docs of type Documento; Baseado no SQL-315 Exemplo de Herança Create type Pessoa ( nm_pessoa MinhaSequencia, nr_seg_soc integer); Create type Estudante ( nm_curso MinhaSequencia) under Pessoa; Create type Professor ( nm_departamento MinhaSequencia) under Pessoa; Create type AssintendeEnsino under Estudante, Professor; Baseado no SQL-316 Exemplo no SGBD Oracle: /* criação do objeto */ CREATE OR REPLACE TYPE obj_pessoa AS OBJECT ( cd_pessoa NUMBER(3), nm_pessoa VARCHAR2(30), nr_telefone VARCHAR2(12), dt_nascimento DATE, MEMBER FUNCTION obter_idade RETURN NUMBER); /* criação da tabela */ CREATE TABLE clientes OF obj_pessoa; 17 Exemplo no SGBD Oracle: /* descrevendo a estrutura */ SQL> DESC obj_pessoa; Nome Nulo? ------------------------------ -------CD_PESSOA NM_PESSOA NR_TELEFONE DT_NASCIMENTO Tipo ------------NUMBER(3) VARCHAR2(30) VARCHAR2(12) DATE METHOD -----MEMBER FUNCTION OBTER_IDADE RETURNS NUMBER 18 Exemplo no SGBD Oracle: /* manipulação de dados */ SQL> INSERT INTO clientes VALUES (1, 'Joao Bento Goncalves', '4799999999', '01/02/1932'); 1 linha criada. 19 Exemplo no SGBD Oracle: /* recuperação dos dados */ SQL> SELECT VALUE(c) 2 FROM clientes c; VALUE(C)(CD_PESSOA, NM_PESSOA, NR_TELEFONE, DT_NASCIMENTO) --------------------------------------------------------------OBJ_PESSOA(1, 'Joao Bento Goncalves', '4799999999', '01/02/32') SQL> SELECT c.nm_pessoa, c.obter_idade() 2 FROM clientes c; NM_PESSOA C.OBTER_IDADE() ------------------------------ --------------Joao Bento Goncalves 71 20 Exemplo no SGBD Oracle: /* Criação do método */ CREATE OR REPLACE TYPE BODY obj_pessoa AS MEMBER FUNCTION obter_idade RETURN NUMBER AS idade NUMBER; BEGIN SELECT TO_NUMBER(TRUNC(MONTHS_BETWEEN(SYSDATE, dt_nascimento)/12),'999') INTO idade FROM clientes; RETURN idade; END; END; 21 Exemplo no PostGreSQL CREATE TABLE Pessoa(nome varchar(50), telefone numeric(12), endereco varchar(100)); CREATE TABLE PessoaFisica(idade numeric(3), cpf numeric(11), estado_civil char) inherits(Pessoa); CREATE TABLE PessoaJuridica(cnpj numeric(15), insc_est numeric(12)) inherits(Pessoa); 22 Exemplo no PostGreSQL INSERT INTO Pessoa VALUES ('Sou pessoa', 1111111, 'Sem endereco'); INSERT INTO PessoaFisica VALUES ('Maria', 5487777, 'Rua Progresso, 87', 20, 02487555544, 'S'); INSERT INTO PessoaJuridica VALUES('Confeitaria BomBom', 2235874, 'Av Brasil 1500', 111111111111111, 0); 23 Exemplo no PostGreSQL SELECT nome FROM PessoaFisica; SELECT nome FROM PessoaJuridica; SELECT nome FROM Pessoa; SELECT nome FROM ONLY Pessoa; 24 Exemplos de produtos Jasmine – OO; Poet – OO; ObjectStore – OO; Orion – OO; Oracle – OR; Caché – OR; PostgreSQL – OR; IBM DB2 – OR; 25 Concluíndo… A eficácia dos vários tipos de SGBDs pode ser comparada resumidamente: Sistemas relacionais: tipos de dados simples, linguagens de consulta poderosas, alta proteção; Linguagens de programação simples baseadas em BDOOs: tipos de dados complexos, integração com linguagens de programação, alto desempenho; Sistemas relacionais-objeto: tipos de dados complexos, linguagens de consulta poderosas, alta proteção. 26