Tipos de dados complexos e objectos Tipos de dados estruturados e herança em SQL Herança de tabelas Matrizes e multi-conjuntos em SQL Identidade de



Documentos relacionados
Capítulo 8: BDs Objecto-Relacional!

Tipos de dados complexos e objectos Tipos de dados estruturados e herança em SQL Herança de tabelas Matrizes e multi-conjuntos em SQL Identidade de

Banco de Dados Objeto Relacional

Bases de Dados 2007/2008 Exame

Função dos Sistemas de Bases de Dados Visão dos dados Modelos de dados Linguagem de Definição de Dados Linguagem de Manipulação de Dados Gestão de

Introdução ao SQL. Aécio Costa

Figura 1. Figura 2. Prova Escrita de Base de Dados 5 Novembro V2 Número do Aluno: Nome do Aluno: 1º Teste (90 Minutos)

Tarefa Orientada 18 Procedimentos armazenados

Índice. Introdução Tutorial 1: O Microsoft Access como Sistema de Gestão de Bases de Dados Relacionais... 35

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Disciplina Técnicas de Modelagem

Capítulo 3: Modelo Relacional!

Programação por Objectos. Java

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Agenda. Banco de Dados Temporais. Banco de Dados Temporais. Introdução. Banco de Dados Temporais PRINCIPAIS CONCEITOS DE REPRESENTAÇÃO TEMPORAL

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

Exercícios com o intuito de cobrar todos os assuntos vistos em sala, relativos à Modelagem Conceitual, SQL, PL e XML. 1ª ETAPA

GBD PROF. ANDREZA S. AREÃO

ACH2025. Laboratório de Bases de Dados Aula 14. Bancos de Dados Objeto-Relacional. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Consistem num conjunto de apontadores para instâncias especificas de cada relação.

NOME SEXO CPF NASCIMENTO SALARIO

Chaves. Chaves. O modelo relacional implementa dois conhecidos conceitos de chaves, como veremos a seguir:

BD Objeto-Relacional - Motivação

Sistemas de Informação

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

Banco de Dados II. Triggers e Functions. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas

Bases de Dados. Lab 1: Introdução ao ambiente

Linguagem de Consulta - SQL

Hugo Pedro Proença, 2007

Tarefa Orientada 16 Vistas

3.1 Definições Uma classe é a descrição de um tipo de objeto.

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

MODELO OBJECTO - RELACIONAL ORACLE 8

Programação SQL. Introdução

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

UML (Unified Modelling Language) Diagrama de Classes

SQL DML. Frederico D. Bortoloti

Banco de Dados Avançados Banco de Dados Ativo

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

XML para transferência de dados Estrutura hierárquica do XML DTDs e XML Schema Consultas de documentos XML: XPath e XQuery Transformação de

Facturação Guia do Utilizador

Especificação Operacional.

Aula 3 SBD Modelo Entidade Relacionamento Parte 1. Profa. Elaine Faria UFU

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

UNIVERSIDADE FEDERAL FLUMINENSE PÓLO UNIVERSITÁRIO DE RIO DAS OSTRAS FACULDADE FEDERAL DE RIO DAS OSTRAS CURSO DE CIÊNCIA DA COMPUTAÇÃO

RELATÓRIO DA LISTEX N.º 5. Integração dos Aplicativos de Banco de Dados MEC, JRN e IDN no Banco de Dados Setorial MNCH e sua Implementação.

A IMPLEMENTAÇÃO OBJETO-RELACIONAL ORACLE

Universidade da Beira Interior Cursos: Engenharia Informática, Ensino da Informática, Matemática Aplicada e Matemática /Informática

SQL Procedural. Josino Rodrigues Neto

Prof. Daniela Barreiro Claro

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Esquema da Relação. Modelo Relacional. Instância da Relação. Exemplo. Uma base de dados é uma colecção de uma ou mais relações com nomes distintos

Linguagem de Consulta Estruturada SQL- DML

Tarefa Orientada 19 Triggers

Banco de Dados. Prof. Antonio

EXAME DE 1ª ÉPOCA Semestre de Verão 2004/ Junho 2005 duração: 2h30m

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

DESENVOLVIMENTO DE SOFTWARE

INTRODUÇÃO À PROGRAMAÇÃO DO ACCESS BASIC

SQL: Definição de tabelas, Modificações à Base de Dados

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE

MOODLE: actividade WiKi

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003

CEFET.PHB - PI. Plano de Ensino. Banco de Dados. Plano de Ensino. Plano de Ensino. Plano de Ensino - Conteúdo. Plano de Ensino - Conteúdo

