A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D.

Apresentações semelhantes


Apresentação em tema: "Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D."— Transcrição da apresentação:

1 Banco de Dados II Prof. Cláudio Baptista, Ph.D.

2 Histórico Crítica ao Modelo Relacional Exemplo de Motivação Introdução ao Modelo de Objetos ODMG ODL ODMG OQL

3 1986 SQL-86 (SQL1) - padrão originalmente desenvolvido pela ANSI, posteriormente adotado pela ISO 1989 SQL-89 - extensão do SQL-86 publicado em 89 OMG - criação do Object Management Group 1991 ODMG - criação do Object Database Management Group 1992 SQL-92 (SQL2) - padrão aprovado pela ISO 1993 ODMG SQL-92/PSM - extensão do SQL-92 - provê linguagem computacionalmente completa 1997 ODMG SQL:1999 (SQL3) - padrão aprovado em 1999 pela ISO (após 7 anos de trabalho) - "SQL orientada a objeto" - SGBDs comerciais oferecem parte do SQL: ODMG SQL-2003 Aprimoramento de SQL:1999 Introdução de XML

4 Abandono gradual do padrão (SQL-92) MOOSE - major object-oriented SQL extensions: inúmeras propostas acadêmicas e industriais para estender SQL-92 com conceitos OO Aplicações presas a: extensões OO ad-hoc oferecidas pelos SGBDs comerciais, ou um modelo de dados arcaico (o modelo relacional / 1NF) Solução: SQL:1999

5 SGBDs Relacionais (SGBDRs) - Virtudes: Estrutura: 1NF é simples Integridade referencial é útil e semanticamente poderosa Comportamento: SQL é declarativa (não navegacional) SQL manipula tabelas (conjuntos de tuplas) Aplicações convencionais: "casamento" adequado com SQL através de cursores sistemas já consolidados no mercado boa performance muitos anos de pesquisa e aprimoramento eficiência: otimização de consultas, gerenciamento de transações Robustez Padronização

6 SGBDs Relacionais (SGBDRs) - Problemas: Problemas conceituais: Estrutura: falta de suporte para valores complexos (ou aderência a 1NF): força a criação de tabelas artificiais falta de suporte para OIDs: força a definição de chaves artificiais Comportamento: SQL não oferece nenhum recurso para encapsulamento Outros: SQL-92 não possui recursão Aplicações OO: "descasamento" completo entre SQL e OO-PLs

7 Motivação para BDOO atender os requisitos de aplicações não convencionais: engenharia e manufatura (CAD/CAM, CIM) aplicações científicas (Meteorologia, Genética, etc.) aplicações envolvendo dados geográficos (GIS) aplicações multimídia / hipermídia... acompanhar a evolução de LPs

8 SGBDs Orientado a Objetos (SGBDOO) modelo de dados mais rico adequado ao mercado de aplicações não convencionais pior desempenho, se comparado com SGBDR heterogeneidade a nível de modelo e de capacidades de consulta e atualização

9 SGBDs Objeto-Relacional (SGBDOR) combina as melhores características do modelo de objetos no modelo relacional modelo rico + eficiência no gerenciamento de dados tecnologia relativamente nova exemplos: Oracle 11g, Informix, DB2, Postgresql

10 Crítica do Modelo Relacional Novas aplicações necessitam de novos conceitos, principalmente tipos complexos de dados e encapsulamento Vários desses novos conceitos existem há muitos anos em linguagens de programação orientadas a objeto Um Exemplo de Motivação Nosso problema é de BD espacial. Trata-se de achar os retângulos superpondo o quadrado de lado de tamanho um

11 Condições para a superposição: x1 = 0 e y2 >= 0, não importando o quadrante As condições para a superposição são válidas se x2 > x1 (ou ponto P2 à direita de ponto P1)

12 Solução relacional Retângulos (X1, X2, Y1, Y2) Regra de integridade: Check (X2 > X1) SELECT * FROM RETANGULOS WHERE (x1 = 0 AND y2 >=0)

13 Três problemas com esta solução P1. Esquema obscuro P2. Consulta obscura P3. Execução com provável baixo desempenho. Como indexar a tabela Retângulos? Queremos: a.Representar um ponto como ponto b.Escrever uma consulta legível c.Desempenho Solução: BDOO

