Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da...

144
Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Transcript of Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da...

Page 1: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Modelo de Dados Objeto-Relacional

Banco de Dados II – 2009.2Bacharelado em Ciência da Computação

UFCGProf. Cláudio de Souza Baptista, Ph.D.

Page 2: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Conteúdo Bancos de Dados Objeto-Relacional

Modelo de Dados Objeto-Relacional Linguagem de Consultas Objeto Relacional

Visão geral dos conceitos de orientação a objetos disponíveis no ORACLE 11g

Extensões para criar Objetos Complexos O impacto da orientação a objetos em consultas

SQL Integração OO-Relacional através de Visões de

Objeto

Page 3: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

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

Page 4: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Banco de Dados Objeto-RelacionalModelos e Linguagens

O modelo de dados OR é uma extensão do modelo 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 suportar o modelo de objetos As extensões incluem consultas envolvendo objetos,

atributos multivalorados, TADs, métodos e funções como predicados de busca em uma consulta

Page 5: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Modelo de Dados Objeto-Relacional Permite especificar e utilizar tipos abstratos

de dados(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

Page 6: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Modelo de DadosObjeto-Relacional

Utiliza referências para representar conexões inter-objetos tornando as consultas baseadas em caminhos de referência mais compactas do que as consultas feitas com junção

Herança é implementada organizando todos os tipos em hierarquias

Utiliza os construtores set, list, multiset ou array para organizar coleções de objetos

Page 7: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

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 Consistência

Permite a definição de padrões, código reusável por todas as aplicações

Page 8: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Linguagem de Consultas paraBancos de Dados Objeto-Relacional

O resultado de uma consulta ainda consiste de tabelas Um SGBD Objeto-Relacional 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

Page 9: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

SQL:1999 (SQL-3) É a base para muitos SGBDs OR (Oracle11g, Informix

Universal Server, IBM’s DB2 Universal Database, entre outros)

Também está sendo chamada de SQL:1999 e tem sido caracterizada como “SQL Orientada a Objetos”

SQL:1999 é muito mais do que SQL-92 incrementada com a tecnologia de OO. Envolve características adicionais que podem ser classificadas em: Relacionais: novos tipos de dados, novos predicados Orientadas a Objetos:tipos de dados definidos pelo

usuário, definição de métodos, uso de referências

Page 10: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

O que tem no SQL:1999? Multi-part standard — ISO/IEC 9075-n:1999

Part 1: SQL/Framework Part 2: SQL/Foundation Part 3: SQL/CLI Part 4: SQL/PSM Part 5: SQL/Bindings

Page 11: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Part 1: SQL/Framework

Definições comuns e conceitos Estrutura do padrão multi-parte Estrutura para conformidade básica Possui cerca de 75 páginas

Page 12: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Part 2: SQL/Foundation O cerne do padrão Omite host language bindings, dynamic SQL,call interface, e questões semelhantes SQL tradicional e SQL orientando a objetos! Cerca de 1100 páginas

Page 13: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Part 3: CLI Call-Level Interface Melhor implementação: ODBC Alinhado com SQL:1999 features e ODBC3.0 features Cerca de 400 páginas

Page 14: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Part 4: SQL/PSM PSM-96 especificou:

functions & procedures SQL-server modules computational completeness

PSM-99 specifica: SQL-server modules computational completeness

Análogo a PL/SQL, Transact-SQL, etc. Cerca de 160 páginas

Page 15: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Part 5: SQL/Bindings Embedded SQL (SQL embutido) Dynamic SQL “Direct Invocation” Cerca de 250 páginas Tendência: ser incorporado na Part 2!!!!

Page 16: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Novas partes do SQL Part 7: SQL/Temporal Part 9: SQL/MED (Management of External

Data) Part 10: SQL/OLB (Object Linking Binding)

JDBC e SQLJ SQL/OLAP SQL/MM: Spatial, Text, Image

Page 17: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

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 & comportamento Encapsulamento: funções & métodos Observers & mutators Hierarquias de tipos (herança simples) User-defined CAST, ordenação Tabelas tipadas & tipos referência

Page 18: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Tipos de Dados Definidos pelo Usuário UDT – User Defined Types Evolução dos tipos em SQL:

Sempre houve os tipos embutidos (built-in) como: 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 com semântica limitada!

Houve algumas tentativas de DBMS vendors de propor soluções para certos tipos de dados específicos: texto, GIS, imagens e time series

Page 19: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

UDT Entretanto, o que se queria era uma solução

mais genérica que pudesse estender o SGBD com tipos específicos:

Solução: UDT!!!! Obs.: o termo User em UDT não quer dizer

usuário final!

Page 20: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

UDT 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 de um 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)

Page 21: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Tipos definidos pelo usuário Três tipos de UDT:

Distinct types Structured types Reference types

Page 22: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Distinct Types Baseados em tipos embutidos CREATE TYPE QI AS INT FINAL

