Sei sulla pagina 1di 144

Modelo de Dados Objeto-Relacional

Banco de Dados II 2009.2 Bacharelado em Cincia da Computao UFCG Prof. Cludio de Souza Baptista, Ph.D.

Contedo

Bancos de Dados Objeto-Relacional


Modelo de Dados Objeto-Relacional Linguagem de Consultas Objeto Relacional

Viso geral dos conceitos de orientao a objetos disponveis no ORACLE 11g Extenses para criar Objetos Complexos O impacto da orientao a objetos em consultas SQL Integrao OO-Relacional atravs de Vises de Objeto

Banco de Dados Objeto-Relacional

SGBDs Objeto-Relacional combinam os benefcios do modelo Relacional com a capacidade de modelagem do modelo OO
Fornecem suporte para consultas complexas sobre dados complexos

Atendem aos requisitos das novas aplicaes e da nova gerao de aplicaes de negcios

Banco de Dados Objeto-Relacional Modelos e Linguagens

O modelo de dados OR uma extenso do modelo Relacional

As extenses incluem mecanismos para permitir aos usurios estender o banco de dados com tipos e funes especficas da aplicao

A linguagem de consulta OR uma extenso da linguagem SQL para suportar o modelo de objetos

As extenses incluem consultas envolvendo objetos, atributos multivalorados, TADs, mtodos e funes como predicados de busca em uma consulta

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 so tipos de dados definidos pelo usurio que encapsulam comportamento e estrutura interna (atributos) A tabela convencional estendida para permitir a referncia de objetos (referncia de tipos), TADs e valores alfanumricos como domnio de colunas

Modelo de Dados Objeto-Relacional

Utiliza referncias para representar conexes inter-objetos tornando as consultas baseadas em caminhos de referncia mais compactas do que as consultas feitas com juno
Herana implementada organizando todos os tipos em hierarquias Utiliza os construtores set, list, multiset ou array para organizar colees de objetos

Benefcios do Modelo de Dados Objeto-Relacional

Nova Funcionalidade

Aumenta indefinidamente o conjunto de tipos e funes fornecidas pelo SGBD

Desenvolvimento de aplicaes simplificado

Reuso de cdigo Permite a definio de padres, cdigo reusvel por todas as aplicaes

Consistncia

Linguagem de Consultas para Bancos 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 extenso da linguagem SQL, utilizada para definio e manipulao de dados e consultas

SQL:1999 (SQL-3)

a base para muitos SGBDs OR (Oracle11g, Informix Universal Server, IBMs DB2 Universal Database, entre outros)
Tambm 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 caractersticas adicionais que podem ser classificadas em: Relacionais: novos tipos de dados, novos predicados Orientadas a Objetos:tipos de dados definidos pelo usurio, definio de mtodos, uso de referncias

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

Part 1: SQL/Framework

Definies comuns e conceitos Estrutura do padro multi-parte Estrutura para conformidade bsica Possui cerca de 75 pginas

Part 2: SQL/Foundation
O cerne do padro Omite host language bindings, dynamic SQL, call interface, e questes semelhantes SQL tradicional e SQL orientando a objetos! Cerca de 1100 pginas

Part 3: CLI
Call-Level Interface Melhor implementao: ODBC Alinhado com SQL:1999 features e ODBC 3.0 features Cerca de 400 pginas

Part 4: SQL/PSM

PSM-96 especificou:

functions & procedures SQL-server modules computational completeness

PSM-99 specifica:

SQL-server modules computational completeness

Anlogo a PL/SQL, Transact-SQL, etc. Cerca de 160 pginas

Part 5: SQL/Bindings

Embedded SQL (SQL embutido) Dynamic SQL Direct Invocation Cerca de 250 pginas Tendncia: ser incorporado na Part 2!!!!

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

Part 2: SQL/Foundation

Estamos interessados neste curso na parte do padro que trata de Orientao a Objetos:

Tipos de dados definidos pelo usurio Atributos & comportamento Encapsulamento: funes & mtodos Observers & mutators Hierarquias de tipos (herana simples) User-defined CAST, ordenao Tabelas tipadas & tipos referncia

Tipos de Dados Definidos pelo Usurio


