Conceitos de SGBD Objeto-Relacional Oracle 10g [1]
Monitoria GDI
André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina
Método de análise
• Aula de hoje:
▫ SGBD Objeto-relacional
▫ Operador REF
▫ Coleções
▫ Criação dos tipos e dos relacionamentos
• Próxima aula:
▫ INSERTS e SELECT
▫ Coleções de coleções
▫ Outros Operadores importantes
▫ Herança e Funções
SGBD Objeto-Relacional
• SGBD Objeto-Relacionais combinam os benefícios do sistema Relacional com a capacidade de modelagem do modelo OO
• Dão suporte a consultas complexas sobre dados complexos
• Atendem aos requisitos das novas aplicações e da nova geração de aplicações de negócios
Modelos e Linguagens
• O sistema de dados OR é uma extensão do sistema Relacional
▫ As extensões incluem mecanismos para permitir aos
usuários estender o banco de dados com tipos e funções específicas da aplicação
• A linguagem de consulta OR é uma extensão da linguagem SQL para dar suporte ao sistema de objetos
▫ As extensões incluem consultas envolvendo objetos,
atributos multivalorados, TAD, métodos e funções como predicados de busca em uma consulta
Modelo Objeto-Relacional
1. Permite especificar e utilizar Tipos de Abstratos Dados (TAD) da mesma forma que os tipos de dados pré-definidos
2. TAD são tipos de dados definidos pelo usuário que encapsulam comportamento e estrutura interna (atributos)
3. A tabela convencional é estendida para permitir a referência de objetos (referência de tipos),
TAD e valores alfanuméricos como domínio de colunas
Modelo Objeto-Relacional
4. Utiliza referências para representar conexões entre os objetos tornando as consultas baseadas em caminhos de referência mais compactas do que as consultas feitas com junção
5. Herança é implementada organizando os tipos em hierarquias
6. Utiliza os construtores set, list, varray ou nested table para organizar as coleções de objetos
Linguagem de Consultas
• O resultado de uma consulta ainda consiste em tabelas
▫ Um SGBD Objeto-Relacional ainda é relacional pois dá suporte ao armazenamento de dados em tabelas
formadas por linhas e colunas
• A linguagem de consultas para SGBDOR é uma extensão da linguagem SQL, utilizada para
definição e manipulação de dados e consultas
Tipos de Objetos
• Tipos de Objetos (Object Types)
▫ Objetos são abstrações de entidades do mundo real, como por exemplo, uma ordem de compra, um cliente, um produto...
▫ Um tipo de objeto funciona como um molde para criação de objetos, através da atribuição de valores a essa
estrutura de dados.
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 TAD ( “embedded object”)
▫ Criar uma tabela de objetos
Sintaxe
(Tipos Objetos & Tabelas de Objetos)
CREATE TYPE <NOME DO TIPO> AS OBJECT (
<LISTA DE ATRIBUTOS E MÉTODOS>
);
CREATE TABLE <NOME DA TABELA> OF <NOME DO TIPO> (
<LISTA DE PROPRIEDADES DOS ATRIBUTOS>
);
DROP TABLE <NOME DA TABELA>;
DROP TYPE <NOME DO TIPO>;
Sintaxe
(INSERT & DELETE)
INSERT INTO <NOME DA TABELA>
(<NOMES DE ATRIBUTOS>
VALUES (<VALORES>):
DELETE FROM <NOME DA TABELA>
WHERE <CONDIÇÃO>;
Exemplo
Tipos de Objetos & Tabelas de Objetos
create type ENDERECO_TY as object (Rua VARCHAR2(50),
Cidade VARCHAR2(25), Estado CHAR(2),
Cep NUMBER);
create table PESSOAS (Nome VARCHAR2(25),
Endereço ENDERECO_TY);
ENDERECO_TY é usado para definir o tipo (domínio) da
coluna Endereço da tabela PESSOAS.
Exemplo
Tipos de Objetos & Tabelas de Objetos
• Inserção na tabela pessoas
• Método construtor para o tipo ENDERECO_TY.
INSERT INTO PESSOAS VALUES
(Fernando Fonseca' , ENDERECO_TY(‘Rua Tal 57',‘Recife', ‘PE', 60160230))
Tabelas de Objetos
• Objetos são diferentes de tabelas
• Tipos de Objetos apenas definem uma estrutura lógica
• Tabelas armazenam espaço físico
• Cria-se tabelas de objetos previamente definidos
• Cada tabela recebe instâncias de objetos de apenas um tipo
Observações (Tabelas de Objetos)
• Cada linha na tabela de objetos é uma instância de um objeto.
• O tipo de objeto é o único atributo da tabela de objetos.
• Recuperação de várias informações com uma consulta simples
Observações (Tabelas de Objetos)
• É possível criar várias tabelas do mesmo tipo
• Tabelas diferentes com o mesmo tipo podem ter variações entre si.
▫ Ex: os atributos escolhidos para chave estrangeira de cada tabela podem ser diferentes.
Manipulando Tabelas de Objetos
• Existem diferenças significativas no modo de utilização de uma tabela de objetos.
• Cada linha dentro de uma tabela de objetos possuirá um OID, e essas linhas poderão ser referenciadas como objetos.
Identificadores de Objetos
• Uma tabela de objetos contém uma coluna gerada pelo SGBD contendo o OID do “row
object”. O oid de um objeto é único e imutável.
• Sobre essa coluna de OID é também criado
automaticamente um índice para prover acesso eficiente sobre o objeto através do OID. A coluna de OID é equivalente a se ter uma coluna extra de 16 bytes para chave primária.
• Um OID permite que um “row object” seja
referenciado em atributos de outros objetos ou em colunas de tabelas relacionais.
Tipo REF
• REF - Retorna referência OID(object id) a uma instância da object table
• Um objeto do tipo REF encapsula uma referência para um
“row object” de um tipo de objeto especificado;
• O valor de um objeto do tipo REF é um “ponteiro lógico”
para um row object.
SELECT REF(T) FROM
<nome_tabela> T WHERE
<condicao>
Abordagem Objeto-Relacional
• Relacional: quebra de endereços ou vários telefones em colunas não-relacionadas
• OR:
• Tipos para representar um endereço inteiro ou uma lista de telefones.
• Tabelas Aninhadas para manter atributos dentro do objeto, em vez de armazená-los separadamente
Objeto Linha x Objeto Coluna
• Objetos Linha: instâncias de objetos em uma tabela do seu tipo.
• Objetos Coluna: objetos incorporados em outro objeto, o qual é o tipo da tabela.
▫ Não ocupam uma linha da tabela de objetos
Coleções
• Coleções modelam:
▫atributos multivalorados
▫relacionamentos 1-m
• O ORACLE oferece dois tipos de coleções:
▫VARRAYS
▫NESTED TABLES.
Coleções - VARRAY
• Armazenam uma série de entradas de dados associadas a uma linha de um banco de dados
• Modelam relacionamento 1-para-muitos e atributos multivalorados
CREATE TYPE <NOME DO CONJUNTO> AS VARRAY(<tamanho>) OF <TIPO DOS OBJETOS>;
Coleções – Nested Table
• É uma tabela que é representada como uma coluna dentro de outra tabela.
• É um conjunto não ordenado de elementos do mesmo tipo.
• Tem uma única coluna e o tipo da coluna é um tipo pré-definido ou um tipo de objeto.
CREATE TYPE <TIPO DA NESTED TABLE>
AS TABLE OF <TIPO DO OBJETO>;
Quando usar?!
• Ordem dos elementos é importante
• Número limitado de
elementos: armazena mais eficientemente
• Ex: Telefones
• Fazer consultas SQL em
elementos da NT (não é possível em Varrays)
• A ordem não é importante (SQL pode ordenar a saída se
necessário)
• Não há limite de elementos
• Adicionar dados na NT (em Varrays não há como)
Varray Nested
Table
Observações (Coleções)
• Se é necessário eficiência na execução de
consultas sobre coleções, então é recomendado o uso de nested tables.
• Tanto VARRAY quanto NESTED TABLE podem usar o tipo REF como atributo.
CREATE TYPE <TIPO DA NESTED TABLE>
AS TABLE OF REF <TIPO DOS OBJETOS>;
CREATE TYPE <NOME DO CONJUNTO> AS
VARRAY(<tamanho>) OF REF <TIPO DOS OBJETOS>;
Caso de estudo
Exercício 1
• Criar os Objects Types necessários
• Criar as Objects Tables a partir dos tipos
Obs: Para melhor compreensão, nomeiem os
tipos criados como <nomeDoTipo_tipo> e
tabelas como <nomeDaTabela_tabela>
Entendendo o esquema. . .
id Cliente nome Cliente endereco_obj telefones_var Number
(NUMBER) Text (VARCHAR2(200)) Tipo Objeto
(Endereco_tipo) Varray
(Telefone_vartipo) P K
Telefone
Number(VARCHAR2(20))
Tabela Cliente_tab (de Cliente_tipo)
VARRAY Telefone_vartipo (de VAR CHAR2)
Objeto Coluna endereco_obj (de Endereco_tipo)
Lo g radou u ro Cidade Estado CEP
Text
(VARCHAR2(200) )
Text
(VARCHAR2(200) )
Text
(CHAR(2))
Number
(VARCHAR2(20))
P K
Resolução
Criação dos Tipos Necessários
CREATE TYPE ItemEstoque_tipo AS OBJECT(
idEstoque NUMBER, preco NUMBER,
taxa NUMBER );
CREATE TYPE Item_tipo AS OBJECT(
idItem NUMBER,
estoque_ref REF ItemEstoque_tipo, quant NUMBER,
desconto NUMBER );
CREATE TYPE Item_ntabtipo AS TABLE OF Item_tipo;
CREATE TYPE Telefone_vartipo
AS VARRAY(10) OF VARCHAR2(20);
CREATE TYPE Cliente_tipo AS OBJECT(
idCliente NUMBER,
nomeCliente VARCHAR2(200), endereco_obj Endereco_tipo, telefones_var Telefone_vartipo, ORDER MEMBER FUNCTION
compPedidosClientes(x IN Cliente_tipo) RETURN INTEGER );
CREATE TYPE Endereco_tipo AS OBJECT(
logradouro VARCHAR2(200), cidade VARCHAR2(200),
estado CHAR(2), cep VARCHAR2(20) );
CREATE TYPE Pedido_tipo AS OBJECT(
idPedido NUMBER,
Cliente_ref REF Cliente_tipo, dataPedido DATE,
dataEntrega DATE,
item_ntab Item_ntabtipo,
entregarNoEndereco_obj Endereco_tipo,
MAP MEMBER FUNCTION getIdPedido RETURN NUMBER, MEMBER FUNCTION somaItens RETURN NUMBER
);
Resolução
Criação das Tabelas Necessárias
CREATE TABLE Cliente_tab OF Cliente_tipo
(idCliente PRIMARY KEY);
CREATE TABLE Pedido_tab OF Pedido_tipo ( PRIMARY KEY (idPedido),
FOREIGN KEY (Cliente_ref) REFERENCES C liente_tab)
NESTED TABLE item_ntab STORE AS PedidoItem_ntab;
CREATE TABLE ItemEstoque_tab OF ItemEstoque_tipo
(idEstoque PRIMARY KEY)