Curriculum DeGóis Guia de preenchimento do Curriculum Vitae (Informação mínima necessária)

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Generalização e Especialização Banco de Dados

4.1. UML Diagramas de casos de uso

Sistemas de Ficheiros. Sistemas de Bases de Dados

BDII SQL Junção Revisão 8

1. Criar uma nova apresentação

Índice. Introdução 31. Tutorial 1: O Microsoft Access como Sistema de Gestão de Bases de Dados Relacionais 35

Prova de Fundamentos de Bancos de Dados 2 a Prova

Criar um formulário do tipo Diálogo modal ; Alterar a cor de fundo de um formulário; Inserir botões de comando e caixas de texto;

MODELAGEM DE DADOS - NORMALIZAÇÃO. Prof. Angelo Augusto Frozza, M.Sc.

Tarefa Orientada 15 Manipulação de dados

Bases de Dados. DML Data Manipulation Language Parte 1

FUNDAMENTOS DA ORIENTAÇÃO A OBJETOS- REVISÃO

ROTEIRO. A Linguagem SQL (I parte) CEFET.PHB - PI Prof. Jefferson Silva. As partes da linguagem SQL. A Linguagem de Definição de Dados (SQL-DDL)

Banco de Dados Oracle 10g: Introdução à Linguagem SQL

Tarefa Orientada 11 Junção Interna

Curso Superior de Tecnologia em BD Curso Superior de Tecnologia em DAI

Bases de Dados 2007/2008. Aula 9

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

Fernando Albuquerque - fernando@cic.unb.br. Bancos de Dados. Fernando Albuquerque fernando@cic.unb.br

Definida pelo American National Standard Institute (ANSI) em 1986

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

Prof.: Clayton Maciel Costa

Introdução à Manipulação de Dados

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli

Bancos de Dados: impossível viver sem eles...

Linguagem SQL Sub-linguagem DDL

Transcrição:

Capítulo 8: BDs Objecto-Relacional Tipos de dados complexos e objectos Tipos de dados estruturados e herança em SQL Herança de tabelas Matrizes e multi-conjuntos em SQL Identidade de Objectos e Referência em SQL Implementação das características O-R Linguagens de Programação Persistentes Comparação entre os vários modelos 1

Modelo de Dados Objecto-Relacional Tem como base o modelo relacional, e generaliza-o introduzindo noções de objectos e formas de lidar com tipos complexos. Permite que os atributos tenham valores de tipos complexos, incluindo valores não atómicos. Aumenta a capacidade de modelação, sem perder as principais vantagens do modelo relacional (incluindo o acesso declarativo aos dados). É compatível com as linguagens relacionais existentes (o que torna este modelo bastante apelativo para sistemas de bases de dados comerciais). 2

Motivação: Relações imbricadas Permitir domínios não atómicos (atómico indivisível) Exemplo de domínios não atómicos: Conjunto de inteiros Conjunto de tuplos Permite uma modelação mais intuitiva em aplicações com tipos complexos Definição informal: Permitir relações em todo o local onde antes se permitiam valor atómicos relações dentro de relações Manter base matemática do modelo relacional Viola a 1ª forma normal 3

Exemplo de relação imbricada Numa biblioteca cada livro tem: um título, um conjunto de autores, uma editora, um conjunto de keywords Uma instância da relação livros, que não está na 1ª Forma Normal, é: 4

Versão 1NF de relação imbricada Na 1NF a instância da relação livros seria: livros-flat 5

Decomposição 4NF de Nested Relations Remover redundâncias de livros-flat assumindo as seguintes dependências multivalor: título autor título keyword título nome-pub, pub-branch Com decomposição de livros-flat para a 4NF obtêm-se os esquemas: (título, autor) (título, keyword) (título, nome-pub, pub-branch) 6

Decomposição livros-flat para a 4NF 7

Problemas com a 4NF Os esquemas na 4NF precisam de junção para grande parte das perguntas. A relação na 1NF, livros-flat, que corresponde à junção das relações na 4NF: Elimina a necessidade de junções, Mas perde a correspondência biunívoca entre tuplos e entidades (livros). E tem imensas redundâncias Neste caso, a relação imbricada parece ser mais natural. 8

Tipos complexos no SQL:1999 As extensões do SQL para suportar tipos complexos incluem: Colecções e objectos de grande dimensão Relações imbricadas são um exemplo de colecções Tipos estruturados Tipos com atributos compostos (registos) Herança Orientação por objectos Incluindo identificadores de objectos e referências A apresentação que se segue baseia-se no standard SQL:1999 (com algumas extensões) Não está (ainda) completamente implementado em nenhum sistema comercial Mas algumas das características existem já na maioria dos sistemas O Oracle já suporta boa parte do que se vai apresentar 9