UDT User Defined Types Evoluo dos tipos em SQL:

Sempre houve os tipos embutidos (built-in) como: INTEGER, SMALLINT, CHAR, VARCHAR, DATE, TIME e TIMESTAMP Alguns tipos proprietrios: Oracle NUMBER e RAW; Sybase SMALLMONEY e IMAGE Aps alguns anos, surgiram BLOB e CLOB com semntica limitada! Houve algumas tentativas de DBMS vendors de propor solues para certos tipos de dados especficos: texto, GIS, imagens e time series

UDT

Entretanto, o que se queria era uma soluo mais genrica que pudesse estender o SGBD com tipos especficos: Soluo: UDT!!!! Obs.: o termo User em UDT no quer dizer usurio final!

UDT
Definio: Um UDT um tipo que no embutido em um SGBD ou linguagem de programao, mas que pode ser definido como parte de um desenvolvimento de uma ou mais aplicaes, com possvel comportamento definido em sua criao. (adaptada de Jim Melton: Advanced SQL:1999, Morgan Kauffman, 2003)

Tipos definidos pelo usurio

Trs tipos de UDT:


Distinct types Structured types Reference types

Distinct Types

Baseados em tipos embutidos CREATE TYPE QI AS INT FINAL

No pode misturar o tipo fonte e o tipo distinto e m expresses DECLARE VARIABLE X INTEGER; DECLARE VARIABLE Y QI; ...X+Y --INVALID EXPR! ...X+CAST(Y AS INTEGER) --OK

Distinct Types
CREATE TYPE TAMBLUSA AS INT FINAL; CREATE TYPE NUMSAPATO AS INT FINAL; CREATE TABLE pessoas ( nome VARCHAR (30), calca NUMSAPATO, veste TAMBLUSA, );

Distinct Types
Uso incorreto: SELECT nome FROM Pessoas WHERE calca > veste;

Distinct Types
Uso correto: SELECT nome FROM Pessoas WHERE CAST(calca TO INTEGER) > CAST(veste TO INTEGER);

Distinct Types
Uso incorreto: SELECT nome, calca + 20 FROM Pessoas WHERE veste > 7;

Distinct Types
Uso correto: SELECT nome, CAST (calca TO INTEGER) + 20 FROM Pessoas WHERE CAST(Veste TO INTEGER) > 7;

Structured Types

Tambm conhecidos como abstract data types (Tipos Abstratos de Dados) Pode conter uma estrutura arbitrariamente complexa Anlogo a struct na linguagem C Stored data => state => attributes Behavior => semantics => methods & functions & procedures

Atributos

Stored data Cada atributo pode ser:


Tipo embutido, incluindo coleo Tipo definido pelo usurio

O sistema gera uma funo get (observer) e uma funo set (mutator) para cada atributo not overloadable

Encapsulamento

Esconde implementao dos usurios Permite que a implementao mude sem afetar as aplicaes desde que a interface provida permanea constante Aplicaes acessam tudo atravs da interface funcional, incluindo os atributos usando as funes observer e mutator

Procedures, Funes, Mtodos

Conceito genrico: rotina => procedure, function, method normalmente stored Procedure: parmetros de input & output invocada usando o comando CALL Funo: apenas parmetro de input (output retornado como valor da funo); invocado usando a notao funcional Mtodos: caso especial de funes

Procedures, Funes, Mtodos

Procedures

Pode ser overloaded: mesmo nome, com nmeros diferentes de parmetros

Tipos de dados dos argumentos no utilizados para overloading Em qualquer esquema, no ligado a um tipo estruturado.

Procedures, Functions, Methods

Functions:

Podem ser overloaded

Funes mltiplas com o mesmo nome, mesmo nmero de parmetros Distintos pelos tipos de dados dos argumentos Masusado apenas em tempo de compilao no em tempo de execuo Em qualquer esquema, no ligado a um tipo estruturado

Procedures, Functions, Methods

Mtodos

Podem ser overloaded Fortemente acoplado a um nico tipo estruturado Deve estar no mesmo esquema da definio do tipo First argument implicit, distinguished

Tipo do argumento associado ao tipo estruturado Todos argumentos, exceto o primeiro usado o tipo declarado para resoluo, o primeiro argumento usa o tipo mais especfico do runtime