Não pode misturar o tipo fonte e o tipo distinto e m expressões

DECLARE VARIABLE X INTEGER; DECLARE VARIABLE Y QI; ...X+Y --INVALID EXPR! ...X+CAST(Y AS INTEGER) --OK

Page 23: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Distinct Types

CREATE TYPE TAMBLUSA AS INT FINAL;CREATE TYPE NUMSAPATO AS INT FINAL;CREATE TABLE pessoas (

nome VARCHAR (30),calca NUMSAPATO,veste TAMBLUSA,

);

Page 24: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Distinct Types

Uso incorreto:SELECT nomeFROM PessoasWHERE calca > veste;

Page 25: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Distinct Types

Uso correto:SELECT nomeFROM PessoasWHERE CAST(calca TO INTEGER) >

CAST(veste TO INTEGER);

Page 26: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Distinct Types

Uso incorreto:SELECT nome, calca + 20FROM PessoasWHERE veste > 7;

Page 27: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Distinct Types

Uso correto:SELECT nome, CAST (calca TO INTEGER) + 20FROM PessoasWHERE CAST(Veste TO INTEGER) > 7;

Page 28: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Structured Types Também conhecidos como “abstract data

types” (Tipos Abstratos de Dados) Pode conter uma estrutura arbitrariamente

complexa Análogo a struct na linguagem C Stored data => state => attributes Behavior => semantics => methods &

functions & procedures

Page 29: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Atributos • “Stored data” Cada atributo pode ser:

Tipo embutido, 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 — not overloadable

Page 30: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

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

Page 31: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Procedures, Funções, Métodos Conceito genérico: rotina => procedure,

function, method — normalmente “stored” Procedure: parâmetros de input & output

invocada usando o comando “CALL” Função: apenas parâmetro de input (output

retornado como valor da função); invocado usando a notação funcional

Métodos: caso especial de funções

Page 32: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Procedures, Funções, Métodos Procedures

Pode ser overloaded: mesmo nome, com números diferentes de parâmetros

Tipos de dados dos argumentos não utilizados para overloading

Em qualquer esquema, não ligado a um tipo estruturado.

Page 33: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Procedures, Functions, Methods Functions:

Podem ser overloaded Funções múltiplas com o mesmo nome, mesmo

número de parâmetros Distintos pelos tipos de dados dos argumentos Mas…usado apenas em tempo de compilação não

em tempo de execução Em qualquer esquema, não ligado a um tipo

estruturado

Page 34: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Procedures, Functions, Methods Métodos

Podem ser overloaded Fortemente acoplado a um único tipo estruturado Deve estar no mesmo esquema da definição do tipo First argument implicit, distinguished —

Tipo do argumento é associado ao tipo estruturado Todos argumentos, exceto o primeiro usado o tipo

declarado para resolução, o primeiro argumento usa o tipo mais específico do runtime

Page 35: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Notação: ponto (.) vs funcional Notação de ponto: a.b.c Notação funcional: c(b(a)) Funções DEVEM usar a notação funcional Métodos DEVEM usar a notação de ponto

Observer: SELECT EMP.AGE FROM... Mutator: SET EMP.AGE = 10

Page 36: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Diferenças Funções e MétodosCaracterística Função MétodoLigado a um tipo específico?

Não Sim

Sintaxe de chamada Notação funcional Notação de ponto

Esquema de residência Qualquer esquema Esquema do tipo associado

Resolução de rotina Compilation time Runtime

Page 37: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Tipos de métodos Há dois tipos de métodos:

Static methods: opera no tipo de dados propriamente dito

Instance methods: opera na instância de um tipo.

Page 38: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Declaração de Métodos Há dois lugares para definição de métodos

Declaração: os métodos são declarados (suas assinaturas) na definição do tipo de dados

Implementação: a implementação dos métodos ficam 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 como Java e C++

Page 39: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Exemplo: Método

CREATE TYPE Filme AS (título varchar (100),descricao varchar (500),duracaoMinutos int) NOT FINALMETHOD duracaoEmHoras() RETURNS INTERVAL HOUR(2) TO MINUTE

Page 40: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Exemplo: Método

CREATE INSTANCE METHOD duracaoEmHoras ( ) RETURNS INTERVAL HOUR(2) TO MINUTE FOR Filme

RETURN CAST (CAST (SELF.duracao AS INTERVAL MINUTE(4)) AS INTERVAL HOUR(2) TO MINUTE)

Page 41: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Chamada a Métodos Ex.:CREATE TABLE tb_Filme (

cod int,info filme,aluguel DECIMAL(5,2))

Page 42: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Chamada a Método

Recupere a duração em horas e minutos do filme ‘Ghost’

SELECT mt.info.duracaoEmHoras( )FROM tb_Filme AS mtWHERE mt.info.titulo = ‘Ghost’

Page 43: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Encapsulamento Considere:

