Banco de Dados Objetos Relacionais Tabelas Aninhadas 1 Tabelas Aninhadas do Oracle Permite uma relação seja usada como valor de um conjunto de componentes. Seja T um UDT, a sentença abaixo cria um tipo S cujos valores são relações com rowtipe T, por: CREATE TYPE S AS TABLE OF T ; 2 Exemplo: Tabela Aninhada CREATE TYPE BeerType AS OBJECT ( name CHAR(20), kind CHAR(10), color CHAR(10) ); / CREATE TYPE BeerTableType AS TABLE OF BeerType; / 3 Example --- Continued BeerTableType é usada na relação Manfs para armazenar o conjunto de bebidas que produzidas por cada fabricante. CREATE TABLE Manfs ( name CHAR(30), addr CHAR(50), beers beerTableType ); Nested Table Tipo Tabela 4 Armazenamento de Nested Table As tabelas aninhadas não são armazenadas pelo Oracle como relações separadas. Apenas aparenta ser assim Em vez disso, existe uma relação R na qual todas as tabelas aninhadas para um atributo A são armazenadas. Este relação (R) é declarada em CREATE TABLE by: NESTED TABLE A STORE AS R 5 Armazenamento de Nested Table DEPARTAMENTOS Nome ....... Empregados A Tabela de Armazenamento NESTED_TABLE_ID B B C B D C Values A D - Oracle armazena as linhas de uma nested table em uma tabela separada (tabela de armazenamento) - o oracle usa nested_table_id para relacionar linhas na tabela de armazenamento com a nested table correspondente. C D A 6 Exemplo: Armazenando Tabelas Aninhadas CREATE TABLE Manfs ( name CHAR(30), addr CHAR(50), beers beerTableType ) NESTED TABLE beers STORE AS BeerTable; Note where the semicolon goes and doesn’t go. 7 Transformando Relações em Tabelas Aninhadas Uma relação pode se tornar o valor de uma tabela aninhada. Use CAST(MULTISET(…) AS <type> ) na relação para transformá-la no valor com o tipo apropriado para uma tabela aninhada. 8 Exemplo: CAST --- 1 Seja uma relação Beers(beer, manf), em que beer é um objeto BeerType e manf é uma string (o fabricante da bebida). Deseja-se inserir em Manfs uma nova tupla, com os seguintes valores de atributos: beers: conjunto de bebidas (na tabela Beers) em que o valor do atributo manf é Coca-Cola Company nome: Coca-Cola Company addr: Brasil 9 Exemplo: CAST --- 2 Conjunto de bebidas (BeerType) cujo fabricante é Coca-Cola Company INSERT INTO Manfs VALUES( 'Coca-Cola Company', 'Brasil', CAST( MULTISET( SELECT bb.name, bb.manf FROM Beers bb WHERE bb.manf = 'Coca-Cola Company' )AS BeerTableType ) ); Transforma o conjunto de objetos resultantes em uma tabela aninhada 10 Query em uma Tabela Aninhada Uma tabela aninhada pode ser convertida em uma tabela comum pela aplicação do operador THE(…). Esta relação pode ser usada em uma cláusula FROM como qualquer outra relação. 11 Exemplo: Uso do THE Encontrar o nome das bebidas que estão no conjunto de bebidas do fabricante Coca-Cola Company Tabela aninhada do fabricante cujo nome é 'Coca-Cola Company’, Convertida em uma tabela comum pelo operador THE SELECT bb.name FROM THE( SELECT beers FROM Manfs WHERE name = 'Coca-Cola Company' ) bb; Alias da tabela aninhada (que não tem nome) 12 Exercícios 1. Inserir na tabela Estudios um estúdio com os seguintes valores de atributos: 2. Nome: ‘Ilha do Retiro’ Endereço: Rua: Av. Sport Club do Recife Número: 100 Cidade: Recife Inserir na tabela Filmes um filme com os seguintes valores de atributos: Nome: ‘Campeao do Centenario’ Estudio: Referencia para o estudo criado anteriormente Duração: 100 13 Exercícios (continuação) 3. 4. No tipo ESTUDIOS, insira uma tabela aninhada para conter os FILMES que foram realizados no estúdio. Insira na tabela ESTUDIO um estúdio com os seguintes valores de atributos: Nome: Estadio do Sport Endereço: Rua: ‘Av.Sport Club do Recife’ Númer0: 101 Cidade: Recife Filmes: Conjunto de Filmes gravados no estúdio de nome ‘Ilha do Retiro’ 14 Exercícios (continuação) 5. 6. 7. 8. Listar o nome dos filmes do conjunto de filmes do estádio de nome ‘Estadio do Sport’ Listar o nome dos filmes do conjunto de filmes do estádio de nome ‘Ilha do Retiro’ Atualizar o objeto Estúdio de nome ‘Ilha do Retiro’ para que valor de seu atributo filmes seja o conjunto de filmes cujo nome do estúdio onde foi gravado seja ‘Ilha do Retiro’. Listar o nome dos filmes do conjunto de filmes do estádio de nome ‘Ilha do Retiro’ 15