14 Solução BDOO: Esquema RetânguloPonto 2N {Ponto2.X > Ponto1.X} XYXY sobrepoe_quadrado _de_lado_um();... Definido_por Repositório: Retângulos

15 Linguagem de Consulta OO, Estilo SQL Quais os retângulos que sobrepõem um quadrado de lado um? Select r.ponto1, r.ponto2 From Retangulos r Where r.sobrepoe_quadrado_de_lado_um() Basta ler, para entender! sobrepoe_quadrado_de_lado_um() é indexável, como qualquer coluna de tabela

16 Encapsulamento Encapsulamento das condições de sobreposição Boolean sobrepoe_quadrado_lado_um() { If ((self.ponto1.x1 <= 1 and self.ponto1.y1 <= 1) and (self.ponto2.x2 >= 0 and self.ponto2. y2 >=0)) then return true else return false; }

17 Encapsulamento Regra de integridade: implementada no método construtor Retangulo() Retangulos agora torna-se um repositório de objetos da classe Retangulo O encapsulamento deve ser parcial, para ainda permitir interfaces estilo- SQL (Select colunax...)

18 O Mercado de SGBDs OO SGBD OO puro: Versant O2 Technology Objectivity Servio Logic Object Design: ObjectStore SGBDOR: Oracle 11g IBM DB2 Informix Incorporado pela IBM Postgresql

19 ODMG - Object Database Management Group ODL - Object Definition Language, como o CREATE TABLE do SQL OQL - Object Query Language, tenta imitar SQL no framework OO

20 ODMG imaginou que vendedores de SGBD OO implementariam uma linguagem OO como C++ com extensões (OQL), que permitisse o programador transferir dados entre o banco de dados e a linguagem hospedeira de forma fácil.

21 Fundação: setembro de 1991 Objetivo: definir um padrão para garantir a portabilidade das aplicações escritas seguindo o modelo OO Presidente: R. G. G. Cattell Web site: Versões: ODMG 1.2 (1993), ODMG 2.0 (março 1997), ODMG 3.0 (janeiro 2000) Padrões definidos pelo ODMG: modelo de objetos linguagem de definição de dados - ODL linguagem de consulta - OQL acoplamento com C++, Smalltalk e Java

22 Literal = valor + comportamento Classificação dos literais: Atomic: corresponde aos tipos de dados simples Strutured: criado usando o construtor Struct collection criado com os construtores Set, Bag, List, Array, Dictionary onde t é o tipo de objetos ou literais na coleção e k é o tipo da chave, no caso de dicionários (note que t pode ser um tipo de objeto ou literal)

23 Objeto = OID + nome + estado + comportamento OID = identificador interno gerado pelo sistema, não sendo visível ao usuário nome: é opcional deverá ser único no BD a que o objeto pertence os objetos nomeados servirão de pontos de entrada para o BD estado = valores das propriedades do objeto, incluindo: atributos do objeto relacionamentos (binários) entre o objeto e outros objetos comportamento = operações permitidas sobre o objeto

24 Fábrica = objeto utilizado para gerar ou criar outros objetos possui necessariamente uma operação que gera novos objetos (como novos OIDs)

25 Interface = definição de estrutura + assinaturas de operações as interfaces não podem ser instanciadas, ou seja,não podem gerar conjuntos de objetos utilizadas essencialmente para organizar as operações

26 Classes = definição de estrutura + assinaturas de operações as classes podem ser instanciadas, ou seja, podem gerar extensões - conjuntos de objetos – e definir chaves para estas extensões a definição da estrutura inclui a especificação de: atributos: simples e complexos de referência, utilizados para representar relacionamentos 1-n entre os objetos da classe e objetos de outra classe relacionamentos: utilizados para representar relacionamentos binários 1-n ou n- m entre os objetos da classe e objetos de outra classe: permitem especificar o relacionamento inverso não devem ser utilizados quando o relacionamento n-m possui atributos

27 Herança Comportamental (via ":") uma interface pode ser uma especialização de outras interfaces,das quais herda as operações uma classe pode ser uma especialização de outras interfaces, das quais herda as operações Herança Comportamental e Estrutural (via Extends) uma classe pode ser uma especialização de apenas outra classe, da qual herda a estrutura e as operações