Notao: ponto (.) vs funcional


Notao de ponto: a.b.c Notao funcional: c(b(a)) Funes DEVEM usar a notao funcional Mtodos DEVEM usar a notao de ponto

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

Diferenas Funes e Mtodos


Caracterstica Ligado a um tipo especfico? Sintaxe de chamada Esquema de residncia Resoluo de rotina Funo No Notao funcional Qualquer esquema Compilation time Mtodo Sim Notao de ponto Esquema do tipo associado Runtime

Tipos de mtodos

H dois tipos de mtodos:

Static methods: opera no tipo de dados propriamente dito Instance methods: opera na instncia de um tipo.

Declarao de Mtodos

H dois lugares para definio de mtodos

Declarao: os mtodos so declarados (suas assinaturas) na definio do tipo de dados Implementao: a implementao dos mtodos ficam em outro lugar, utilizando-se de um comando SQL especfico para tal fim. O cdigo pode ser escrito em SQL ou em outra linguagem de programao como Java e C++

Exemplo: Mtodo
CREATE TYPE Filme AS ( ttulo varchar (100), descricao varchar (500), duracaoMinutos int) NOT FINAL METHOD duracaoEmHoras() RETURNS INTERVAL HOUR(2) TO MINUTE

Exemplo: Mtodo
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)

Chamada a Mtodos
Ex.: CREATE TABLE tb_Filme ( cod int, info filme, aluguel DECIMAL(5,2))

Chamada a Mtodo
Recupere a durao em horas e minutos do filme Ghost SELECT mt.info.duracaoEmHoras( ) FROM tb_Filme AS mt WHERE mt.info.titulo = Ghost

Encapsulamento

Considere:

CREATE TYPE rational AS ( numerator INTEGER, denominator INTEGER )

Funes implcitas:

CREATE FUNCTION numerator (rational) RETURNS INTEGER CREATE FUNCTION numerator (rational, INTEGER) RETURNS rational

Construtores

Nenhum new object criado, ao invs usase da seguinte forma:


DECLARE VARIABLE ratvar rational; SET ratvar = rational(5,7); INSERT INTO table1 (ratcol) VALUES (rational(13,131));

Construtores

Construtor default gerado pelo sistema:


CREATE FUNCTION rational() RETURNS rational

Overloadable: qualquer nmero de construtores definidos pelo usurio:

CREATE FUNCTION rational(numer,denom) RETURNS rational CREATE FUNCTION rational(denom) RETURNS rational

Exemplo
// Ponto em coordenadas polares que pode retornar coordenadas cartesianas CREATE TYPE ponto AS ( rho REAL, theta REAL, ) NOT FINAL METHOD x_coord ( ) RETURNS REAL METHOD y_coord ( ) RETURNS REAL CREATE INSTANCE METHOD x_coord ( ) RETUNRS REAL FOR ponto RETURN cos(SELF*theta)*SELF*rho CREATE INSTANCE METHOD y_coord( ) RETURNS REAL FOR ponto RETURN sin(SELF.theta)*SELF.rho

Sintaxe Tipo estruturado


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

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

Sintaxe Tipo estruturado


method-spec => Mtodo original:


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

Mtodo sobrescrito:
OVERRIDING original-method

Remoo de um UDT
DROP TYPE nome <CASCADE|RESCRICT>

Alterando um UDT
<alter type> ::= ALTER TYPE <nome> <action> <action> ::= ADD ATTRIBUTE <definition> | DROP ATTRIBUTE <nome> RESTRICT | ADD <method specification> | DROP <method specification>

Herana de Tipos

Permite a especializao dos tipos existentes Subtype & Supertype

Herana

Subtype herda tudo do supertype SQL:1999 d suporte apenas a herana simples Na definio de subtype:

Novos atributos podem ser adicionados Novos mtodos podem ser adicionados Mtodos podem ser sobrescritos

Herana

Obs.:

Pode-se definir UDT contendo atributos cujos tipos so supertipos do tipo definido! No pode definir UDT cujos atributos contenham o tipo do prprio tipo que est sendo definido (recursivo) No pode definir UDT contendo atributos com tipos de subtipos que ainda vo ser definidos!

