Linguagem BD + capacidades OO Variante da representação OO das encomendas EncomTipo = RECORDOF( e#: int, inclui: SETOF( IQTipo ), cliente: ClienteTipo ) ENCOMTIPO E# INCLUI ITEM CLIENTE QUANT NOME I# • NOME I# • NOME I# • NOME ENDEREÇO BALANÇO Hipótese de representação relacional correspondente CREATE TABLE ENCOMTIPO ( E# INCLUI NUMERIC, SETOF( IQTIPO ), CLIENTE CLIENTETIPO ) CREATE TABLE IQTIPO ( ITEM ITEMTIPO, QUANT NUMERIC ) CREATE TABLE CLIENTE ( NOME CHAR(20), ENDEREÇO CHAR(60), BALANÇO NUMERIC ) Classe = Relação extensões ao modelo relacional necessárias • suporte para colunas compostas - cada valor de CLIENTE é um triplo que existe na tabela CLIENTETIPO • suporte para tabelas como valores de atributos (caso de INCLUI) • suporte para métodos associados às tabelas (ex: calc_quant_total) problemas • estes objectos são linhas em tabelas, não encapsulados (nome de CLIENTE obtido por caminho ENCOMTIPO.CLIENTE.NOME) • o domínio de E# é NUMERIC, um tipo de dados, restrição intemporal; mas o domínio de CLIENTE é CLIENTETIPO, uma tabela variante no tempo e não um verdadeiro tipo de dados • embora a imagem seja a de objectos que contêm objectos, de facto a partilha de subobjectos é feita por apontadores e qualquer alteração num cliente é logo reflectida em todas as encomendas que o refiram (diferente de uma chave externa, que é um valor) — não se tem relações, mas tabelas com valores e apontadores Problemas • projecção de ENCOMTIPO sobre o número da encomenda e o nome do cliente - dá (E#, (NOME) ) ou antes (E#, NOME) E# ????? NOME 1327 • E# NOME 1327 Micro Micro se é isto, qual o nome da 2ª coluna? • se é isto, então lá se vai a como fazer a junção com o nome do cliente em hierarquia; mais vale ficar CLIENTETIPO? CLIENTE = (NOME) no modelo relacional de que classe é o resultado da projecção? que métodos se lhe aplicam? calc_quant_total não pode ser Conclusão: erro está em se equacionar classe com relação Outra representação representação de rectângulos CREATE DOMAIN RECTANGLE REP ( ... ); CREATE FUNCTION RECTANGLE -- REP é uma representação eficiente -- construtor ( A FLOAT, B FLOAT, C FLOAT, D FLOAT ) RETURNS ( RECTANGLE ) AS BEGIN; DECLARE R RECTANGLE; R.X1:= A; R.X2:= B; R.Y1:= C; R.Y2:= D; RETURN( R ); END; CREATE FUNCTION OVERLAP -- determina sobreposição ( R1 RECTANGLE, R2 RECTANGLE ) RETURNS( BOOLEAN ); AS BEGIN; ... code ... END; CREATE TABLE RECTANGLES -- tabela com rectângulos na 2ª coluna ( RECTID ..., R RECTANGLE, ... , UNIQUE( RECTID ) ); SELECT RECTID -- pergunta que processa rectângulos FROM RECTANGLES WHERE OVERLAP( R, RECTANGLE( 0, 1, 0 ,1 ) ); Classe = Domínio extensões os sistemas relacionais têm que suportar convenientemente domínios de atributos, que podem ser tipos de dados de complexidade arbitrária, definidos pelo utilizador (o modelo sempre suportou domínios — baseia-se neles) comparação • construção OO básica: classe de objectos, i.e., tipo de dados abstracto definido pelo utilizador • construção relacional básica: domínio de atributo, i.e., tipo de dados encapsulado definido pelo utilizador (embora muitos sistemas comerciais não o suportem) — só as funções pre-definidas podem manipular internamente os valores complexos (como as funções de string manipulam os valores CHAR) - classe = domínio (são a mesma coisa) instância = elemento do domínio colecção = conjunto de valores numa coluna os domínios podem conter qualquer objecto: vectores, listas, documentos, fotografias, ... • domínios encapsulam, relações não • hierarquias de classes e polimorfismo têm o seu lugar na construção de domínios • ao nível relacional, não há necessidade de identificadores de objectos Caminho promissor Conclusão: preferível equacionar classe com domínio no futuro (SQL3?), SQL mais • tipos de dados abstractos definidos pelo utilizador (generalização dos domínios) • - podem ser utilizados para enriquecer as colunas - requerem a capacidade de chamar os métodos respectivos nas instruções de pesquisa SQL herança - funciona sobre uma hierarquia de classes - as classes não têm extensão; só as tabelas BD inteligentes • misturam ou integram várias extensões - orientação por objectos regras dedutivas (sistemas periciais e Inteligência Artificial) pesquisa de informação (em texto, pesquisa booleana) - multimedia (texto, imagem, voz, video) com pesquisa por conteúdo