CREATE TYPE rational AS ( numerator INTEGER, denominator INTEGER )

Funções implícitas: CREATE FUNCTION numerator (rational)

RETURNS INTEGER CREATE FUNCTION numerator (rational,

INTEGER) RETURNS rational

Page 44: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Construtores 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));

Page 45: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Construtores Construtor default gerado pelo sistema:

CREATE FUNCTION rational() RETURNS rational Overloadable: qualquer número de

construtores definidos pelo usuário: CREATE FUNCTION rational(numer,denom)

RETURNS rational CREATE FUNCTION rational(denom)

RETURNS rational

Page 46: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Exemplo// Ponto em coordenadas polares que pode retornar coordenadas cartesianasCREATE TYPE ponto AS (

rho REAL,theta REAL, … ) NOT FINAL

METHOD x_coord ( ) RETURNS REALMETHOD y_coord ( ) RETURNS REALCREATE INSTANCE METHOD x_coord ( )

RETUNRS REAL FOR pontoRETURN cos(SELF*theta)*SELF*rho

CREATE INSTANCE METHOD y_coord( ) RETURNS REAL FOR pontoRETURN sin(SELF.theta)*SELF.rho

Page 47: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Sintaxe Tipo estruturado

CREATE TYPE name[ UNDER supertype-name ]AS ( attrib-name type,... )[ [ NOT ] INSTANTIABLE ][ NOT ] FINAL[ REF ref-options ][ method-spec,... ]

Page 48: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Sintaxe Tipo estruturado REF ref-options =>

User-defined:REF USING predefined-type

[ ref-cast-option ] Derived:REF ( attrib-name, ... ) System-generated:REF IS SYSTEM GENERATED

Page 49: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Sintaxe Tipo estruturado method-spec => Método original:

[ INSTANCE | STATIC ] METHOD name ( param-name type,... ) RETURNS type

Método sobrescrito:OVERRIDING original-method

Page 50: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Remoção de um UDT

DROP TYPE nome <CASCADE|RESCRICT>

Page 51: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Alterando um UDT

<alter type> ::= ALTER TYPE <nome> <action><action> ::= ADD ATTRIBUTE <definition> |

DROP ATTRIBUTE <nome> RESTRICT | ADD <method specification> | DROP <method specification>

Page 52: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Herança de Tipos Permite a

especialização dos tipos existentes

“Subtype” & “Supertype”

Page 53: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

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

Page 54: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Herança Obs.:

Pode-se definir UDT contendo atributos cujos tipos são supertipos do tipo definido!

Não pode definir UDT cujos atributos contenham o tipo do próprio tipo que está sendo definido (recursivo)

Não pode definir UDT contendo atributos com tipos de subtipos que ainda vão ser definidos!

Page 55: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Herança: Substitutability Na herança usa-se o conceito de “most specific

type” numa hierarquia de tipos O princípio da Substitutability diz respeito a

habilidade de prover uma instância de um subtipo em qualquer local onde uma instância de um supertipo é esperada.

Ex.: DECLARE p Pessoa; SET p = NEW Empregado (…);

OBS.: o inverso não é válido!

Page 56: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

HerançaCREATE TYPE emp UNDER person

( salary DECIMAL(6,2), dept department ) METHOD give_raise(...)..., OVERRIDING METHOD address(...)...;

Page 57: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Herança Tipo declarado:CREATE TYPE department (

dept_name CHARACTER(30),manager employee, ...)

Tipo mais específicoDECLARE VARIABLE x department;SET x.manager = executive('Oliveira',...);

Page 58: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

UDT: Valores e não instâncias! 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!)

Page 59: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

UDT: Valores e não instâncias!

Ex.: BEGIN

DECLARE v1, v2 Filme;SET v1 = NEW Filme (‘Shrek’, ‘blá blá blá’, 118);SET v2 = v1;SET v1 = v1.duracao(135);

END

Page 60: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

User Defined Constructors(Inicializadores) 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ó podem ser invocados através da keyword NEW

Tais construtores devem ter SELF como retorno.

Page 61: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

User Defined Constructors(Inicializadores) Ex.:CREATE METHOD filme (nome varchar (50), descr

varchar (500), dur int) RETURNS filmeBEGIN

SET SELF.titulo= nome;SET SELF.descricao = descr;SET SELF.duracao = dur;RETURN SELF;

END;

Page 62: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

User Defined Constructors(Inicializadores)

BEGINDECLARE f filme;SET f =

NEW filme (‘Shrek’, ‘blá blá blá’, 135);…

END;

Page 63: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

User Defined Constructors(Inicializadores)

Exemplo anterior usando o construtor definido pelo sistema

BEGINDECLARE f filme;SET f = NEW filme

SET f.titulo= ‘Shrek’; SET f.duracao = 135;

END; -- decrição contém valor null

Page 64: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Inserindo dados

INSERT INTO tb_Filmes 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

