1.46k likes | 1.83k Views
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
E N D
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
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
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
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
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
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
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
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
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 • Definições comuns e conceitos • Estrutura do padrão multi-parte • Estrutura para conformidade básica • Possui cerca de 75 páginas
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
Part 3: CLI • Call-Level Interface • Melhor implementação: ODBC • Alinhado com SQL:1999 features e ODBC 3.0 features • Cerca de 400 páginas
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
Part 5: SQL/Bindings • Embedded SQL (SQL embutido) • Dynamic SQL • “Direct Invocation” • Cerca de 250 páginas • Tendência: 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 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
Tipos de Dados Definidos pelo Usuário • UDT – User Defined Types • Evolução dos tiposem SQL: • Semprehouveostiposembutidos (built-in) como: INTEGER, SMALLINT, CHAR, VARCHAR, DATE, TIME e TIMESTAMP • Algunstiposproprietários: Oracle NUMBER e RAW; Sybase SMALLMONEY e IMAGE • Apósalgunsanos, surgiram BLOB e CLOB com semânticalimitada! • Houvealgumastentativas de DBMS vendors de proporsoluçõesparacertostipos de dados específicos: texto, GIS, imagens e time series
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!
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)
Tipos definidos pelo usuário • Três tipos de UDT: • Distinct types • Structured types • Reference types
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
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 • 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
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
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
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
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.
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
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
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
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.
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++
Exemplo: Método CREATE TYPE Filme AS ( título varchar (100), descricao varchar (500), duracaoMinutos int) NOT FINAL METHOD duracaoEmHoras() RETURNS INTERVAL HOUR(2) TO MINUTE
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)
Chamada a Métodos • Ex.: CREATE TABLE tb_Filme ( cod int, info filme, aluguel DECIMAL(5,2))
Chamada a Método Recupere a duração 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 ) • Funções implícitas: • CREATE FUNCTION numerator (rational) RETURNS INTEGER • CREATE FUNCTION numerator (rational, INTEGER) RETURNS rational
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));
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
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 => • Método original: [ INSTANCE | STATIC ] METHOD name ( param-name type,... ) RETURNS type • Método sobrescrito: OVERRIDING original-method
Remoção de um UDT DROP TYPE nome <CASCADE|RESCRICT>