Herana: Substitutability

Na herana usa-se o conceito de most specific type numa hierarquia de tipos O princpio da Substitutability diz respeito a habilidade de prover uma instncia de um subtipo em qualquer local onde uma instncia de um supertipo esperada. Ex.: DECLARE p Pessoa; SET p = NEW Empregado (); OBS.: o inverso no vlido!

Herana
CREATE TYPE emp UNDER person ( salary DECIMAL(6,2), dept department ) METHOD give_raise(...)..., OVERRIDING METHOD address(...)...;

Herana
Tipo declarado: CREATE TYPE department ( dept_name CHARACTER(30), manager employee, ...) Tipo mais especfico

DECLARE VARIABLE x department;

SET x.manager = executive('Oliveira',...);

UDT: Valores e no instncias!

Os tipos estruturados possuem valores e no instncias!!!!! Razo: no h OID, que s ocorrer no repositrio que so as tabelas tipadas (vistas mais frente!)

UDT: Valores e no instncias!


Ex.: BEGIN DECLARE v1, v2 Filme; SET v1 = NEW Filme (Shrek, bl bl bl, 118); SET v2 = v1; SET v1 = v1.duracao(135); END

User Defined Constructors(Inicializadores)

SQL:1999 d suporte a mtodos construtores (inicializadores) definidos pelo usurio Podem existir vrios destes construtores, com mesmo nome do construtor provido pelo sistema, com lista de parmetros diferente para cada construtor. S podem ser invocados atravs da keyword NEW Tais construtores devem ter SELF como retorno.

User Defined Constructors(Inicializadores)


Ex.: 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)


BEGIN DECLARE f filme; SET f = NEW filme (Shrek, bl bl bl, 135); END;

User Defined Constructors(Inicializadores)


Exemplo anterior usando o construtor definido pelo sistema BEGIN DECLARE f filme; SET f = NEW filme SET f.titulo= Shrek; SET f.duracao = 135; END; -- decrio contm valor null

Inserindo dados
INSERT INTO tb_Filmes VALUES( 1203, -- cdigo do filme NEW Filme (Gone with the Wind, bl bl bl,128), -- instncia de Filme 2.99); -- preo aluguel

Inserindo dados
Mesma insero anterior usando uma varivel INSERT INTO tb_Filmes VALUES( 1203, -- cdigo do filme f, -- instncia de Filme 2.99); -- preo aluguel

Atualizando dados
1. Atualizando o valor do aluguel de um filme particular UPDATE tb_Filme SET aluguel = 1.99 WHERE codigo = 1234;

Atualizando dados
2. Atualizando um filme sem todos os dados UPDATE tb_Filme SET info = NEW Filme (, , 228) WHERE codigo = 1234;

Atualizando dados
UPDATE tb_Filme SET info = NEW Filme (info.titulo, info.descricao, 228) WHERE codigo = 1234;

Atualizando dados
Mesmo que o exemplo anterior, de forma mais simples: UPDATE tb_Filme SET info = info.descricao(113) WHERE codigo = 1234;

Atualizando dados
Mesmo que o exemplo anterior, de forma mais simples: UPDATE tb_Filme SET info.descricao= 113 WHERE codigo = 1234;

Recuperando Dados
SELECT mt.info.descricao INTO :variavel_host FROM tb_filmes WHERE mt.codigo = 1234;

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

User Defined CAST (2)


CREATE CAST (filme AS CHAR(610)) WITH filme_to_char; SELECT CAST (filme AS CHAR(610)) INTO :variavel_Filme FROM tb_Filmes WHERE cod = 1234;

Comparao de UDT
H a comparao default de UDT, que compara campo a campo Pode-se tambm criar uma semntica de comparao para o UDT Usa-se o comando: CREATE ORDERING FOR <nome do tipo> EQUALS ONLY BY <categoria> | ORDER FULL by <categoria>

<categoria> ::= RELATIVE WITH <especificao de funo | MAP WITH <especificao de funo de mapeamento] | STATE [<nome especfico>] | RELATIVE WITH COMPARABLE INTERFACE

Comparao de UDT

Comparao STATE