Page 65: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Inserindo dados

Mesma inserção anterior usando uma variávelINSERT INTO tb_Filmes VALUES(

‘1203’, -- código do filme f, -- instância de Filme 2.99); -- preço aluguel

Page 66: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Atualizando dados

1. Atualizando o valor do aluguel de um filme particular

UPDATE tb_FilmeSET aluguel = 1.99WHERE codigo = 1234;

Page 67: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Atualizando dados

2. Atualizando um filme sem todos os dados

UPDATE tb_FilmeSET info = NEW Filme (‘’, ‘’, 228)WHERE codigo = 1234;

Page 68: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Atualizando dados

UPDATE tb_FilmeSET info = NEW Filme (info.titulo,

info.descricao, 228)WHERE codigo = 1234;

Page 69: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Atualizando dados

Mesmo que o exemplo anterior, de forma mais simples:

UPDATE tb_FilmeSET info = info.descricao(113)WHERE codigo = 1234;

Page 70: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Atualizando dados

Mesmo que o exemplo anterior, de forma mais simples:

UPDATE tb_FilmeSET info.descricao= 113WHERE codigo = 1234;

Page 71: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Recuperando Dados

SELECT mt.info.descricaoINTO :variavel_hostFROM tb_filmesWHERE mt.codigo = 1234;

Page 72: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

User Defined CAST (1)Ex.: CREATE FUNCTION filme_to_char(meuFilme Filme)

RETURNS CHAR(610)BEGIN

DECLARE n CHAR(100), d CHAR(500), t CHAR(10), retorno CHAR(610);

SET n = meuFilme.titulo;SET d = meuFilme.descricao;SET t = CAST( meuFilme.duracao AS CHAR(10));RETURN n || d || t;

END

Page 73: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

User Defined CAST (2)

CREATE CAST (filme AS CHAR(610)) WITH filme_to_char;

SELECT CAST (filme AS CHAR(610))INTO :variavel_FilmeFROM tb_FilmesWHERE cod = 1234;

Page 74: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Comparação de UDT Há a comparação default de UDT, que compara campo a campo Pode-se também criar uma semântica de comparação para o

UDT Usa-se o comando:CREATE ORDERING FOR <nome do tipo>

EQUALS ONLY BY <categoria> | ORDER FULL by <categoria>

<categoria> ::= RELATIVE WITH <especificação de função | MAP WITH <especificação de função de mapeamento] |

STATE [<nome específico>] | RELATIVE WITH COMPARABLE INTERFACE

Page 75: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Comparação de UDT Comparação STATE

Você pode instruir o sistema para fazer comparações baseadas em valores de atributos.

Usa expressão de igualdade, retornando um Boolean. É a comparação default, campo a campo.

Ex.CREATE ORDERING FOR Filme

EQUALS ONLY BY STATE;

Page 76: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Comparação de UDT Comparação MAP

Mapear dois tipos estruturados para algum tipo embutido do SQL, e dai fazer a comparação com o resultado deste mapeamento.

Este mapeamento é feito com uma map function, que é invocada automaticamente

Ex.CREATE ORDERING FOR Filme

ORDER FULL BY MAP WITH FUNCTION filme_mapping(filme);

Page 77: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Comparação de UDT Comparação MAP (cont.)CREATE FUNCTION filmeMapping( f filme)

RETURNS INTEGERRETURN length(f.titulo)+f.duracao;

Page 78: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Comparação de UDT Comparação Relative

Comparação usando o resultado retornado por uma relative function, que retorna: -1: o primeiro tipo é menor do que o segundo 0: os dois tipos são iguais +1: o primeiro tipo tem valor maior do que o segundo

Pode-se especificar para o supertipo e os subtipos herdam

Page 79: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Comparação de UDT Comparação Relative

Ex.:CREATE ORDERING FOR Filme

ORDER FULL BY RELATIVE WITHFUNCTION filme_comp(filme, filme);

CREATE FUNCTION filme_comp (f1 filme, f2 filme)RETURNS INTEGER

IF ( … ) – condição da aplicaçãoTHEN RETURN -1

ELSEIF ( …)THEN RETURN 0

ELSE RETURN 1END IF;

Page 80: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Comparação de UDT Remover um User Defined Comparison:

DROP ORDERING FOR <nome do tipo>

Page 81: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Type predicate Usado para se saber o tipo de um

determinado variável. Ex.: determinar de o que está armazenado

na coluna pes é um empregadopes IS OF (Empregado)

pes IS OF (ONLY PESSOA) – sem subtipo

Page 82: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Segurança de UDT Em SQL:1999 não há public, protected, private A restrição de acesso é via privilégios Tais privilégios são dados com comando

GRANT e podem ter WITH GRANT OPTION Privilégios:

USAGE: permite o tipo ser usado (colunas, rotinas) UNDER: permite subtipos do tipo em questão serem

definidos EXECUTE: permite usuários executarem um dado