28 ODL é usado para definir classes persistentes, cujos objectos podem ser armazenados permanentemente no BD. Classes ODL assemelham-se a Entity sets com relacionamentos binários, mais métodos.

29 Uma Declaração de classe inclui: 1.Um nome para a classe. 2.Declaração de chaves (key) opcional. 3.Declaração de Extent = nome para o conjunto de objetos correntes na classe (instâncias). 4.Declaração de Elementos. Um element pode ser um atributo, um relacionamento, ou um método.

30 class { } Exemplo: Class Estudante (extent Estudantes) { attribute string name; attribute int idade; }

31 Atributos são elementos com um tipo que não envolve classes. attribute ; Relacionamentos conectam um objeto ao um ou mais outros objetos de uma classe. relationship inverse ;

32 Suponha uma classe C que tenha um relacionamento R a uma classe D. Então a classe D deve ter algum relacionamento S à classe C. R e S devem ser inversos. Se um objeto d está relacionado a um objeto c via R, então c deve estar relacionado a d via S.

33 33 Ex.: Atributos e Relacionamentos class Bar { attribute string name; attribute string addr; relationship Set serves inverse Beer::servedAt; } class Beer { attribute string name; attribute string manf; relationship Set servedAt inverse Bar::serves; } O tipo de relacionamento serves É um set de Beer objects. O operador :: conecta um nome à direita ao contexto do nome à esquerda

34 34 Tipos de Relacionamentos O tipo de um relacionamento é: 1.Uma classe, como Bar. Neste caso, um objeto com este relacionamento pode estar conectado a apenas um objeto Bar. 2.Set : o objeto está conectado a um conjunto de objetos Bar. 3.Bag, List, Array : o objeto está conectado a um bag, list, ou array de objetos Bar.

35 35 Multiplicidade dos Relacionamentos Todos os relacionamento ODL são binários. Relacionamentos Muitos-para-Muitos têm Set para o tipo do relacionamento e seu inverso. Relacionamentos Muitos-para-Um têm Set no relacionamento do lado Um e a apenas a classe para o relacionamento do lado Muitos Relacionamentos Um-para-Um têm classes com o tipo em ambas direções.

36 36 Exemplo: Multiplicidade class Drinker { … relationship Set likes inverse Beer::fans; relationship Beer favBeer inverse Beer::superfans; } class Beer { … relationship Set fans inverse Drinker::likes; relationship Set superfans inverse Drinker::favBeer; } Many-many uses Set in both directions. Many-one uses Set only with the one.

37 37 Exemplo2: Multiplicidade class Drinker { attribute … ; relationship Drinker husband inverse wife; relationship Drinker wife inverse husband; relationship Set buddies inverse buddies; } husband and wife are one-one and inverses of each other. buddies is many-many and its own inverse. Note no :: needed if the inverse is in the same class.

38 38 Lidando com Relacionamentos Múltiplos ODL não dar suporte a relacionamentos ternários. Podemos simular relacionamentos ternários através de uma classe de conexão, cujos objetos representam tuplas de objetos que nós gostariamos de conectar via o relacionamento ternário.

39 39 Classes de Conexão Classes de Conexão Suponha que queremos conectar as classes X, Y, e Z através do relacionamento R. Projete uma classe C, cujos objetos representam uma tripla de objetos (x, y, z) das classes X, Y, and Z, respectivamente. Precisamos de três muitos-para-um relacionamentos de (x, y, z) para cada um de x, y, e z.

40 40 Exemplo: Classe de Conexão Suponha que tenhamos as classes Bar e Beer, e queremos representat o preço de cada Beer em vendida em cada Bar. Um relacionamento muitos-para-muitos entre Bar e Beer não pode ter o atributo preço como ocorre no modelo E/R. One solution: cria-se a classe Price e uma classe de conexão BBP para representar uma tripla bar, beer, e price.

41 41 Exemplo --- Continuação Uma vez que objetos Price são apenas números, uma melhor solução seria: 1.Dar aos objetos BBP um atributo price. 2.Usar dois relacionamentos muitos-para-um entre um objeto BBP e os objetos Bar e Beer.

42 42 Exemplo, em ODL Definição de BBP: class BBP { attribute price:real; relationship Bar theBar inverse Bar::toBBP; relationship Beer theBeer inverse Beer::toBBP; } Bar e Beer devem ser modificados para incluir relacionamentos, ambos chamados toBBP, e ambos do tipo Set.