Voc pode instruir o sistema para fazer comparaes baseadas em valores de atributos. Usa expresso de igualdade, retornando um Boolean. a comparao default, campo a campo.

Ex. CREATE ORDERING FOR Filme EQUALS ONLY BY STATE;

Comparao de UDT

Comparao MAP

Mapear dois tipos estruturados para algum tipo embutido do SQL, e dai fazer a comparao 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);

Comparao de UDT
Comparao MAP (cont.) CREATE FUNCTION filmeMapping( f filme) RETURNS INTEGER RETURN length(f.titulo)+f.duracao;

Comparao de UDT

Comparao Relative

Comparao usando o resultado retornado por uma relative function, que retorna:

-1: o primeiro tipo menor do que o segundo 0: os dois tipos so iguais +1: o primeiro tipo tem valor maior do que o segundo

Pode-se especificar para o supertipo e os subtipos herdam

Comparao de UDT

Comparao Relative
Ex.: CREATE ORDERING FOR Filme ORDER FULL BY RELATIVE WITH FUNCTION filme_comp(filme, filme);

CREATE FUNCTION filme_comp (f1 filme, f2 filme) RETURNS INTEGER IF ( ) condio da aplicao THEN RETURN -1 ELSEIF ( ) THEN RETURN 0 ELSE RETURN 1 END IF;

Comparao de UDT

Remover um User Defined Comparison:

DROP ORDERING FOR <nome do tipo>

Type predicate
Usado para se saber o tipo de um determinado varivel. Ex.: determinar de o que est armazenado na coluna pes um empregado pes IS OF (Empregado)

pes IS OF (ONLY PESSOA) sem subtipo

Segurana de UDT

Em SQL:1999 no h public, protected, private A restrio de acesso via privilgios Tais privilgios so dados com comando GRANT e podem ter WITH GRANT OPTION Privilgios:

USAGE: permite o tipo ser usado (colunas, rotinas) UNDER: permite subtipos do tipo em questo serem definidos EXECUTE: permite usurios executarem um dado mtodo

Segurana de UDT

Exemplo:

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

Tabelas tipadas
Instncias do tipo so 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 por atributo, mais uma coluna self-referencing Esta coluna self-referencing contm em cada linha um valor que identifica univocamente a linha

Tabelas tipadas
Ex. 2: CREATE TABLE movie ( title varchar (100). desc varchar(500), runs integer) NOT FINAL

Tabelas tipadas

Uma tabela tipada uma tabela ordinria! 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, no causa uma instncia ser armazenada numa tabela. Por que no?

Podem existir vrias tabelas tipadas associadas a um dado UDT Pode-se criar valores de tipos que no so persistidos em linhas de uma tabela tipada (como vimos!)

Tabelas Tipadas

Colunas Self-referencing:

Espcie de OID Seu valor nico globalmente, ou seja, no haver duas linhas numa tabela com valor igual da coluna self-referencing As aplicaes podem usar os valore das colunas self-referencing como uma espcie de ponteiros para as linhas contendo os valores nas tabelas tipadas.

Por isso, alguns chamam typed tables de referenced tables

Hierarquias de Tabelas

Pode-se definir uma tabela com sendo subtabela de uma outra, chamada super-tabela S pode criar hierarquias de tabelas tipadas Deve haver correspondncia 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.

Hierarquias de Tabelas
Entretanto, a hierarquia completa de tabelas no precisa ter um relacionamento com a hierarquia completa de tipos Movie Ex. Hierarchia de tableas Movie

VHS Tape DVD BlueRay

Dolby Digital

DTS Sound

Sound

Hierarquias de Tabelas

Hierarquia de Tabelas para Apenas DVD


DVD

Dolby Digital

DTS Sound

Sound

Hierarquias de Tabelas

Hierarquia de Tabelas sem diferenciao de som


Movie

VHS Tape

DVD

BlueRay

Hierarquias de Tabelas

Hierarquia de Tabelas Invlida!


Movie

VHS Tape

BlueRay

Dolby Digital

DTS Sound

Sound

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>

Definindo Tabelas Tipadas


<table element list> ::= ( <table element> [ {, <table element>} ] ) <table element> ::= <table constraint definition> | <self-referencing column specification> | < column options >