método

Page 83: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Segurança de UDT Exemplo:

GRANT EXECUTE ON INSTANCE METHOD ano_lancamento( ) FOR filme TO PUBLIC;

Page 84: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Tabelas tipadas Instâncias do tipo são linhas de uma tabela Comporta-se como objetos: CREATE TABLE rationals OF rational REF IS

id_col ref-option Cria uma tabela base com uma coluna poratributo, mais uma coluna “self-referencing” Esta coluna “self-referencing” contém em cada

linha um valor que identifica univocamente a linha

Page 85: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Tabelas tipadas Ex. 2:CREATE TABLE movie (

title varchar (100).desc varchar(500),runs integer)

NOT FINAL

Page 86: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Tabelas tipadas Uma tabela tipada é uma tabela ordinária! Pode-se inserir, remover, alterar e consultar as

linhas da tabela usando SQL Pode-se definir constraints e triggers Obs.: o uso de NEW visto anteriormente, não causa

uma instância ser armazenada numa tabela. Por que não?

Podem existir várias tabelas tipadas associadas a um dado UDT

Pode-se criar valores de tipos que não são persistidos em linhas de uma tabela tipada (como vimos!)

Page 87: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Tabelas Tipadas Colunas “Self-referencing”:

Espécie de OID Seu valor é único globalmente, ou seja, não haverá

duas linhas numa tabela com valor igual da coluna “self-referencing”

As aplicações podem usar os valore das colunas self-referencing como uma espécie de ponteiros para as linhas contendo os valores nas tabelas tipadas. Por isso, alguns chamam typed tables de referenced

tables

Page 88: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Hierarquias de Tabelas Pode-se definir uma tabela com sendo sub-

tabela de uma outra, chamada super-tabela Só pode criar hierarquias de tabelas tipadas Deve haver correspondência às hierarquias de

tipo Supertable deve ser “of” supertype Subtable deve ser “of” subtype

Ou seja os relacionamentos entre as subtabelas e respectivos subtipos devem ser 1 para 1.

Page 89: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Hierarquias de Tabelas Entretanto, a hierarquia completa de tabelas

não precisa ter um relacionamento com a hierarquia completa de tipos

Ex. Hierarchia de tableas Movie

Movie

VHS Tape DVD BlueRay

Dolby Digital Sound

DTS Sound

Page 90: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Hierarquias de Tabelas Hierarquia de Tabelas para Apenas DVD

DVD

Dolby Digital Sound

DTS Sound

Page 91: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Hierarquias de Tabelas Hierarquia de Tabelas sem diferenciação de

som

Movie

VHS Tape DVD BlueRay

Page 92: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Hierarquias de Tabelas Hierarquia de Tabelas Inválida!

Movie

VHS Tape BlueRay

Dolby Digital Sound

DTS Sound

Page 93: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas<table definition> :: =

CREATE TABLE <table name>OF <UDT name>[<subtable clause>][ <table element list> ]

<subtable clause> ::= UNDER <supertable clause>

<supertable clause> ::= <table name>

Page 94: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas

<table element list> ::=( <table element> [ {, <table element>} … ] )

<table element> ::= <table constraint definition> |<self-referencing column specification>

| < column options >

Page 95: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas OBS: Pode-se especificar o nome de uma tabela

de uma única super-tabela (herança simples) O nome da tabela na cláusula da sub-tabela

dever ser um nome de uma tabela tipada! Os nomes do atributos da tabela não podem ser

iguais aos herdados Não se pode definir colunas arbitrárias (for a do

UDT) dentro de uma tabela tipada, apenas as que compõem o UDT + self-referencing column

Page 96: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas Obs.:

NÃO é permitido especificar PRIMARY KEY constraint num subtabela.

Uma coluna self-referencing NÃO pode ser especificada na definição de uma sub-tabela, mas deve ser especificada na super-tabela máxima (raiz)

Page 97: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas<self-referencing column specification> ::= REF IS <column name> <reference

generation>

<reference generation> ::= SYSTEM GENERATED

| USER GENERATED| DERIVED

Page 98: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas

<column option> ::=<column name> WITH OPTIONS <column option list>

<column option list> ::=[<scope clause>][<default clause>][<column constraint definition> …]

Page 99: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas

[<scope clause>]: se a coluna é do tipo REF, então pode-se especificar o nome da tabela tipada para o UDT associado[<default clause>]: permite definir valores default para uma coluna[<column constraint definition> …]: permite definir constraints como NOT NULL, CHECK, etc.

Page 100: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas

CREATE TYPE movie AS (title varchar(100),desc varchar(500),runs integer)

INSTANTIABLENOT FINALREF IS SYSTEM GENERATED

Page 101: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas

CREATE TYPE dvd UNDER movie AS (stock_number INTEGER,rentavarchar(500),extra_features feature_desc)

INSTANTIABLENOT FINAL

Page 102: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas

CREATE TABLE short_movies OF movie( REF IS movie_id SYSTEM GENERATED, runs WITH OPTIONS CONSTRAINT short_movie_check_runs

CHECK (runs < 90) )

Page 103: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas Tipadas

CREATE TABLE short_dvds OF dvdUNDER short_movies( rental_price WITH OPTIONS CONSTRAINT short_dvds_check_price

CHECK (price < 1.99) )

Page 104: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Definindo Tabelas TipadasHá um relacionamento 1 para 1 entre a

especificação do reference type (no UDT) e o type generation (na tabela tipada)

Obs.: quando se escolhe user-generated para um UDT, é responsabilidade da aplicação escolher o valor armazenado na coluna self-referencing de cada linha inserida na tabela tipada.

<reference type specification> <reference generation>

REF USING <tipo predefinido (built in)> USER GENERATED

REF FROM <lista de atributos> DERIVED

REF IS SYSTEM GENERATED SYSTEM GENERATED

Page 105: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Reference types Permite uma variável referenciar uma outra Apenas instâncias de tipos estruturados podem ser

referenciados Referencia um valor de uma row/instance

explicitamente representado numa linha Sintaxe:

<reference type> ::=REF ( <UDT> ) [<scope clause>]

<scope clause> ::= SCOPE <table name>

Page 106: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Reference types O SCOPE pode ter um check (espécie de

integridade referencial)<reference scope check ::=

REFERENCES ARE [NOT] CHECKED[ON DELETE <referential action>]

<referential action> ::=RESTRICT | SET NULL | SET DEFAULT | NO ACTION

Default: NO ACTION

Page 107: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Consultas em Tabelas Tipadas Recupere os DVD’s “Rose”:SELECT title, runsFROM short_dvdsWHERE title LIKE ‘%Rose%’

Page 108: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Consultas em Tabelas Tipadas Recupere filmes de curtíssima duração:SELECT title, runsFROM short_moviesWHERE runs < 60

Page 109: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Consultas em Tabelas Tipadas Recupere filmes de curtíssima duração não

em DVD:SELECT title, runsFROM ONLY (short_movies)WHERE runs < 60

Page 110: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Consultas em Tabelas Tipadas Usando REFsCREATE TYPE movie AS (

title varchar(100),desc varchar(500),runs integer)INSTANTIABLE

NOT FINALREF IS SYSTEM GENERATEDINSTANCE METHOD rating () RETURNS DECIMAL(2,1)

Page 111: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Consultas em Tabelas Tipadas Usando REFs

CREATE TYPE player AS (player_name name,role_played name,film REF (movie) )INSTANTIABLE

NOT FINALREF IS SYSTEM GENERATED

Page 112: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Consultas em Tabelas Tipadas Usando REFs

CREATE TABLE movies OF movie(REF IS movie_id SYSTEM GENERATED)

CREATE TABLE actors OF player(REF IS actor_id SYSTEM GENERATED,film WITH OPTIONS SCOPE movies)

Page 113: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Consultas em Tabelas Tipadas Usando REFs

SELECT film -> runsFROM actorsWHERE player_name = ‘Peter Sellers’ AND role_played = ‘Merkin Muffley’

Page 114: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Consultas em Tabelas Tipadas Usando REFs

SELECT film -> ratings ( )FROM actorsWHERE player_name = ‘Peter Sellers’ AND role_played = ‘Merkin Muffley’

Page 115: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Consultas em Tabelas Tipadas Usando REFs

SELECT DEREF (film)FROM actorsWHERE player_name = ‘Peter Sellers’ AND role_played = ‘Merkin Muffley’

Page 116: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Inserção em Tabelas Tipadas Criando uma nova instância de dvd na tabela

short_dvdsINSERT into short_dvds (title, desc, runs,

stock_number, rental_price)VALUES (‘The Next Game’, ‘blá blá blá’, 48,61992, 0.49)

Page 117: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Remoção em Tabelas Tipadas Removendo de todas as tabelas na

hierarquia

DELETE from short_moviesWHERE title LIKE ‘%dead%’

Page 118: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Remoção em Tabelas Tipadas Removendo apenas de uma tabela

específica e suas supertables

DELETE from ONLY short_moviesWHERE title = ‘The Lunch Lady’

Page 119: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Atualização em Tabelas Tipadas Atualizando uma linha numa hierarquia

UPDATE short_moviesSET title = ‘The Lunch Lady’WHERE title = ‘The Cafeteria Lady’

Page 120: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Atualização em Tabelas Tipadas Atualizando apenas numa tabela específica e

suas supertables

UPDATE ONLY (short_movies)SET title = ‘The Lunch Lady’WHERE title = ‘The Cafeteria Lady’

Page 121: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Typed Views Também conhecidas como Referenceable Views ou

Object Views Os dados visíveis na view correspondem a linhas

nas tabelas tipadas. Pode-se ter herança simples de views: superview &

