1 Conceitos de SGBD ObjetoRelacional Oracle 10 g
1 Conceitos de SGBD Objeto-Relacional Oracle 10 g [1] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina
2 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
3 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
4 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
5 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
6 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
7 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
8 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.
9 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
10 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>;
11 Sintaxe (INSERT & DELETE) INSERT INTO <NOME DA TABELA> (<NOMES DE ATRIBUTOS> VALUES (<VALORES>): DELETE FROM <NOME DA TABELA> WHERE <CONDIÇÃO>;
12 Exemplo Tipos de Objetos & Tabelas de Objetos create type ENDERECO_TY as object (Rua VARCHAR 2(50), Cidade VARCHAR 2(25), Estado CHAR(2), Cep NUMBER); create table PESSOAS (Nome VARCHAR 2(25), Endereço ENDERECO_TY); ENDERECO_TY é usado para definir o tipo (domínio) da coluna Endereço da tabela PESSOAS.
13 Exemplo Tipos de Objetos & Tabelas de Objetos • Inserção na tabela pessoas INSERT INTO PESSOAS VALUES (Fernando Fonseca' , ENDERECO_TY(‘Rua Tal 57', ‘Recife', ‘PE', 60160230)) • Método construtor para o tipo ENDERECO_TY.
14 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
15 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
16 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.
17 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.
18 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.
19 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>
20 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
21 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
22 Coleções • Coleções modelam: ▫ atributos multivalorados ▫ relacionamentos 1 -m • O ORACLE oferece dois tipos de coleções: ▫ VARRAYS ▫ NESTED TABLES.
23 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>;
24 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>;
25 Quando usar? ! Varray • Ordem dos elementos é importante • Número limitado de elementos: armazena mais eficientemente • Ex: Telefones Nested Table • 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)
26 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>;
27 Caso de estudo
28 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 <nome. Do. Tipo_tipo> e tabelas como <nome. Da. Tabela_tabela>
29 Entendendo o esquema. . . Tabela Cliente_tab (de Cliente_tipo) id Cliente nome Cliente endereco_obj telefones_var Number (NUMBER) Text (VARCHAR 2(200)) Tipo Objeto (Endereco_tipo) Varray (Telefone_vartipo) PK VARRAY Telefone_vartipo (de VAR CHAR 2) Telefone Number(VARCHAR 2(20)) Objeto Coluna endereco_obj (de Endereco_tipo) Lo g radou u ro Cidade Estado CEP Text (VARCHAR 2(200)) Text (CHAR(2)) Number (VARCHAR 2(20)) PK
30 Resolução Criação dos Tipos Necessários CREATE TYPE Item. Estoque_tipo AS OBJECT( id. Estoque NUMBER, preco NUMBER, taxa NUMBER ); CREATE TYPE Item_tipo AS OBJECT( id. Item NUMBER, estoque_ref REF Item. Estoque_tipo, quant NUMBER, desconto NUMBER ); CREATE TYPE Item_ntabtipo AS TABLE OF Item_tipo;
31 CREATE TYPE Endereco_tipo AS OBJECT( logradouro VARCHAR 2(200), cidade VARCHAR 2(200), estado CHAR(2), cep VARCHAR 2(20) ); CREATE TYPE Telefone_vartipo AS VARRAY(10) OF VARCHAR 2(20); CREATE TYPE Cliente_tipo AS OBJECT( id. Cliente NUMBER, nome. Cliente VARCHAR 2(200), endereco_obj Endereco_tipo, telefones_var Telefone_vartipo, ORDER MEMBER FUNCTION comp. Pedidos. Clientes(x IN Cliente_tipo) RETURN INTEGER );
32 CREATE TYPE Pedido_tipo AS OBJECT( id. Pedido NUMBER, Cliente_ref REF Cliente_tipo, data. Pedido DATE, data. Entrega DATE, item_ntab Item_ntabtipo, entregar. No. Endereco_obj Endereco_tipo, MAP MEMBER FUNCTION get. Id. Pedido RETURN NUMBER, MEMBER FUNCTION soma. Itens RETURN NUMBER );
33 Resolução Criação das Tabelas Necessárias CREATE TABLE Cliente_tab OF Cliente_tipo (id. Cliente PRIMARY KEY); CREATE TABLE Pedido_tab OF Pedido_tipo ( PRIMARY KEY (id. Pedido), FOREIGN KEY (Cliente_ref) REFERENCES C liente_tab) NESTED TABLE item_ntab STORE AS Pedido. Item_ntab; CREATE TABLE Item. Estoque_tab OF Item. Estoque_tipo (id. Estoque PRIMARY KEY)
34 Referências • www. cin. ufpe. br/~if 685 • http: //disciplinas. lia. ufc. br/bdnc 061/ • http: //downloadeast. oracle. com/docs/cd/B 19306_01/appdev. 10 2/b 14260/adobjxmp. htm • R. Elmasri & S. Navathe – Sistemas de Banco de Dados, Addison Wesley, 2005, 4ª edição.
- Slides: 34