Tipos Estruturados e Herança em SQL Tipos Estruturados podem ser declarados e usados em SQL create type NameType as (firstname varchar(20), lastname varchar(20)) final create type AddressType as (street varchar(20), city varchar(20), zipcode varchar(20)) not final Nota: final e not final indica se se podem criar subtipos Tipos estruturados podem ser usados para criar tabelas com atributos compostos create table customer ( name NameType, address AddressType, dateofbirth date) Usa-se a notação com. para referir os componentes: name.firstname 10

Tipos Estruturados (cont.) Tipos de linha (row-type) definidos pelo utilizador create type CustomerType as ( name NameType, address AddressType, dateofbirth date) not final Podemos então criar uma tabela cujas linhas são do tipo definido pelo utilizador create table customer of CustomerType 11

Métodos Podemos adicionar a declaração de métodos com um tipo estruturado. method ageondate (ondate date) returns interval year O corpo de método é dado em separado. create instance method ageondate (ondate date) returns interval year for CustomerType begin return ondate - self.dateofbirth; end Podemos agora encontrar a idade de cada cliente: select name.lastname, ageondate (current_date) from customer 12

Herança Considere a seguinte definição de tipo para pessoas: create type Pessoa (nome varchar(20), morada varchar(20)) not final; Pode-se usar herança para definir os tipos para estudante e docente create type Estudante under Pessoa (grau varchar(20), departamento varchar(20)); create type Docente under Pessoa (salário integer, departamento varchar(20)); Os subtipos podem redefinir os métodos usando (explicitamente) na definição do tipo overriding method em vez de method 13

Herança Múltipla Num sistema com herança múltipla, pode-se definir monitor como: create type Monitor under Estudante, Docente Para evitar conflito entre duas ocorrências de departamento (departamento onde estuda vs departamento onde lecciona), podem-se renomear os atributos create type Monitor under Estudante with (departamento as dep-estud), Docente with (departamento as dep-docente) Nem o SQL:1999, nem o SQL:2003, nem o Oracle, suportam herança múltipla Mas há generalizações do SQL que consideram herança múltipla 14

Herança em Tabelas A herança em tabelas permite que um objecto tenha múltiplos tipos, deixando que uma entidade pertença simultaneamente a mais do que uma tabela. E.g. create table pessoas of Pessoa Podemos definir as subtabelas estudantes e docentes: create table estudantes of Estudante under pessoas create table docentes of Docente under pessoas Cada tuplo numa subtabela pertence (implicitamente) à supertabela correspondente 15

Herança em tabelas: papéis Herança múltipla em tabelas pode ser usada para modelizar os vários papéis que uma entidade pode ter (e.g. trabalhador do banco: do quadro ou a contrato; caixa, ou gerente) Deixa que um valor tenha múltiplos tipos, sem ter necessariamente um tipo mais específico. e.g., um objecto pode estar simultaneamente nas (sub- )tabelas de estudante e de docentes, sem necessidade da subclasse monitor (que ficaria debaixo de estudantes e de docentes) Podem-se adicionar ou retirar papéis a um objecto, adicionando ou removendo tuplos nas sub-tabelas NOTA: O Oracle obriga a que todos os valores tenham um tipo mais específico 16

Requisitos de consistência nas subtabelas Requisitos de consistência para subtabelas Cada tuplo da supertabela (e.g. pessoas) só pode corresponder, no máximo, a um tuplo em cada uma das subtabelas (e.g. estudantes e docentes) Requisito adicional no SQL:1999: Todos os tuplos com o mesmo valor nos atributos herdados têm que ser derivados de um só tuplo (inserido numa só tabela). Ou seja, cada entidade tem que ter um tipo mais específico Não se pode ter um tuplo em pessoas que corresponda simultaneamente a um tuplo de estudantes e a um tuplo de docentes. Por outras palavras, em SQL:1999 a herança em tabelas implementa especializações disjuntas. 17

Tipos Array e Multiset em SQL Exemplo de uma declaração com colecções de valores Array e Multiset create type Editor as (nome varchar(20), branch varchar(20)) create type Livro as (título varchar(20), array-autores varchar(20) array [10], data-publ date, editor Editor, conj-keyword varchar(20) multiset) O Oracle suporta atributos cujo tipo é table of... Usando um array para os autores, pode-se guardar a ordem Podem-se criar tabelas com tipos estruturados. create table livros of Livro 18