subview

Page 122: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Typed Views<view definition> ::=

CREATE VIEW <table name>OF < UDT name>[<subview clause> ][<view element list> ]AS <query expression>[WITH [ <levels clause> CHECK OPTION]

<subview clause>::= UNDER <table name>

<view element list> ::= ( <view element> [{,<view element>} …]

<view element> ::= <self-referencing column specification>| <view column option>

<view column option> ::= <column name> WITH OPTIONS <scope clause>

Page 123: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Typed Views Obs.:

WITH CHECK OPTION Usada para Views que podem ser atualizadas: update, delete e insert.

Exemplo:CREATE VIEW cheap_movies AS

SELECT title, price FROM movies WHERE price < 1

WITH CHECK OPTION;

Assim, o seguinte Update seria rejeitado:UPDATE cheap_moviesSET price = 15WHERE title = ‘The Wedding Singer’;

Page 124: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Typed Views Exemplo:CREATE VIEW short_movies_with_long_titles

OF movie (REF IS movie_id DERIVED)AS SELECT title, desc, runs

FROM ONLY (short_movies)WHERE char_length (title) > 75

CREATE VIEW short_DVDs_with_long_titlesOF dvdUNDER short_movies_with_long_titlesAS SELECT title, desc, runs, stock_number, rental_price FROM ONLY (short_dvds)

WHERE char_length(title) > 75

Page 125: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Tabelas Tipadas e Privilégios Privilégio USAGE: é requerido para se poder usar

um tipo numa aplicação ou BD. Se está invocando um método num valor de TAD

que é armazenado numa coluna de um tipo de uma tabela ordinária (não tipada), é necessário ter o privilégio SELECT

Se o método é um mutator, deve também ter o privilégio UPDATE

Também é necessário ter o privilégio EXECUTE em todos os métodos invocados

Privilégio UNDER: para permitir especificar sub-tabelas, sub-tipos ou sub-views.

Page 126: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Rotinas SQL Falamos em aula anterior que existem três tipos

de rotinas em SQL: Procedures: chamadas através de CALL e com

parâmetroe IN, OUT e INOUT; ligadas a um esquema Funções: chamadas diretamente através de notação

funcional f(a), com parâmetros de IN e retorno, e ligadas a um esquema

Métodos: chamados diretamente através de notação de ponto f.a, com parâmetros de entrada e retorno, ligados a um UDT

Page 127: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Rotinas SQL Uma rotina SQL é uma rotina que é invocada

através de um comando SQL. Pode ser escrita em SQL ou em outra linguagem,

neste caso chamado de external routine O padrão SQL:1999 provê especificação para 9

LP: Java, C, Ada, Cobol, Fortran, M (antiga Mumps), Pascal e PL/I.

Uma rotina externa é armazenada num arquivo fora do SGBD.

Page 128: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Rotinas SQL Razões para considerar o uso de rotinas externas:

Pode-se já ter um número de rotinas escritas em alguma LP. Por exemplo, um pacote estatístico

Poucos SGBD implementam SQL/PSM, usando, ao invés, uma linguagem proprietária, por exemplo, Oracle PL-SQL, MS Transact-SQL que não são interoperáveis

Também pode-se requerer uma certa funcionalidade que é computacionalmente intensiva,. Por exemplo, análise de séries temporais diárias, semanais, mensais, e semestrais com relatórios de vendas de DVDs.

Rotinas externas são geralmente capazes de acessar serviços providos de baixo nível do SO, como sistemas de arquivo, gerência de memória, etc.

Page 129: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Rotinas SQL Desvantagens de Rotinas Externas:

Impedance mismatch (menor em Java) A criação de novas sessões para execução de

rotinas externas pode ser custoso, impactando no desempenho (context switching overhead)

Treinamento em dois ambientes: SQL e outra LP

Page 130: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Invocação de Rotinas Envolve um número de passos:

Análise sintática Execução runtime

Overloading Overrriding

Page 131: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Rotinas SQL Potencial das Rotinas SQL:

Triggers podem invocar procedimentos que: Enviam email Imprimem documentos Ativa um equipamento robótico para recuperar um

determinado dado

Page 132: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Invocação de Procedures São chamadas através do comando SQL:

CALL Parâmetros são passados e retornados Podem ser overloaded, mas não overriden Estranhamente não é permitido, por

exemplo: transmit (integer) e transmit (real),

Page 133: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Invocação de Procedures Algoritmo:

Todas as rotinas do nome invocado são identificadas. Todas as rotinas contidas em esquemas que não são parte do corrente SQL-path são eliminadas

Todas as rotinas restantes que são funções ou métodos são eliminados

Os procedures restantes para os quais o invocador não possui o privilégio EXECUTE são eliminados

Todos procedimentos cujos número de parâmetros não é igual ao número de argumentos na chamada CALL são eliminados

Se existem duas ou mais procedures restantes, então o algoritmo seleciona aquela que está contida no esquema que apareçe mais cedo no SQL-path.

Page 134: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Ex. de Criação e invocação de procedureCREATE PROCEDURE sendmail (

IN to varchar(32), IN subj varchar(100),IN prio smallint,OUT status integer)

LANGUAGE CPARAMETER STYLE GENERALSPECIFIC sendmail_cDETERMINISTICNO SQLDYNAMIC RESULT SET 0EXTERNAL NAME ‘usr/musicshop/bin/mailPackage/send1’

EXTERNAL SECURITY DEFINER

Page 135: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Ex. De Criação e invocação de procedure

CREATE PROCEDURE sendmail (IN to varchar(32), IN subj varchar(100),OUT status integer)

LANGUAGE CEXTERNAL NAME

‘usr/musicshop/bin/mailPackage/send2’EXTERNAL SECURITY DEFINER

Page 136: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Ex. De Criação e invocação de procedure

CALL sendmail (‘[email protected]’, ‘Exciting sale for web customers only!’, 1, :mailStatus);

CALL sendmail (‘[email protected]’, ‘Exciting sale for web customers only!’, :mailStatus);

Page 137: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Invocação de Função São um pouco mais complexas do que

invocações de procedures Quando existem várias funções com o

mesmo nome, SQL usa vários critérios para escolher a função que irá escolher para ser executada.

Page 138: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Invocação de Função Algoritmo

Todas as rotinas com o nome são identificadas. As que estiverem em esquemas que não são parte do corrente SQL-path são eliminadas

Todas as rotinas remanescentes que são procedures ou métodos são eliminados

As funções restantes, cujo número de parâmetros não é igual ao número de argumentos na função invocada são eliminadas

Para cada função restante, o tipo de dados de cada parâmetro é checado contra o tipo do respectivo argumento; caso não casem a função é eliminada

Se existem duas ou mais funções restantes para executar, então o algoritmo seleciona aquela que aparece mais cedo no SQL-path

Page 139: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Ex. de Função

CREATE FUNCTION ratio ( IN title_param VARCHAR(100),IN length_param INTEGER)RETURNS REALLANGUAGE SQL;

Page 140: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Exemplo de invocação de função

SELECT mt.info.titulo, mt.info.length, ratio (mt.info.titulo, mt.info.length)FROM TB_Filme as mtWHERE mt.info.titulo = ‘TITANIC’

OBS.: notem o uso da notação funcional na chamada da função ratio( ) e da notação de ponto no observer titulo( )

Page 141: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Invocação de Método de Instância Chamada a métodos difere de chamada à

funções: Métodos podem ser overloadable e overriden O SQL-path não é usado para resolução de

método

Page 142: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Invocação de Método de Instância ExemploSELECT mt.info.duraçãoHoras( )FROM TB_Filme mtWHERE mt.info.titulo = ‘The Matrix’

Page 143: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Exemplo de overridingCREATE TYPE dvd UNDER movie AS (

stock_number integer,rental_price decimal(5,2),extra_features feature)

INSTANTIABLENOT FINAL;CREATE TYPE dolby_dvd UNDER dvd AS (

alt_language BOOLEAN)INSTANTIABLENOT FINAL;OVERRIDING METHOD length_interval ( )

RETURNS INTERVAL HOUR(2) TO MINUTE;CREATE INSTANCE METHOD length_interval( )

RETURNS INTERVAL HOUR(2) TO MINUTE FOR dolby_dvdRETURN CAST (CAST (SELF.runs AS INTERVAL MINUTE(4) ) +

INTERVAL ‘10’ MINUTE(4)AS INTERVAL HOUR(2) TO MINUTE);

Page 144: Modelo de Dados Objeto-Relacional Banco de Dados II – 2009.2 Bacharelado em Ciência da Computação UFCG Prof. Cláudio de Souza Baptista, Ph.D.

Exemplo de overridingDECLARE dvd1, dvd2 dvd;DECLARE len1, len2, len3, len4 INTERVAL HOUR TO MINUTE;DECLARE lang1, lang3 BOOLEAN;SET dvd1 = NEW dvd (‘Seven’, ‘… a serial killer …’, 123, 299, 1.89, ‘bla’);SET dvd2 = NEW dolby_dvd (‘Seven’, ‘… a serial killer …’, 123, 299, 1.89, ‘bla’, TRUE);SET len1= dvd1.lenght_interval; -- invoca método de dvdSET len2 = dvd2.lenght_interval; -- invoca método overriden de dolby_dvdSET len3 = (dvd1 AS dvd).lenght_interval; -- igual a len1SET len4 = (dvd2 as dvd).lenght_interval; -- invoca método de dvdSET lang1 = dvd1.alt_language; -- erroSET lang2 = (dvd1 AS dolby_dvd).alt_language; -- erro dvd1 ÍS NOT dolby_dvd