Definindo Tabelas Tipadas

OBS: Pode-se especificar o nome de uma tabela de uma nica super-tabela (herana simples) O nome da tabela na clusula da sub-tabela dever ser um nome de uma tabela tipada! Os nomes do atributos da tabela no podem ser iguais aos herdados No se pode definir colunas arbitrrias (for a do UDT) dentro de uma tabela tipada, apenas as que compem o UDT + self-referencing column

Definindo Tabelas Tipadas

Obs.:

NO permitido especificar PRIMARY KEY constraint num subtabela. Uma coluna self-referencing NO pode ser especificada na definio de uma sub-tabela, mas deve ser especificada na super-tabela mxima (raiz)

Definindo Tabelas Tipadas


<self-referencing column specification> ::= REF IS <column name> <reference generation> <reference generation> ::= SYSTEM GENERATED | USER GENERATED | DERIVED

Definindo Tabelas Tipadas


<column option> ::= <column name> WITH OPTIONS <column option list> <column option list> ::= [<scope clause>] [<default clause>] [<column constraint definition> ]

Definindo Tabelas Tipadas


[<scope clause>]: se a coluna do tipo REF, ento 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.

Definindo Tabelas Tipadas


CREATE TYPE movie AS ( title varchar(100), desc varchar(500), runs integer) INSTANTIABLE NOT FINAL REF IS SYSTEM GENERATED

Definindo Tabelas Tipadas


CREATE TYPE dvd UNDER movie AS ( stock_number INTEGER, renta varchar(500), extra_features feature_desc) INSTANTIABLE NOT FINAL

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

Definindo Tabelas Tipadas


CREATE TABLE short_dvds OF dvd UNDER short_movies ( rental_price WITH OPTIONS CONSTRAINT short_dvds_check_price CHECK (price < 1.99) )

Definindo Tabelas Tipadas


H um relacionamento 1 para 1 entre a especificao do reference type (no UDT) e o type generation (na tabela tipada)
<reference type specification> <reference generation>

REF USING <tipo predefinido (built in)>


REF FROM <lista de atributos> REF IS SYSTEM GENERATED

USER GENERATED
DERIVED SYSTEM GENERATED

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

Reference types

Permite uma varivel referenciar uma outra Apenas instncias 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>

Reference types
O SCOPE pode ter um check (espcie 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

Consultas em Tabelas Tipadas


Recupere os DVDs Rose: SELECT title, runs FROM short_dvds WHERE title LIKE %Rose%

Consultas em Tabelas Tipadas


Recupere filmes de curtssima durao: SELECT title, runs FROM short_movies WHERE runs < 60

Consultas em Tabelas Tipadas


Recupere filmes de curtssima durao no em DVD: SELECT title, runs FROM ONLY (short_movies) WHERE runs < 60

Consultas em Tabelas Tipadas Usando REFs


CREATE TYPE movie AS ( title varchar(100), desc varchar(500), runs integer) INSTANTIABLE NOT FINAL REF IS SYSTEM GENERATED INSTANCE METHOD rating () RETURNS DECIMAL(2,1)

Consultas em Tabelas Tipadas Usando REFs


CREATE TYPE player AS ( player_name name, role_played name, film REF (movie) ) INSTANTIABLE NOT FINAL REF IS SYSTEM GENERATED

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)

Consultas em Tabelas Tipadas Usando REFs


SELECT film -> runs FROM actors WHERE player_name = Peter Sellers AND role_played = Merkin Muffley

Consultas em Tabelas Tipadas Usando REFs


SELECT film -> ratings ( ) FROM actors WHERE player_name = Peter Sellers AND role_played = Merkin Muffley

Consultas em Tabelas Tipadas Usando REFs


SELECT DEREF (film) FROM actors WHERE player_name = Peter Sellers AND role_played = Merkin Muffley

Insero em Tabelas Tipadas


Criando uma nova instncia de dvd na tabela short_dvds INSERT into short_dvds (title, desc, runs, stock_number, rental_price) VALUES (The Next Game, bl bl bl, 48, 61992, 0.49)

Remoo em Tabelas Tipadas

Removendo de todas as tabelas na hierarquia

DELETE from short_movies WHERE title LIKE %dead%