43 43 Structs e Enums Atributos podem ter uma estrutura (com em C) ou ser uma enumeration. Declare com attribute [Struct ou Enum] { } ; Detalhes são os nomes dos campos e tipos de um Struct, uma lista de constantes de um Enum.

44 44 Exemplo: Struct e Enum class Bar { attribute string name; attribute Struct Addr {string street, string city, int zip} address; attribute Enum Lic { FULL, BEER, NONE } license; relationship … } Nomes para a estrutura e enumeração nomes dos atributos

45 45 Declarações de Métodos Uma definição de classe pode incluir declarações de métodos para a classe. Informação consiste de: 1.Tipo de retorno, se algum. 2.Nome do método. 3.Argument modes e tipos (sem nomes). wModes são in, out, e inout. 4.Quaisquer exceções que o método possa lançar.

46 46 Exemplo: Métodos real cre(in string)raises(semNotas); 1. O método cre retorna um número real, que contém o CRE de um aluno. 2. cre recebe um argumento, uma string (matrícula do aluno) e não modifica este argumento. 3. cre pode lançar a exceção semNotas.

47 47 Tipos em ODL Tipos básicos: int, real/float, string, enumerated types, e classes. Type constructors: Struct para estruturas. Collection types : Set, Bag, List, Array, e Dictionary ( = mapeamento de um tipo domínio type para um tipo imagem). Tipos Relationship podem apenas ser uma classe ou um tipo collection aplicado a uma classe.

48 48 ODL Subclasses Usual object-oriented subclasses. Indica superclasse com extends e seu nome. Subclasse lista apenas as propriedades únicas à mesma. Herda as propriedades da superclasse.

49 49 Exemplo: Subclasses Maltada é uma subclasse de beers: class Maltada extends Beer { attribute string color; }

50 ODL permite herança múltipla Conflitos são resolvidos a nível de implementação class Anime extends Filme:Cartoon { attribute … }

51 51 ODL Keys Podem declarar chaves para uma classe. Depois do nome da classe, adicionamos: (key ) Uma key com mais de um atributo precisa de parênteses adicionais ao redor dos atributos.

