1 Conceitos de SGBD Objeto-Relacional Oracle 10g [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 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. 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 <nomeDoTipo_tipo> e tabelas como <nomeDaTabela_tabela> 29 Entendendo o esquema. . . Tabela Cliente_tab (de Cliente_tipo) id Cliente nome Cliente endereco_obj telefones_var Number (NUMBER) Text (VARCHAR2(200)) Tipo Objeto (Endereco_tipo) Varray (Telefone_vartipo) PK VARRAY Telefone_vartipo (de VAR CHAR2) Telefone Number(VARCHAR2(20)) 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)) PK 30 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; 31 CREATE TYPE Endereco_tipo AS OBJECT( logradouro VARCHAR2(200), cidade VARCHAR2(200), estado CHAR(2), cep VARCHAR2(20) ); 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 ); 32 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 ); 33 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) 34 Referências • www.cin.ufpe.br/~if685 • http://disciplinas.lia.ufc.br/bdnc061/ • http://downloadeast.oracle.com/docs/cd/B19306_01/appdev.10 2/b14260/adobjxmp.htm • R. Elmasri & S. Navathe – Sistemas de Banco de Dados, Addison Wesley, 2005, 4ª edição.