• Nenhum resultado encontrado

BD II (SI 587) Banco de Dados Orientados à Objetos e Objeto-Relacional. Prof. Josenildo Silva.

N/A
N/A
Protected

Academic year: 2021

Share "BD II (SI 587) Banco de Dados Orientados à Objetos e Objeto-Relacional. Prof. Josenildo Silva."

Copied!
97
0
0

Texto

(1)

BD II (SI 587)

Banco de Dados Orientados à Objetos e Objeto-Relacional

Prof. Josenildo Silva

(2)

Estes slides são baseados nos slides disponibilizados

pelos autores ELMASRI e NAVATHE, para o livro Sistemas de Banco de Dados , 6ª. Edição, Ed. Pearson Brasil.

Capítulo 11. “Banco de Dados de Objetos e Objeto-Relacional”.

(3)

Introdução

SGBDs Relacionais proveem

persistência de dados com integridade, segurança, confiabilidade e eficiência

Entretanto, SGBDs Relacionais foram desenvolvidos em uma época em que as linguagem de programação eram

estruturadas (C, COBOL, FORTRAN,

(4)

Introdução

Atualmente as linguagens mais

populares são Orientadas à Objeto (

Smalltalk, Eiffel, C++, Java, Ruby, Groovy, Scala ...)

SGBDs mais populares ainda são relacionais (Oracle, PostgreSQL, MySQL, ...)

(5)

Introdução

Como prover persistência de alto nível para dados utilizados em

(6)

Alternativa 1

Salvar dados em

arquivos do sistema Em Java: POJO

Plain Old Java Object

Serialização de Objetos

Programa OO

(7)

Alternativa 2

Utilizar um SGBD Relacional

O programador deve fazer um mapeamento manual entre

os dois mundos Ou utilizar um framework de mapeamento Objeto-Relacional SGBD Relacional Programa OO Mapeamento

(8)

Alternativa 2

O modelo relacional não é

adequado para modelagem de

dados com estruturação complexa

Problema da Impedância entre os modelos abstratos OO e Relacional

(9)

Alternativa 3 Utilizar um SGBD Objeto-Relacional PostgreSQL, Oracle SGBD Objeto Relacional Programa OO

(10)

Alternativa 3

Extensão do SQL para acomodar conceitos de Orientação a Objetos

SQL 99 (antiga SQL 3)

(11)

Alternativa 4

Utilizar um SGBD

Orientado à Objetos

Gem Stone, Objectivity, ObjectStore,

db4objects

SGBD Orientado à Objetos

(12)

Alternativa 4

SGBDOOs foram propostos para

atender a algumas das necessidades de aplicações mais complexas

CAD, CIM, SIGs,

Permitem especificar:

A estrutura dos objetos complexos

As operações que podem ser aplicadas a esses objetos

(13)
(14)

Objeto

Origens nas linguagens de programação OO

Um objeto possui estado (valor) e

comportamento (operações)

Variáveis de instância mantém os valores

que definem o estado interno do objeto

Operação definida em duas partes:

(15)

Herança

Permite a especificação de novos

tipos ou classes que com base nas

estruturas e operações de tipos ou classes previamente definidas

(16)

Sobrecarga

Capacidade de uma operação de ser aplicada a diferentes tipos de objetos

Um nome de operação pode se referir a várias implementações

(17)

Identidade de objeto e literais

Identidade única

Implementada por meio de um

identificador de objeto (OID) único e

(18)

Estruturas de tipo complexas

Estrutura de complexidade arbitrária Aninhamento de construtores

Construtores básicos: Átomo

Struct (ou tupla)

(19)

Encapsulamento de operações

Define o um tipo de objeto com base nas operações

Os usuários externos só se tornam cientes da interface das operações Divide a estrutura de um objeto em atributos visíveis e ocultos

(20)

Encapsulamento de operações Operações típicas: Construtor de objeto Operação de destruição Operações modificadoras Operações de acesso

(21)

Persistência de objetos

Objetos transientes

Existem no programa em execução Desaparecem quando o programa termina

(22)

Persistência de objetos

Objetos persistentes

Armazenados no banco de dados e persistem após o término do

programa

Mecanismo de nomeação Acessibilidade

(23)

Outros conceitos

Herança múltipla

Subtipo herda funções (atributos e métodos) de mais de um supertipo

Herança seletiva

Subtipo herda apenas algumas das funções de um supertipo

(24)
(25)

ODMG

Consórcio formado em 1991 pelos principais pesquisadores e

fabricantes de BDOO

O objetivo era produzir um padrão aberto para SGBDOO

(26)

1993 ODMG 1.0 2001 ODMG 3.0

Componentes do modelo

Modelo de dados

Linguagem de definição de objeto (ODL) Linguagem de consulta de objeto (OQL)

(27)

O modelo de objeto ODMG Interface

Especifica apenas o comportamento de um tipo de objeto

(28)

O modelo de objeto ODMG Class

Especifica tanto o estado (atributos) quanto o comportamento

(operações) de um tipo de objeto Instanciável

(29)
(30)

Relacionamento e Operações

Relationship: indica que dois objetos no banco de dados estão relacionados

Palavra-chave inverse pode ser utilizada para relacionamento nas direção oposta

Assinaturas de operação: nome de operação, tipos de argumento, valor retornado

(31)

Extensões, chaves e fábrica de objetos

Extensões

Formado por todos os objetos persistentes da classe

Chave

Uma ou mais propriedades cujos valores são únicos para cada objeto na extensão

Fábrica de objeto

(32)
(33)

A linguagem de definição de objeto ODL

Usada para definir os tipos de

objeto para determinada aplicação de banco de dados

(34)

A linguagem de definição de objeto ODL

Suporte às construções semânticas do modelo de objeto ODMG

Independente de qualquer

linguagem de programação em particular

(35)
(36)
(37)
(38)
(39)
(40)

Linguagem de Consulta OQL

(41)

A linguagem de consulta de objeto OQL

Linguagem de consulta proposta para o modelo de objeto ODMG

Consultas OQL simples, pontos de entrada do banco de dados, e

(42)

Sintaxe:

select ... from ... where ... <estrutura>

Ponto de entrada:

objeto persistente nomeado

Variável de iteração:

define quando uma coleção é

(43)

Resultados de consulta e caminho

Resultado de uma consulta

Qualquer tipo expresso no modelo de objeto ODMG

OQL é ortogonal com relação à especificação de expressões de caminho

Atributos, relacionamentos e nomes de operação (métodos) podem ser usados um no lugar do outro dentro das expressões de caminho

(44)

Outros recursos da OQL

Consulta nomeada

Consulta OQL retorna uma coleção como seu resultado

Para retornar apenas um único

elemento, usar operador element

(45)

Outros recursos da OQL (cont.)

Condição de membro e

quantificação sobre uma coleção Operações especiais para coleção ordenada

Cláusula group by em OQL Cláusula having

(46)

Modelo Relacional Objeto SQL 1999

(47)

Extensões para SQL

Construtores de tipo

Especifica objetos complexos

Mecanismo para especificar a identidade de objeto

Encapsulamento de operações

Fornecido por meio do mecanismo de tipos definidos pelo usuário (UDTs)

Mecanismos de herança

(48)

Tipos definidos pelo usuário (UDT)

UDT sintaxe:

CREATE TYPE NOME_TIPO AS

(49)

Estruturas complexas para objetos

ROW TYPE

Criar diretamente um atributo

estruturado usando a palavra-chave ROW

(50)

Estruturas complexas para objetos

Tipo de array

Elementos de referência utilizando [ ]

Função CARDINALITY

Retorna o número atual de elementos em um array

(51)
(52)

Projeto conceitual de BDO

Diferenças entre o projeto conceitual do BDO e do BDR, é a manipulação de:

Relacionamentos Herança

Diferença filosófica entre o modelo

relacional e o modelo de objeto dos dados em relação à especificação comportamental

(53)

Incompatibilidades dos paradigmas

O modelo relacional é incompatível com o modelo de objetos (problema da impedância) quanto à:

Granularidade

Herança e polimorfismo Identidade

Associações

(54)

POO com SGBD Relacional

Caso o mapeamento seja manual, comandos SQL é embutido diretamente no código fonte das classes.

Viável para pequenas aplicações

Torna o código muito acoplado ao modelo de dados.

Mapeamento com Framework representa o estado da prática atual

Hibernate é um dos frameworks mais utilizados (implementação do JPA)

(55)

Mapeando um MR para BDO

Princípios básicos

Classes são mapeadas a tabelas

Instâncias (objetos) são mapeadas a

(56)

Mapeando um MR para BDO

conta correntista saldo

1 Gargantua 1370 2 Pantagruel 3450 3 Gargamel 800 4 Morticia 8200 Classe Conta String codigo String nome double saldo instância:Conta codigo="4" nome="Morticia" saldo=8200 Tabela Conta

(57)

Mapeando um MR para BDO

Crie uma classe ODL para cada tipo de entidade ER Inclua propriedades de relacionamento para cada relacionamento binário

Inclua operações apropriadas para cada classe

Uma classe ODL que corresponde a uma subclasse no esquema ER herda o tipo e os métodos de sua superclasse no esquema ODL

(58)

Mapeando um MR para BDO

Tipos de entidade fraca

Mapeados da mesma maneira que os tipos de entidade regulares

Relacionamentos multiplos

Mapeado para uma classe separada, com referências apropriadas a cada classe participante

(59)

Exemplo

O exemplo abaixo é simples

User: representa o usuário

BillingDetails: representa detalhes da cobrança

(60)

Exemplo

public class User {

private String userName; private String name;

private String address;

private Set billingDetails; // (get/set pairs), etc. ... }

create table USER (

USERNAME VARCHAR(15) NOT NULL PRIMARY KEY, NAME VARCHAR(50) NOT NULL,

ADDRESS VARCHAR(100) )

(61)

Exemplo

public class BillingDetails {

private String accountNumber; private String accountName; private String accountType; private User user;

//methods, get/set pairs... }

create table BILLING_DETAILS (

ACCOUNT_NUM VARCHAR(10) NOT NULL PRIMARY Key, ACCOUNT_NAME VARCHAR(50) NOT NULL,

ACCOUNT_TYPE VARCHAR(2) NOT NULL,

USER VARCHAR(15) FOREIGN KEY REFERENCES USER )

(62)

Incompatibilidades dos paradigmas

E se o usuário tiver um endereço? Deve ser uma nova tabela? ou coluna extras?

Problema: objetos podem ter vários níveis de granularidade, mas tabelas impõem limites

Tipos definidos pelo usuário: não é padrão em SQL Solução usual é colocar tudo na tabela USER

(63)

Incompatibilidades dos paradigmas

create table USER (

USERNAME VARCHAR(15) NOT NULL PRIMARY KEY, NAME VARCHAR(50) NOT NULL,

ADDRESS_STREET VARCHAR(50), ADDRESS_CITY VARCHAR(15), ADDRESS_STATE VARCHAR(15), ADDRESS_ZIPCODE VARCHAR(5), ADDRESS_COUNTRY VARCHAR(15) ) User Address

(64)

Incompatibilidades dos paradigmas

Problema mais complexo

Modelo relacional não suporta herança/polimorfismo

Associação polimórfica!

(65)

Incompatibilidades dos paradigmas

Queremos escrever consultas que referem-se à classe BillingDetails e retornar instâncias concretas dessa classe!

Associação polimórfica!

(66)

Incompatibilidades dos paradigmas

Problema da identidade

No mundo relacional, existe um critério de igualdade: chave-primária

No mundo Java há dois: Igualdade de referência (testado com ==) e equivalência (com equals()) Complicações adicionais

Chaves naturais Chaves compostas

(67)

Incompatibilidades dos paradigmas

Problema das Associações

Java representa associações como referências para objetos

São inerentemente direcionais Para implementar associações

bidirecionais, é preciso criar referências dos dois lados da associação

Referências dos dois lados podem ser associações M-N

(68)

Incompatibilidades dos paradigmas

Problema das Associações

No mundo relacional, associações são representadas por chaves estrangeiras Não são inerentemente direcionais

Pode-se criar associações arbitrárias com projeção e joins

(69)

Incompatibilidades dos paradigmas

Navegação em objetos

Pula-se de um objeto para outro: objeto.getA().getB() sem a definição de um caminho previamente definido

Equivalente a fazer um query para cada pulo (nó do grafo) Portanto, a forma mais natural de navegar entre objetos em Java é a forma menos eficiente de recuperar dados em SQL

Soluçao: usar joins para minimizar queries

(70)

Mapeamento com Framework de Persistência

Usar uma camada de persistência

para lidar com as

incompatibilidades dos paradigmas

Requer arquitetura com separação em camadas que concentram-se em um interesse predominante

Solução recomendada pelos padrões J2EE

(71)

Mapeamento com Framework de Persistência

(72)

Persistencia com JDBC

Criar uma camada de persistência usando JDBC. O padrão mais usado é o DAO – Data Access

Object

Isola todas as chamadas ao banco (SQL) em um

objeto e fornece uma API via interface para clientes Clientes são objetos de negócio que desconhecem a tecnologia de persistência usada

(73)

Persistencia com JDBC

Mas criar uma boa camada de persistência exige trabalho

É preciso implementar

eficientemente todo o SQL de acesso, relacionamentos,

atualização, etc. e integrar com APIs de transações, cache, etc

(74)

Exemplo de Framework de

Mapeamento Objeto-Relacional (ORM) Hibernate

(75)

Uma Solução de ORM normalmente oferece

Uma API para criação de objetos

Uma linguagem ou API de consultas

Um recurso para especificar meta dados de mapeamento

Gerenciamento de transações

(76)

Hibernate

O Hibernate é uma das soluções mais difundidas para Mapeamento OR em Java. (Outras também famosas são OJB, JDO e o Toplink).

Ele está sob a LGPL, ou seja, ele pode ser um usado em código aberto e projetos comerciais. Usam o Hibernate em seus projetos: Sony, AT&T, PwC, Cisco... entre outras empresas.

(77)

Mapeamento OR em Hibernate

O hibernate isola o aplicativo de contato

direto com o banco de dados, servindo como ponte entre os dois sistemas.

O hibernate não é intrusivo. Ou seja, ele não obriga o programado a estender uma classe dele no seu aplicativo.

(78)

Mapeamento OR em Hibernate

No Hibernate temos que criar um

arquivo de mapeamento que serve

como o modelo da persistência lógica. Hibernate monta um BD relacional

consistente para a estrutura OO dada. O arquivo de mapeamento é utilizado para os padrões de escrita e consulta.

(79)

Exemplo

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>

<class name="org.applabs.base.User" table="USER">

<id column="USER_ID" name="id" type="java.lang.Long"></id> <property column="USER_NAME" name="userName" type=.../> <property column="USER_PASSWORD" name="userPassword" .../> <property column="USER_FIRST_NAME" name="userFirstName" .../> ...

<set name="properties" inverse="true"> <key column="USER_ID" />

<one-to-many class="org.applabs.base.UserProp" /> </set>

</class>

(80)

HQL (Hibernate Query Language)

Para fazer consultas ao banco o

Hibernate usa HQL, que é um dialeto OQL.

Ex:

select nome, price

from eg.CD as cd

(81)
(82)

Oracle OR 11g

Tipos de Objetos (TADs)

Nested Tables (Tabelas aninhadas) VArrays (Varying Arrays)

Large Objects (LOBs) References (REF)

Object View (Visão de Objetos)

No entanto, há algumas diferenças com o padrão SQL:1999

(83)

Oracle 11g

Suporta modelos:

Relacional – Padrão SQL 1992

Objeto-relacional - conceitos OO e estruturas como tipos de dados abstratos, nested tables e varying arrays.

Orientado a objetos - projeto é, desde o seu início, desenvolvido com análise orientada a objetos.

(84)
(85)
(86)

Esquema

(87)
(88)

Tipos de Objetos

Um Tipo de Objeto é um esquema de objeto com 3 componentes: Nome, Atributos, Métodos

Um tipo de objeto pode ser usado para:

Definir o domínio de atributos (“column object”) de tabelas

Definir o tipo dos atributos de TADs ( “embedded object”)

(89)

Tipos de Objetos

Um tipo de objeto em Oracle possui a seguinte estrutura:

(90)

Tipos de Objetos

Exemplo de especificação da interface pública de um objeto Sintaxe resumida:

CREATE [OR REPLACE] TYPE nome_tipo AS OBJECT (

[lista de atributos] [lista de métodos] );

(91)

Tipos de Objetos

Pode ser usado da mesma forma que é usado um tipo primitivo

-- em uma tabela

CREATE TABLE tb_contatos ( contato tp_pessoa,

dt_contato DATE );

CREATE TABLE tb_domicilio ( local tp_ponto,

(92)

Tipos de Objetos

Pode ser usado da mesma forma que é usado um tipo primitivo

-- em um Type

CREATE TYPE tp_contatos AS OBJECT ( contato tp_ pessoa,

dt_contato DATE );

CREATE TYPE tp_domicilio AS OBJECT ( local tp_ponto,

(93)

Tipos de objetos

create type ENDERECO_TYP as object (rua VARCHAR2(50),

cidade VARCHAR2(25), estado CHAR(2),

cep NUMBER);

create table PESSOAS (

nome VARCHAR2(25),

endereço ENDERECO_TYP

);

ENDEREÇO_TYP é usado para definir o tipo

(94)

Tipos de objetos

Não é possível ocorrer uma inserção de dados em

PESSOA_TYP. Isso porque um tipo de objeto descreve dados, mas não os armazena.

create type ENDERECO_TYP as object (rua VARCHAR2(50),

cidade VARCHAR2(25), estado CHAR(2),

cep NUMBER);

create type PESSOA_TYP as object

(nome VARCHAR2(25), endereco ENDERECO_TYP);

ENDEREÇO_TYP é usado para definir o tipo do atributo Endereco do

(95)

Tipos de objetos

Para armazenar dados é necessário a criação de uma tabela a partir de um tipo de objeto.

A tabela PESSOAS irá armazenar dados com a estrutura do tipo PESSOA_TY

create type PESSOA_TY as object ( Nome VARCHAR2(25),

CPF NUMBER,

Endereco ENDERECO_TY );

create table PESSOAS of PESSOA_TY

(96)

Exemplo com métodos

CREATE TYPE person_typ AS OBJECT ( idno NUMBER,

first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25),

phone VARCHAR2(20),

MAP MEMBER FUNCTION get_idno RETURN NUMBER, MEMBER PROCEDURE details (SELF IN OUT NOCOPY person_typ)

(97)

Exemplo (cont.)

CREATE TYPE BODY person_typ AS

MAP MEMBER FUNCTION get_idno RETURN NUMBER IS BEGIN

RETURN idno; END;

MEMBER PROCEDURE details ( SELF IN OUT NOCOPY person_typ ) IS

BEGIN

-- use DBMS_OUTPUT package to display details DBMS_OUTPUT.PUT_LINE(TO_CHAR(idno) || ' ' || first_name || ' ' || last_name);

DBMS_OUTPUT.PUT_LINE(email || ' ' || phone); END;

Referências

Documentos relacionados

A este respeito Valene Smith (1989) refere que a atividade turística nem sem- pre é negativa ou prejudicial para as culturas e povos locais, pois muitas vezes os turistas

A Governança Climática está ligada a essas mudanças de comportamentos e de visões de mundo ao entender que os processos decisórios coletivos envolvendo questões

Em cada câmara técnica, o resumo de projeto e o projeto técnico-financeiro serão avaliados por uma comissão julgadora composta por pelo menos seis (06) de seus

O TROLL ´ e executado somente uma vez para todas as seq¨ uˆ encias, e para todos os SSR’s encontrados de cada seq¨ uˆ encia, ´ e gravado um respectivo arquivo Experiment File (a

Como se pode perceber, as narrativas dos entrevistados indicam que um conjunto de fatores concorre para que a realização de práticas sexuais indesejadas e a utilização

Desta forma, a bebida láctea elaborada neste estudo apresentou características probióticas, prebióticas e antioxidantes e possibilitou a utilização de soro de

Em caso de ligação do cabo de sinal coletivo de avaria ao potencial de rede: ◾ Fase SSM = Fase L1 6.6 Ligar PERIGO Existe perigo de morte devido a corrente elétrica durante

A cabeça dorsal recobre parte do levator palatiquadrati atingindo a carti- lagem de Meckel, sendo bastante volumosa, origina-se junto ao processo quadrado na região mediana do