1.07k likes | 1.32k Views
Capítulo 3 : Modelo de Dados Objeto-Relacional. Banco de Dados II Prof. Carlos Eduardo Pires cesp@dsc.ufcg.edu.br. Conteúdo. Bancos de Dados Objeto-Relacional Modelo de Dados Objeto-Relacional Linguagem de Consultas Objeto-Relacional
E N D
Capítulo 3: Modelo de Dados Objeto-Relacional Banco de Dados II Prof. Carlos Eduardo Pires cesp@dsc.ufcg.edu.br
Conteúdo • Bancos de Dados Objeto-Relacional • Modelo de Dados Objeto-Relacional • Linguagem de Consultas Objeto-Relacional • Visão geral dos conceitos de OO disponíveis no SGBD Oracle 11g • Extensões para criar objetos complexos • O impacto da OO em consultas SQL • Integração OO-Relacional através de Visões de Objeto Capítulo 3: Modelo de Dados Objeto-Relacional
Banco de Dados Objeto-Relacional • SGBDs Objeto-Relacional combinam os benefícios do modelo relacional com a capacidade de modelagem do modelo OO • Fornecem suporte para consultas complexas sobre dados complexos • Atendem aos requisitos das novas aplicações e da nova geração de aplicações de negócios Capítulo 3: Modelo de Dados Objeto-Relacional
Banco de Dados Objeto-RelacionalModelos e Linguagens O Modelo de Dados OR é uma extensão do modelo Relacional 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 suportar o modelo de objetos As extensões incluem consultas envolvendo objetos, atributos multivalorados, Tipos Abstratos de Dados (TADs), métodos e funções como predicados de busca em uma consulta Capítulo 3: Modelo de Dados Objeto-Relacional
Modelo de Dados Objeto-Relacional Permite especificar e utilizar TADs da mesma forma que os tipos de dados pré-definidos TADs são tipos de dados definidos pelo usuário que encapsulam comportamento e estrutura interna (atributos) A tabela convencional é estendida para permitir a referência de objetos (referência de tipos), TADs e valores alfanuméricos como domínio de colunas Capítulo 3: Modelo de Dados Objeto-Relacional
Modelo de Dados Objeto-Relacional Utiliza referências para representar conexões inter-objetos tornando as consultas baseadas em caminhos de referência mais compactas e eficientes do que as consultas feitas com junção Herança é implementada organizando todos os tipos em hierarquias Utiliza construtores set, list, multiset ou array para organizar coleções de objetos Capítulo 3: Modelo de Dados Objeto-Relacional
Benefícios do Modelo de Dados Objeto-Relacional Nova Funcionalidade Aumenta indefinidamente o conjunto de tipos e funções fornecidas pelo SGBD Desenvolvimento de aplicações simplificado Reuso de código por todas as aplicações Capítulo 3: Modelo de Dados Objeto-Relacional
Linguagem de Consultas paraBancos de Dados Objeto-Relacional O resultado de uma consulta ainda consiste de dados em formato tabular Um SGBDOR ainda é relacional pois suporta dados armazenados em tabelas formadas por linhas e colunas A linguagem de consultas para BDOR é uma extensão da linguagem SQL, utilizada para definição e manipulação de dados e consultas Capítulo 3: Modelo de Dados Objeto-Relacional
Padrão SQL:1999 (SQL-3) É a base para muitos SGBDs OR Oracle, Informix Universal Server, IBM DB2 Universal Database, entre outros Caracterizada como “SQL Orientada a Objetos” Envolve características adicionais classificadas em: Relacionais Novos tipos de dados e novas cláusulas Orientadas a Objetos Tipos de dados definidos pelo usuário, definição de métodos e uso de referências Capítulo 3: Modelo de Dados Objeto-Relacional
Conteúdo do Padrão SQL:1999 Multi-part standard — ISO/IEC 9075-n:1999 Parte 1: SQL/Framework Parte 2: SQL/Foundation Parte 3: SQL/CLI Parte 4: SQL/PSM Parte 5: SQL/Bindings Parte 7: SQL/Temporal Parte 9: SQL/MED (Management of External Data) Parte 10: SQL/OLB (Object Linking Binding: JDBC e SQLJ) SQL/OLAP SQL/MM: Spatial, Text, Image Capítulo 3: Modelo de Dados Objeto-Relacional
Part 2: SQL/Foundation Estamos interessados neste curso na parte do padrão que trata de Orientação a Objetos: Tipos de dados definidos pelo usuário Atributos e comportamento Encapsulamento: funções e métodos Hierarquias de tipos (herança simples) User-defined CAST, ordenação Tabelas tipadas e tipos referência Capítulo 3: Modelo de Dados Objeto-Relacional
Tipos de Dados Definidos pelo Usuário Capítulo 3: Modelo de Dados Objeto-Relacional • UDT – User Defined Types • Evolução dos tipos em SQL: • Sempre houve os tipos embutidos (built-in) • INTEGER, SMALLINT, CHAR, VARCHAR, DATE, TIME e TIMESTAMP • Alguns tipos proprietários • Oracle NUMBER e RAW; Sybase SMALLMONEY e IMAGE • Após alguns anos, surgiram BLOB e CLOB • Houve algumas tentativas de “DBMS vendors” de propor soluções para certos tipos de dados específicos: texto, GIS, imagens e time series
Tipos de Dados Definidos pelo Usuário Capítulo 3: Modelo de Dados Objeto-Relacional • Entretanto, o que se queria era uma solução mais genérica que pudesse estender o SGBD com tipos específicos: • Solução • UDT • Observação • O termo “User” em UDT não quer dizer usuário final! • E sim, desenvolvedor da aplicação
UDT Capítulo 3: Modelo de Dados Objeto-Relacional • Definição • Um UDT é um tipo que não é embutido em um SGBD ou linguagem de programação, mas que pode ser definido como parte do desenvolvimento de uma ou mais aplicações, com possível comportamento definido em sua criação (adaptada de Jim Melton: Advanced SQL:1999, Morgan Kauffman, 2003)
Tipos Definidos pelo Usuário Tipos de UDT: Structured types Reference types Capítulo 3: Modelo de Dados Objeto-Relacional
Structured Types Também conhecidos como “Abstract Data Types” (Tipos Abstratos de Dados) Pode conter uma estrutura complexa Análogo a struct na linguagem C Estado Atributos Comportamento Métodos, funções e procedures Capítulo 3: Modelo de Dados Objeto-Relacional
Atributos Cada atributo pode ser: Tipo built-in, incluindo coleção Tipo definido pelo usuário O sistema gera uma função “get” (observer) e uma função “set” (mutator) para cada atributo Capítulo 3: Modelo de Dados Objeto-Relacional
Encapsulamento Esconde implementação dos usuários Permite que a implementação mude sem afetar as aplicações – desde que a interface provida permaneça constante Aplicações acessam tudo através da interface funcional, incluindo os atributos usando as funções observer e mutator Capítulo 3: Modelo de Dados Objeto-Relacional
Procedures, Funções e Métodos Conceito genérico Rotina procedure, function, method (normalmente “stored”) Procedure Parâmetros IN/OUT Função Apenas parâmetro IN (output retornado como valor da função) Métodos Caso especial de funções Capítulo 3: Modelo de Dados Objeto-Relacional
Procedures, Funções e Métodos Procedures Podem ser overloaded (sobrecarregadas) Mesmo nome, com quantidade diferente de parâmetros Tipos de dados dos argumentos não são utilizados para overloading Existem em qualquer esquema (usuário) Não estão ligados a um tipo estruturado Capítulo 3: Modelo de Dados Objeto-Relacional
Procedures, Funções e Métodos Funções Podem ser overloaded (sobrecarregadas) Várias funções com o mesmo nome, mas com o mesmo número de parâmetros Distintos pelos tipos de dados dos argumentos Existem em qualquer esquema (usuário) Não estão ligados a um tipo estruturado Capítulo 3: Modelo de Dados Objeto-Relacional
Procedures, Funções e Métodos Métodos Podem ser overloaded (sobrecarregados) Fortemente acoplado a um único tipo estruturado Deve estar no mesmo esquema (usuário) da definição do tipo Tipo do argumento é associado ao tipo estruturado Capítulo 3: Modelo de Dados Objeto-Relacional
Notação: ponto (.) vs. funcional Notação funcional c(b(a)) Exemplo: TRIM(TO_CHAR(v_age)) Notação de ponto a.b.c Funções DEVEMusar a notação funcional Métodos DEVEMusar a notação de ponto Observer: SELECT EMP.AGE(dt_nasc) IDADE FROM EMPREGADO EMP Mutator: SET EMP.AGE = 10, onde, EMP = TAD e AGE = Atributo Capítulo 3: Modelo de Dados Objeto-Relacional
Diferenças entre Funções e Métodos Capítulo 3: Modelo de Dados Objeto-Relacional
Tipos de Método Capítulo 3: Modelo de Dados Objeto-Relacional • Há dois tipos de métodos: • Static methods: opera no tipo de dados propriamente dito • Instance methods: opera na instância de um tipo
Declaração de Métodos Capítulo 3: Modelo de Dados Objeto-Relacional • Há dois lugares para definição de métodos • Declaração do Tipo • Os métodos são declarados (suas assinaturas) na definição do tipo de dados • Implementação do Tipo • A implementação dos métodos fica em outro lugar, utilizando-se de um comando SQL específico para tal fim • O código pode ser escrito em SQL ou em outra linguagem de programação (Java e C++)
Exemplo de Método (Declaração) TAD ATRIBUTOS Permite HERANÇA ESPECIFICAÇÃO DO MÉTODO TIPO DE DADOS Capítulo 3: Modelo de Dados Objeto-Relacional CREATE TYPE Filme AS ( título VARCHAR (100), descricao VARCHAR (500), duracaoMinutos INT) NOT FINAL METHOD duracaoEmHoras() RETURNS INTERVAL HOUR(2) TO MINUTE;
Exemplo de Método (Implementação) Capítulo 3: Modelo de Dados Objeto-Relacional CREATE INSTANCE METHOD duracaoEmHoras() RETURNS INTERVAL HOUR(2) TO MINUTE FOR Filme RETURN CAST (SELF.duracaoMinutos AS INTERVAL HOUR(2) TO MINUTE);
Criação de Tabela Capítulo 3: Modelo de Dados Objeto-Relacional Exemplo /* Colunainfo usa um tipo de dados definido pelo usuário */ CREATE TABLE tb_Filme ( cod INT, info FILME, aluguel DECIMAL(5,2));
Chamada a Método Capítulo 3: Modelo de Dados Objeto-Relacional Recupere a duração em horas e minutos do filme ‘Ghost’ SELECT mt.info.duracaoEmHoras() AS duracao FROM tb_Filme AS mt WHERE mt.info.titulo = ‘Ghost’
Construtores Considere: CREATE TYPE rational AS ( numerator INTEGER, denominator INTEGER); Nenhum “new object” é criado Ao invés usa-se da seguinte forma: DECLARE VARIABLE ratvar rational; SET ratvar = rational(5,7); ... INSERT INTO table1 (ratcol) VALUES (rational(13,131)); CREATE TABLE table1 (ratcol rational); Método Construtor Capítulo 3: Modelo de Dados Objeto-Relacional
Construtores Construtor default é gerado pelo sistema, com o mesmo nome do tipo de dados abstratos: CREATE FUNCTION rational() RETURNS rational; Métodos são overloadable Qualquer número de construtores definidos pelo usuário: CREATE FUNCTION rational (numer, denom) RETURNS rational CREATE FUNCTION rational (denom) RETURNS rational Capítulo 3: Modelo de Dados Objeto-Relacional
Sintaxe de Tipo Estruturado CREATE TYPE name [ UNDER supertype-name ] AS ( attrib-name data type,... ) [ [ NOT ] INSTANTIABLE ] [ NOT ] FINAL [ REF ref-options ] [ method-spec,... ] Capítulo 3: Modelo de Dados Objeto-Relacional
Sintaxe Tipo Estruturado REF ref-options Definido pelo usuário: REF USING predefined-type [ ref-cast-option ] Derivado: REF (attrib-name, ... ) Gerado pelo sistema: REF IS SYSTEM GENERATED Capítulo 3: Modelo de Dados Objeto-Relacional
Sintaxe Tipo Estruturado method-spec Método original: [ INSTANCE | STATIC ] METHOD name (param-name type,... ) RETURNS type Método sobrescrito: OVERRIDING original-method Capítulo 3: Modelo de Dados Objeto-Relacional
Remoção de um UDT Capítulo 3: Modelo de Dados Objeto-Relacional DROP TYPE nome [CASCADE | RESTRICT]; CASCADE: apaga o tipo e os objetos dependentes (colunas, funções, etc) RESTRICT (default): não apaga o tipo se há objetos que dependem dele
Alterando um UDT Capítulo 3: Modelo de Dados Objeto-Relacional <alter type> ::= ALTER TYPE <nome> <action> <action> ::= ADD ATTRIBUTE <definition> | DROP ATTRIBUTE <nome> RESTRICT | ADD <method specification> | DROP <method specification>
Alterando um UDT Capítulo 3: Modelo de Dados Objeto-Relacional • Exemplos • ALTER TYPE filme ADD ATTRIBUTE year CHAR; • ALTER TYPE filme DROP ATTRIBUTE year RESTRICT; • ALTER TYPE filme ADD METHOD classificacao() RETURNS NUMBER; • ALTER TYPE filme DROP METHOD classificacao;
Herança de Tipos Permite a especialização dos tipos existentes “Subtype” e “Supertype” Capítulo 3: Modelo de Dados Objeto-Relacional
Herança Subtype herda tudo do supertype SQL:1999 dá suporte apenas a herança simples Na definição de subtype: Novos atributos podem ser adicionados Novos métodos podem ser adicionados Métodos podem ser sobrescritos (polimorfismo) Capítulo 3: Modelo de Dados Objeto-Relacional
Herança Observações Pode-se definir UDT contendo atributos cujos tipos são supertipos do tipo definido Não se pode definir UDT cujos atributos contenham o tipo do próprio tipo que está sendo definido (recursivo) Não se pode definir UDT contendo atributos com tipos de subtipos que ainda vão ser definidos Pessoa Atributo: dependente tipo_pessoa Emp Capítulo 3: Modelo de Dados Objeto-Relacional
UDT: Valores e não instâncias! Capítulo 3: Modelo de Dados Objeto-Relacional • Os tipos estruturados possuem valores e não instâncias! • Razão • Não há OID, que só ocorrerá no repositório que são as tabelas tipadas (vistas mais à frente)
UDT: Valores e não instâncias! Capítulo 3: Modelo de Dados Objeto-Relacional Exemplo: BEGIN DECLARE v1, v2 Filme; SET v1 = NEW Filme (‘Shrek’, ‘blá blá blá’, 118); SET v2 = v1; END;
User Defined Constructors (Inicializadores) Capítulo 3: Modelo de Dados Objeto-Relacional SQL:1999 dá suporte a métodos construtores (inicializadores) definidos pelo usuário Podem existir vários destes construtores, com mesmo nome do construtor provido pelo sistema, com lista de parâmetros diferente para cada construtor São chamados através da palavra-chave NEW Tais construtores devem ter SELF como retorno
User Defined Constructors (Inicializadores) Capítulo 3: Modelo de Dados Objeto-Relacional Exemplo CREATE METHOD filme (nome VARCHAR(50), descr VARCHAR(500), dur INT) RETURNS filme BEGIN SET SELF.titulo= nome; SET SELF.descricao = descr; SET SELF.duracao = dur; RETURN SELF; END;
User Defined Constructors (Inicializadores) Chamada ao Método Construtor Capítulo 3: Modelo de Dados Objeto-Relacional BEGIN DECLARE f filme; SET f = NEW filme (‘Shrek’, ‘blá blá blá’, 135); … END;
System Defined Constructors (Inicializadores) Capítulo 3: Modelo de Dados Objeto-Relacional Exemplo anterior usando o construtor definido pelo sistema BEGIN DECLARE f filme; SET f = NEW filme(); -- cria com atributos vazios SET f.titulo= ‘Shrek’; SET f.duracao = 135; END; -- atributo descrição contém valor null
Inserindo Dados Capítulo 3: Modelo de Dados Objeto-Relacional CREATE TABLE tb_Filme ( cod INT, info FILME, aluguel DECIMAL(5,2)); INSERT INTO tb_Filme VALUES( ‘1203’, -- código do filme NEW Filme (‘Gone with the Wind’, ‘blá blá blá’,128), -- instância de Filme 2.99); -- preço aluguel
Inserindo Dados Capítulo 3: Modelo de Dados Objeto-Relacional Mesma inserção anterior usando uma variável (instanciada) BEGIN DECLARE f filme; SET f = NEW filme (‘Shark’, ‘blá blá blá’, 137); INSERT INTO tb_Filme VALUES ( ‘1207’, -- código do filme f, -- instância de Filme 3.59); -- preço aluguel END;
Atualizando Dados BD1 Capítulo 3: Modelo de Dados Objeto-Relacional 1. Atualizando o valor do aluguel de um filme particular UPDATE tb_Filme SET aluguel = 1.99 WHERE codigo = 1203;