Tipos estruturados (Cont.) Os tipos estruturados permitem a representação directa de atributos compostos. Podem-se também usar, em SQL:1999, tipos anónimos para definir atributos compostos E.g. Pode-se omitir a declaração do tipo Editor e, em vez disso, usar a seguinte declaração no tipo Livro editor row (nome varchar(20), branch varchar(20)) As colecções permitem a representação directa de atributos multivalor. 19

Criação de valores para tipos complexos Os valores para tipos complexos são construídos recorrendo a funções (ou métodos) de construção E.g. Editor( McGraw-Hill, New York ) Nota: o valor retornado não é um objecto No SQL:1999 podem-se definir funções de construção E.g. create function Editor (n varchar(20), b varchar(20)) returns Editor begin set nome =n; set branch =b; end Os valores de tipos row podem-se construir usando listas de valores entre parêntesis E.g. dado o tipo row (nome varchar(20), branch varchar(20)) pode-se atribuir um valor usando, e.g. (`McGraw-Hill,`New York ) 20

Criação de valores (Cont.) Construção de Arrays array [ Silberschatz,`Korth,`Sudarshan ] Construção de multi-conjuntos multiset [ computers,`sql,`database ] Para criar um tuplos da relação livros ( Compilers, array[`smith,`jones ], Editor(`McGraw-Hill,`New York ), multiset[`parsing,`analysis ]) Para inserir esse tuplo na relação livros insert into livros values (`Compilers, array[`smith,`jones ], Editor( McGraw Hill,`New York ), multiset[`parsing,`analysis ]) 21

Consultas em tipos estruturados Quais os títulos e respectivos nomes da editora de todos os livros. select título, editor.nome from livros Note que editor é um atributo (e não uma tabela). Tal como para aceder a atributos de uma tabela, também se usa o ponto para aceder a atributos de atributos com tipos estruturados. Para aceder a métodos usa-se o ponto e o nome do método seguido dos argumentos entre parêntesis. Os parêntesis devem lá estar mesmo que não haja argumentos. 22

Perguntas a colecções Os atributos com colecções são usados de forma semelhante tabelas, utilizando agora a keyword unnest Quais os títulos dos livros que têm database entre as palavras chave? select título from livros where database in (unnest(conj-keyword)) Pode-se aceder a elementos dum array da forma habitual i.e. usando índices. Se soubermos que um dado livro tem 3 autores, podemos escrever: select array-autores[1], array-autores[2], array-autores[3] from livros where título = ` Obter uma relação contendo pares da forma título,autor em que autor é autor do livro com título título: select B.título, A.nome from livros as B, unnest (B.array-autores) as A(nome) Para reter a ordenação, podemos acrescentar a clausula select B.título, A.nome from livros as B, unnest (B.array-autores) with ordinality as A(nome,posição) 23

Unnesting O processo de transformação de uma relação imbricada numa forma com menos (ou nenhum) atributo do tipo relação é chamado unnesting. E.g. select título, A as autor, editor.nome-pub as nome_do_editor, editor. pub_branch as branch_do_editor, K. keyword from livros as B, unnest (B.array-autores) as A(autor), unnest (B.conj-keyword) as K(keyword), 24

Nesting Nesting é o processo oposto ao unnesting, criando um atributo do tipo relação. O SQL:1999 não suporta nesting. O nesting pode ser feito de maneira semelhante às agregações para criar um conjunto, usa-se a função collect() em vez da função de agregação, para criar um multi-conjunto. Para, em livros-flat, agrupar num atributo o conjunto das keywords: select título, autor, Editor(nome-pub, pub_branch) as editor, collect(keyword) as conj-keyword from livros-flat group by título, autor, editor Para agrupar também os vários autores dum livro: select título, collect(autor) as autores, Editor(nome-pub, pub_branch) as editor, collect(keyword) as conj-keyword from livros-flat group by título, editor 25

Versão 1NF de relação imbricada Na 1NF a instância da relação livros seria: livros-flat 26

Nesting (Cont.) Outra abordagem consiste em usar sub-perguntas na cláusula select: select título, array( select M.autor from livros-flat as M where M.título =O.título) as autores, Editor(nome-pub, pub-branch) as editor, multiset(select N.keyword from livros-flat as N where N.título = O.título) as conj-keyword from livros-flat as O Pode usar-se order by em perguntas nested para obter colecções ordenadas, úteis na criação de arrays. 27