52 52 Exemplo: Keys class Beer (key name) { … nome é a key para beers. class Course (key (dept,number),(room, hours)){ dept and number formam uma key; como também room e hours.

53 53 Extents Para cada classe existe um extent, o conjunto de objetos existentes na classe (instâncias) Podemos pensar o extent como uma relação cuja classe é seu esquema. Indique extent depois do nome da classe, junto com as keys, como: (extent … )

54 54 Exemplo: Extents class Beer (extent Beers key name) { … } Convenção, usa-se singular para nomes de classes, e plural para o extent correspondente.

55 Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da linguagem SQL com o paradigma de programa ç ão OO Apresenta ç ão by example

56 56 Path Expressions Seja x um objeto da classe C. 1.Se a é um atributo de C, então x.a é o valor daquele atributo. 2.Se r é um relacionamento de C, então x.r é o valor para o qual x está conectado por r. wPoderia ser um objeto ou um conjunto de objetos, dependendo do tipo de r. 3.Se m é um método de C, então x.m (…) é o resultado de aplicar m a x.

57 57 Running Example class Sell (extent Sells) { attribute real price; relationship Bar bar inverse Bar::beersSold; relationship Beer beer inverse Beers::soldBy; } class Bar (extent Bars) { attribute string name; attribute string addr; relationship Set beersSold inverse Sell::bar; }

58 58 Running Example --- Cont. class Beer (extent Beers) { attribute string name; attribute string manf; relationship Set soldBy inverse Sell::beer; }

59 59 Exemplo: Path Expressions Seja s be uma variável do tipo Sell, i.e., um objeto bar-beer-price. 1.s.price = o preço no objeto s. 2.s.bar.addr = o endereço do bar que pode ser alcançado seguindo relacionamento bar em s. wNote que a cascata de pontos está OK aqui, pois s.bar é um objeto, e não uma coleção de objetos.

60 60 Exemplo: Uso Ilegal do. Não podemos aplicar o. A uma coleção na esquerda, apenas a um único objeto. Exemplo (ilegal), com b sendo um objeto Bar: b.beersSold.price Esta expressão é um conjunto de objetos Sell. Não tem um price.

61 61 OQL Select-From-Where Similar a SQL: SELECT FROM WHERE

62 62 Cláusula FROM Cada termo da cláusula FROM é: Uma coleção pode ser: 1.O extent de alguma classe. 2.Uma expressão que leva a uma coleção, e.g., certas path expressions como b.beersSold.

63 63 Exemplo Obtenha o menu do Joes Bar. SELECT s.beer.name, s.price FROM Sells s WHERE s.bar.name = Joes Bar Sells é o extent representando todos objetos Sell; s representa cada objeto Sell Expressões legais s.beer é um objeto beer e s.bar é um objeto Bar Note OQL usa aspas.

64 64 Exemplo 2 Exemplo 2 Esta query também obtém Joes menu: SELECT s.beer.name, s.price FROM Bars b, b.beersSold s WHERE b.name = Joes Bar b.beersSold é o conjunto de objetos Sell, e s é um objeto Sell que envolve o Joes Bar.

65 65 Dica para Uso de Path Expressions Se uma path expression denota um objeto, você estendê-lo com outro. e uma propriedade daquele objeto. Exemplo: s, s.bar, s.bar.name. Se uma path expression denota uma coleção de objetos, você NÃO estendê-lo, mas pode usá-lo na cláusula FROM. Exemplo: b.beersSold.

66 66 O Result Type Por default, o tipo do resultado de um select- from-where é um Bag of Structs. Struct tem um campo para cada termos da cláusula SELECT. Seus nomes e tipos são obtidos do ;ultimo nome na path expression. Se SELECT tem apenas um termo, tecnicamente o result é um one-field struct.

67 67 Exemplo: Result Type SELECT s.beer.name, s.price FROM Bars b, b.beersSold s WHERE b.name = Joes Bar Tem tipo: Bag(Struct(name: string, price: real))

68 68 Renomeando os Campos Para modificar os nomes dos campos, preceda-os pelo nome e :. Exemplo: SELECT beer: s.beer.name, s.price FROM Bars b, b.beersSold s WHERE b.name = Joes Bar Result type é: Bag(Struct(beer: string, price: real)).

69 69 Produzindo um Set of Structs Adicione DISTINCT no SELECT para eliminar duplicatas. Exemplo: SELECT DISTINCT s.beer.name, s.price FROM Bars b, b.beersSold s WHERE b.name = Joes Bar Result type é: Set(Struct(name: string, price: string))

70 70 Subqueries Uma expressão select-from-where pode conter parêntesis e usado como uma subquery de várias maneiras, como: 1.Numa cláusula FROM, como uma coleção. 2.Em expressões EXISTS e FOR ALL.

71 71 Exemplo: Subquery em FROM Encontre os fabricantes de cervejas vendidas por Joes: SELECT DISTINCT b.manf FROM ( SELECT s.beer FROM Sells s WHERE s.bar.name = Joes Bar ) b Bag de objetos Beer Para as beers vendidas por Joe

72 72 Quantificadores Duas expressões booleanas para uso em cláusulas WHERE: FOR ALL x IN : EXISTS x IN : True sss todos membros (resp. pelo menos um membro) da coleção satisfaz a condição.

73 73 Exemplo: EXISTS Encontre todos os nomes de bares que vendem ao menos uma cerveja por mais de $5. SELECT b.name FROM Bars b WHERE EXISTS s IN b.beersSold : s.price > 5.00 Ao menos um objeto Sell para bar b tem preço acima de $5.

74 74 Exemplo 2 Encontre os nome de todos os bares nos quais as únicas cervejas que eles vendem por mais de $5 são fabricadas por Petes. SELECT b.name FROM Bars b WHERE FOR ALL be IN ( SELECT s.beer FROM b.beersSold s WHERE s.price > 5.00 ) : be.manf = Petes Bag de objetos Beer Para todas as beers vendidas pelo bar b por mais de $5.

75 75 Agregações AVG, SUM, MIN, MAX, e COUNT se aplicam a qualquer coleção onde faça sentido. Exemplo: Encontre e atribua a x o preço médio de cervejas em Joes: x = AVG( SELECT s.price FROM Sells s WHERE s.bar.name = Joes Bar ); Bag of structs com os preços para as beers vendidas por Joes.

76 Class Filme (extent Filmes key (tiitulo, ano)) { attribute string titulo; attribute integer ano; attribute integer duracao; attribute enum TipoFilme (cores, pretoebranco) tipo; relationship Set estrelas inverse Estrela::estreladoEm; relationship Estudio produzidoPor inverse Studio::produziu; float duaracaoEmHoras() raises (duracaoNãoEncontrada); void nomesEstrelas(out Set ); void outrosFilmes (in Estrela, out Set ) raises (notFound); };

77 Class Estrela (extent Estrelas key nome) { attribute string nome; attribute Struct End {string rua, string cidade} endereco; relationship Set estreladoEm inverse Filme::estrelas; };

78 Class Estudio (extent Estudios key nome) { attribute string nome; attribute string endereco; relationship Set produziu inverse Filme::produzidoPor; };

79 Consultas Intra-Classe Qual o ano do filme "E o vento levou? f é uma variável do tipo Filme que "varre" o repositório Filmes (isto é, pode receber cada valor da repositório corrente Filmes) SELECT f.ano FROM Filmes f WHERE f.título = "E o vento levou?"

80 Consultas Inter-Classes Quais os nomes das estrelas do filme "Casablanca"? Note o tratamento unificado para atributos e relacionamentos SELECT e.nome FROM Filmes f, f.estrelado_por e WHERE f.título = "Casablanca" For each f in Filmes do If f.título = "Casablanca" then For each e in f.estrelado_por then Add e.nome to output bag

81 Consultas Com Método Quais os títulos e anos dos filmes com mais de 2 horas de duração? Note o tratamento unificado para atributos, relacionamentos e m é todos SELECT f.título, f.ano FROM Filmes f WHERE f.duração_em_horas( ) > 2.0; /* pode ser também duração_em_horas(f) */

82 Se o denota um objeto pertencendo a uma classe C, e p é uma propriedade da classe, então o.p é o resultado de aplicar p a o Se p é um atributo, então o.p é o valor do atributo no objeto o Se p é um relacionamento, então o.p é o objeto ou cole ç ão de objetos relacionados com o atrav é s do relacionamento p Se p é um m é todo (talvez, com parâmetros), então o.p é o resultado de aplicar o m é todo a o Pode ser usado o s í mbolo -> em lugar do ponto

83 O valor de meu_filme.dura ç ão é a dura ç ão do filme, isto é, o valor do atributo dura ç ão para o objeto Filme denotado por meu_filme O valor de meu_filme.dura ç ão_em_horas() é um n ú mero real, a dura ç ão do filme em horas, calculada pela aplica ç ão do m é todo dura ç ão_em_horas() ao objeto meu_filme

84 O valor de meu_filme.estrelado_por é o conjunto de objetos Estrela que estrelaram o filme meu_filme A expressão meu_filme.estrelas (nomes) não retorna valor (em C++, o tipo de fun ç ão void). Entretanto retorna o conjunto dos nomes das estrelas de meu_filme (parâmetro de sa í da nomes, do tipo cole ç ão) O que significa meu_filme.realizado_por.nome?

85 Estilo SQL Select-From-Where A palavra-chave SELECT seguida por uma lista de expressões A palavra-chave FROM seguida por uma ou mais declara ç ões de vari á veis simples. Uma vari á vel é declarada por dar uma expressão cujo valor tem um tipo cole ç ão, isto é, um conjunto, ou bag, ou lista, ou array A palavra-chave opcional AS O nome da vari á vel simples, que varre a cole ç ão

86 Tipicamente, a expressão de (a) é o reposit ó rio de alguma classe, como o reposit ó rio Filmes da classe Filme. Entretanto, qualquer expressão que produza uma cole ç ão de objetos pode ser utilizada, incluindo outra expressão Select- From-Where A palavra-chave WHERE é uma expressão booleana. Este expressão, como a expressão seguindo o SELECT, pode usar somente constantes e vari á veis declaradas na cl á usula FROM Uma consulta produz um bag de objetos

87 SELECT DISTINCT e.nome FROM Filmes f, f.estrelado_por e WHERE f.realizado_por.nome = "Disney"

88 Set N1 N1 = SELECT DISTINCT Struct(estrela1: e1.nome, estrela2: e2.nome) FROM Estrelas e1, Estrelas e2 WHERE e1.endereço = e2.endereço AND e1.nome < e2.nome

89 SELECT DISTINCT e.nome FROM (SELECT f FROM Filmes f WHERE f.realizado_por.nome = "Disney") d, d.estrelado_por e

90 SELECT f FROM Filmes f WHERE f.realizado_por.nome = "Disney" ORDER BY f.duração, f.título

91 FOR ALL x IN C : C(x), onde C é um conjunto, x é uma vari á vel, e C(x) é uma condi ç ão SELECT e FROM Estrelas e WHERE ALL f IN e.estrelou_em : f.realizado_por.nome = "Disney"

92 EXISTS x IN C : C(x) SELECT e FROM Estrelas e WHERE EXISTS f IN e.estrelou_em : f.realizado_por.nome = "Disney"

93 OQL usa os mesmos cinco operadores de agrega ç ão usados em SQL: AVG, COUNT, SUM, MIN, e MAX. Aplic á veis a qualquer cole ç ão cujos membros são de tipos apropriados SELECT... AVG(SELECT f.duração FROM Filmes f)...

94 A forma de uma cl á usula GROUP BY em OQL é As palavras chave GROUP BY Uma lista de atributos-parti ç ão ("partition attributes"). Cada atributo-parti ç ão consiste de Um nome de uma vari á vel (um crit é rio de agrega ç ão) Dois pontos Uma expressão mencionando uma vari á vel na cl á usula FROM

95 Na lista do SELECT, s ó podem aparecer os crit é rios de agrega ç ão, e os valores agregados O valor retornado pela cl á usula GROUP BY é um conjunto de estruturas Cada estrutura tem a forma Struct(critério_agregação1:v1,..., critério_agregaçãon:vn, lista_de_valores_agregados)

96 Os valores agregados referem-se a uma parti ç ão (um conjunto de valores de atributos-parti ç ão) SELECT nome_estúdio, ano_filme, média_durações: AVG(SELECT p.f.duração FROM partition p) FROM Filmes f GROUP BY nome_estúdio: f.realizado_por.nome, ano_filme: f.ano HAVING MAX(SELECT p.f.duração FROM partition p) > 120

97 Pode-se aplicar os operadores de união (UNION), interse ç ão (INTERSECT) e diferen ç a (EXCEPT) a duas cole ç ões compat í veis de objetos (SELECT DISTINCT f FROM Filmes f, f.estrelado_por e WHERE e.nome = "Harrison Ford") EXCEPT (SELECT DISTINCT f FROM Filmes f WHERE f.realizado_por = "Disney")

98 Set Velhos_filmes Velhos_filmes = SELECT DISTINCT f FROM Filmes f WHERE f.ano < 1920;

99 List Minha_lista Minha_lista = SELECT f FROM Filmes f ORDER BY f.título, f.ano

100 Filme Meu_filme Meu_filme = ELEMENT(SELECT f FROM Filmes f WHERE f.título = "E o Vento Levou")

101 Considere a classe

102 Class Empregado (extent Empregados key matricula) { attribute string matricula; attribute string nome; attribute float salario; relationship Set gerencia inverse Empregado::eh_gerenciado_por; relationship Empregado eh_gerenciado_por inverse Empregado::gerencia;...; }

103 Escreva em OQL Quais o nome e o sal á rio do gerente de Natasha?

104 Seja o esquema de filmes, estrelas e est ú dios visto em aula. Escrever em OQL as seguintes perguntas Quais os estúdios que realizaram algum filme com duração maior que a duração de cada filme realizado pela Eurofilmes? Quais os estúdios que realizaram mais filmes? Quais os estúdios que não realizaram filmes antes de 1960?

105 Quais as estrelas dos filmes com duração maior que pelo menos a de um filme realizado pela Disney? Quais as estrelas que estrelaram em todos os filmes do estúdio Cinecittá? Quais os estúdios que menos realizaram filmes?

106 Não oferece abstra ç ões como visões SQL Linguagem de consulta stricto sensu


Carregar ppt "Banco de Dados II 2009.2 Prof. Cláudio Baptista, Ph.D."

Apresentações semelhantes


Anúncios Google