Remoo em Tabelas Tipadas

Removendo apenas de uma tabela especfica e suas supertables

DELETE from ONLY short_movies WHERE title = The Lunch Lady

Atualizao em Tabelas Tipadas

Atualizando uma linha numa hierarquia

UPDATE short_movies SET title = The Lunch Lady WHERE title = The Cafeteria Lady

Atualizao em Tabelas Tipadas

Atualizando apenas numa tabela especfica e suas supertables

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

Typed Views

Tambm conhecidas como Referenceable Views ou Object Views Os dados visveis na view correspondem a linhas nas tabelas tipadas. Pode-se ter herana simples de views: superview & subview

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>

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_movies SET price = 15 WHERE title = The Wedding Singer;

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_titles OF dvd UNDER short_movies_with_long_titles AS SELECT title, desc, runs, stock_number, rental_price FROM ONLY (short_dvds) WHERE char_length(title) > 75

Tabelas Tipadas e Privilgios


Privilgio USAGE: requerido para se poder usar um tipo numa aplicao ou BD. Se est invocando um mtodo num valor de TAD que armazenado numa coluna de um tipo de uma tabela ordinria (no tipada), necessrio ter o privilgio SELECT Se o mtodo um mutator, deve tambm ter o privilgio UPDATE Tambm necessrio ter o privilgio EXECUTE em todos os mtodos invocados Privilgio UNDER: para permitir especificar subtabelas, sub-tipos ou sub-views.

Rotinas SQL

Falamos em aula anterior que existem trs tipos de rotinas em SQL:

Procedures: chamadas atravs de CALL e com parmetroe IN, OUT e INOUT; ligadas a um esquema Funes: chamadas diretamente atravs de notao funcional f(a), com parmetros de IN e retorno, e ligadas a um esquema Mtodos: chamados diretamente atravs de notao de ponto f.a, com parmetros de entrada e retorno, ligados a um UDT

Rotinas SQL

Uma rotina SQL uma rotina que invocada atravs de um comando SQL. Pode ser escrita em SQL ou em outra linguagem, neste caso chamado de external routine O padro SQL:1999 prov especificao para 9 LP: Java, C, Ada, Cobol, Fortran, M (antiga Mumps), Pascal e PL/I. Uma rotina externa armazenada num arquivo fora do SGBD.

Rotinas SQL

Razes para considerar o uso de rotinas externas:


Pode-se j ter um nmero de rotinas escritas em alguma LP. Por exemplo, um pacote estatstico Poucos SGBD implementam SQL/PSM, usando, ao invs, uma linguagem proprietria, por exemplo, Oracle PL-SQL, MS Transact-SQL que no so interoperveis Tambm pode-se requerer uma certa funcionalidade que computacionalmente intensiva,. Por exemplo, anlise de sries temporais dirias, semanais, mensais, e semestrais com relatrios de vendas de DVDs. Rotinas externas so geralmente capazes de acessar servios providos de baixo nvel do SO, como sistemas de arquivo, gerncia de memria, etc.

Rotinas SQL

Desvantagens de Rotinas Externas:


Impedance mismatch (menor em Java) A criao de novas sesses para execuo de rotinas externas pode ser custoso, impactando no desempenho (context switching overhead) Treinamento em dois ambientes: SQL e outra LP

Invocao de Rotinas

Envolve um nmero de passos:


Anlise sinttica Execuo runtime


Overloading Overrriding

Rotinas SQL

Potencial das Rotinas SQL:

Triggers podem invocar procedimentos que:


Enviam email Imprimem documentos Ativa um equipamento robtico para recuperar um determinado dado

Invocao de Procedures

So chamadas atravs do comando SQL: CALL Parmetros so passados e retornados Podem ser overloaded, mas no overriden Estranhamente no permitido, por exemplo: transmit (integer) e transmit (real),

Invocao de Procedures

Algoritmo:

Todas as rotinas do nome invocado so identificadas. Todas as rotinas contidas em esquemas que no so parte do corrente SQL-path so eliminadas Todas as rotinas restantes que so funes ou mtodos so eliminados Os procedures restantes para os quais o invocador no possui o privilgio EXECUTE so eliminados Todos procedimentos cujos nmero de parmetros no igual ao nmero de argumentos na chamada CALL so eliminados Se existem duas ou mais procedures restantes, ento o algoritmo seleciona aquela que est contida no esquema que aparee mais cedo no SQL-path.

Ex. de Criao e invocao de procedure


CREATE PROCEDURE sendmail ( IN to varchar(32), IN subj varchar(100), IN prio smallint, OUT status integer) LANGUAGE C PARAMETER STYLE GENERAL SPECIFIC sendmail_c DETERMINISTIC NO SQL DYNAMIC RESULT SET 0 EXTERNAL NAME usr/musicshop/bin/mailPackage/send1 EXTERNAL SECURITY DEFINER

Ex. De Criao e invocao de procedure


CREATE PROCEDURE sendmail ( IN to varchar(32), IN subj varchar(100), OUT status integer) LANGUAGE C EXTERNAL NAME usr/musicshop/bin/mailPackage/send2 EXTERNAL SECURITY DEFINER

Ex. De Criao e invocao de procedure


CALL sendmail (customer@muvid.com, Exciting sale for web customers only!, 1, :mailStatus); CALL sendmail (customer@muvid.com, Exciting sale for web customers only!, :mailStatus);

Invocao de Funo

So um pouco mais complexas do que invocaes de procedures Quando existem vrias funes com o mesmo nome, SQL usa vrios critrios para escolher a funo que ir escolher para ser executada.

Invocao de Funo

Algoritmo

Todas as rotinas com o nome so identificadas. As que estiverem em esquemas que no so parte do corrente SQLpath so eliminadas Todas as rotinas remanescentes que so procedures ou mtodos so eliminados As funes restantes, cujo nmero de parmetros no igual ao nmero de argumentos na funo invocada so eliminadas Para cada funo restante, o tipo de dados de cada parmetro checado contra o tipo do respectivo argumento; caso no casem a funo eliminada Se existem duas ou mais funes restantes para executar, ento o algoritmo seleciona aquela que aparece mais cedo no SQLpath

Ex. de Funo
CREATE FUNCTION ratio ( IN title_param VARCHAR(100), IN length_param INTEGER) RETURNS REAL LANGUAGE SQL;

Exemplo de invocao de funo


SELECT mt.info.titulo, mt.info.length, ratio (mt.info.titulo, mt.info.length) FROM TB_Filme as mt WHERE mt.info.titulo = TITANIC OBS.: notem o uso da notao funcional na chamada da funo ratio( ) e da notao de ponto no observer titulo( )

Invocao de Mtodo de Instncia

Chamada a mtodos difere de chamada funes:


Mtodos podem ser overloadable e overriden O SQL-path no usado para resoluo de mtodo

Invocao de Mtodo de Instncia


Exemplo SELECT mt.info.duraoHoras( ) FROM TB_Filme mt WHERE mt.info.titulo = The Matrix

Exemplo de overriding
CREATE TYPE dvd UNDER movie AS ( stock_number integer, rental_price decimal(5,2), extra_features feature) INSTANTIABLE NOT FINAL; CREATE TYPE dolby_dvd UNDER dvd AS ( alt_language BOOLEAN) INSTANTIABLE NOT FINAL; OVERRIDING METHOD length_interval ( ) RETURNS INTERVAL HOUR(2) TO MINUTE; CREATE INSTANCE METHOD length_interval( ) RETURNS INTERVAL HOUR(2) TO MINUTE FOR dolby_dvd RETURN CAST (CAST (SELF.runs AS INTERVAL MINUTE(4) ) + INTERVAL 10 MINUTE(4) AS INTERVAL HOUR(2) TO MINUTE);

Exemplo de overriding
DECLARE 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 mtodo de dvd SET len2 = dvd2.lenght_interval; -- invoca mtodo overriden de dolby_dvd SET len3 = (dvd1 AS dvd).lenght_interval; -- igual a len1 SET len4 = (dvd2 as dvd).lenght_interval; -- invoca mtodo de dvd SET lang1 = dvd1.alt_language; -- erro SET lang2 = (dvd1 AS dolby_dvd).alt_language; -- erro dvd1 S NOT dolby_dvd

Potrebbero piacerti anche