Banco de Dados Dedutivos Orientados a Objetos e FLORA Sérgio Queiroz [email protected] CIn - UFPE Recife, dezembro de 1999 Roteiro Bancos de dados orientados a objetos DOOD: bancos de dados dedutivos orientado a objetos F-Logic, FLORID e FLORA Exemplo introdutório: O banco de dados acadêmico em F-Logic Objetos, nomes de objetos, métodos, átomos-F, moléculasF e BD extensional Classes, assinaturas, herança e esquemas de BD Predicados e átomos-P Regras, consultas e BD intencional Negação e restrições de segurança na conclusão das regras Interação herança-dedução Verificação de tipos e Metaprogramação FLORA x SQL FLORA x DataLog FLORA x LIFE Problemas enfrentados pela área de banco de dados Aplicações não-tradicionais (“non-business type”) • • • • CAD, GIS, AI Necessidade de manusear grandes quantidades de dados Dados complexos Evolução do esquema Mudanças significativas na relação de custo memória/disco Impedance mismatch entre linguagens de programação e linguagens de consultas em banco de dados Bancos de Dados Orientados a Objetos Combina o paradigma OO com a tecnologia de BD Modelo de dados OO Requisitos obrigatórios para ser considerado OO (manifesto): • • • • • • Objetos complexos Identidade de objetos Encapsulamento Tipos ou Classes Herança Overriding, Overloading e Late Binding • Completude computacional • Extensibilidade Características gerais de BDs Persistência Gerenciamento de memória secundária Concorrência Recuperação Consultas Ad-hoc BD Dedutivo Orientado a Objetos BDOO: identidade de objetos objetos complexos classes encapsulamento herança overriding, overloading e late binding extensibilidade linguagem de consulta declarativa embasamento teórico Bancos de Dados Dedutivos fundamentação lógica linguagem declarativa poderosa com mecanismo de dedução tipos abstratos de dados identidade de objetos modelo de dados flat BDDOO Estratégias para construção de um DOOD Utilização da linguagem declarativa existente Integração da linguagem declarativa existente às novas extensões orientadas a objetos Tempo de adaptação à linguagem Flexibilidade da integração: bidirecional, unidirecional. Impedance Mismatch Semântica Uma Formal única linguagem Reconstrução total do sistema Frame-logic (F-logic) Tentativas de estender BD dedutivo com funcionalidades OO ou vice-versa tendem a sacrificar características lógicas ou orientadas a objetos importantes F-Logic (1995) • Lógica completa para representar os conceitos do paradigma orientado a objetos Objetos complexos; Identidade de objetos (oid); Herança; Polimorfismo; Encapsulamento; etc. • Apropriada para definir, consultar e manipular esquemas de bancos de dados FLORID e FLORA FLORID (U. Freiburg, 1997) implementação de F-logic em C++ com algumas extensões avaliação bottom-up interface web expressões regulares expressões de caminho nenhuma integração com C++ apenas linguagem de consulta em memória central nenhum outros serviços em BD sem encapsulamento FLORA (SUNY, 1999) implementação de F-logic sob XSB avaliação top-down expressões de caminho integração (quase) completa e bi-direcional com XSB mais eficiente que Florid com compilação via “tabling” apenas linguagem de consulta em memória central nenhum outros serviços em BD sem encapsulamento BD Acadêmico em F-Logic: hierarquia “é um” person degree ms child(person) phd empl john child(john) dept phil sally cs2 cs1 student faculty manager alice mary bob ... report young midaged article datatype 40 cacm jacm 20 yuppie string codd70 flogic94 30 integer "CS" "Mary" empl :: person student :: person faculty :: empl child(person) :: person john : student john : empl cs1 : dept "Bob" yuppie :: young 20 : young 30 : yuppie 40 : midaged "CS" : string "Bob" : string alice : child(john) ... BD Acadêmico em F-logic: fatos Bob is 40 and is the manager of the CS department. His assistants are John and Sally . bob[name -> "Bob"; age -> 40; affiliation -> cs1[dname -> "CS"; mngr -> bob; assistants ->> {john, sally}]] Mary's highest degree is an MS. She works at the CS department and is friend to Bob and Sally. mary[name -> "Mary"; highestDegree -> ms; friends ->> {bob, sally}; affiliation -> cs2[dname -> "CS"]] ... BD Acadêmico em F-logic: informações gerais das classes Every faculty is a midaged person who writes article, makes in the average $50,000 a year and owns a degree of some kind, typically a PhD. A faculty's boss is both a faculty and a manager. faculty[boss => (faculty, manager); age => midaged; highestDegree => degree; papers =>> article; highestDegree *-> phd; avgSalary -> 50000] Every employee is affiliated to some department, has a boss who is also an employee and joint work on reports with other employees. empl[affiliation => dept; boss => empl; jointWorks@empl =>> report] Every person has a name, friends who must be persons and children who also must be persons. person[name => string; friends =>> person; children =>> child(person)] ... BD Acadêmico em F-logic: regras dedutivas A boss is an employee who is the manager of another employee of the same department. E[boss -> M] <- E:empl D:dept E[affiliation -> D[mngr -> M:empl]] A joint work is a paper that is written by two faculties. X[jointWorks@Y ->> Z] <- Y:faculty X:faculty Y[papers ->> Z] X[papers ->> Z] BD Acadêmico em F-logic: consultas Who are the midaged employees of the CS department and who are their boss? ?- X:empl X[boss -> Y; age -> Z:midaged; affiliation -> D[dname->"CS"]] Who published jointly with Mary in the Journal of the ACM? ?- mary[jointWorks@Y ->> jacm90] Where did Mary published joint work with Phil? ?- mary[jointWorks@phil ->> Z] Sintaxe de F-logic Alfabeto de F-logic: Conjunto de Símbolos de funções (F) Conjunto Símbolos de predicados (P) Variáveis (V) Distincao entre P, F e V seguindo mesmas convencoes de que Prolog Termos ID Termos de 1ª ordem sobre F e V Nomes de objetos, métodos e classes Oid (Object Identifier): Termos ID sem variáveis Fórmulas atômicas átomos de 1ª ordem • ex, p(X1,...,Xn) O:C • O instância de C C :: D • C subclasse de D Hierarquia de classe e objetos não precisa ser um reticulado Sintaxe de F-logic: metodos e assinaturas Fórmulas atômicas (cont.) O[M->R0] • Método escalar M(O) = R0 O[M->>{R1, ..., Rn}] • Método multivalorado M O[M@(Arg1, ..., ArgN) -> R0] • Método parametrizado C[M=>T] • Assinatura. • M aplicado a objetos da classe C deve retornar objeto de classe T C[M=>>T] • Assinatura do método M, multivalorado. F-átomos e F-moléculas F-átomos • Representam exatamente uma propriedade de um objeto, tal como uma relação de classe ou definição de método isaac:man. isaac[father->abraham]. isaac[son->>{jacob}]. isaac[son->>{esau}]. F-moléculas • F-átomos podem ser aninhado em F-moléculas C::D ou O:C, onde C, D e O são termos-id. Uma molécula da forma O[lista de métodos separadas por ;]. Ex.: isaac:man[father->abraham; son->>{jacob, esau}] Predicados, Átomos-P e Moléculas-P Átomo-P: predicado com termos-id como argumentos. • father(isaac, abraham). • woman(rebekah). • married(isaac, rebekah). Molécula-P: predicado com átomos-F ou moléculas-F aninhado nos seus argumentos. married(isaac[father->abraham], rebekah:woman). Aninhamento inverso proibido: predicados não podem ser aninhados em átomos-F ou moléculas-F. Átomos e Moléculas (F e P) representam os fatos Banco de dados extensional Expressões de Caminho Facilidade sintática da linguagem, permitindo acesso elegante a objetos através de métodos de outros objetos. • O.M O[M->Ro] • O..M O[M->>{Ri}] Presente em outras linguagems • Ex.: cars = john.cars(); • Normalmente só é possível uma dimensão E se quiséssemos or carros vermelhos fabricados em 1998 que John possui? Expressoes de FLORID e FLORA permiten: • caminhar ao longo de 2 dimensões: • referenciar propriedades dos objetos no caminho, sem sair dele. Expressões de Caminho Exemplo %% Declaração da hierarquia person :: object. company :: object. john:employee. bob:person. employee :: person. manager :: employee. vehicle :: object[color*->black; produced*=>europe]. germany : europe. italy : europe. ferrari :: vehicle[color*->red; produced*->italy]. bmw :: vehicle[produced*->germany]. mercedes :: vehicle[produced*->germany]. audi :: vehicle[produced*->germany]. porsche :: vehicle[produced*->germany]. f50 : ferrari. boxsterS : porsche. a6 : audi. z8 : bmw. c280 : mercedes. Expressões de Caminho Exemplo (cont.) Numa linguagem do tipo SQL: SELECT X, Y %% Fatos FROM X in{c280, employee karl:employee[vehicles->> a6, f50, boxterS}; worksFor->siemens]. FROM Y in X.vehicles jamesbond:person[vehicles->>z8]. FROM Z in europe siemens:company[country WHERE X.worksFor.president -> germany; = X president AND Y.color -> karl]. = black X[self->X]. AND Y.produced = Z %% Consulta X:employee[worksFor -> _[president -> X]] ..vehicles[color->black; produced->_:europe; self->Z]. Negação em FLORA Negação através de “well-founded semantics”, implementada no XSB Especificada através do operador tnot Atualmente, tnot só pode ser aplicado a predicados Prolog (não pode ser usado com moléculas-F) :- table aux/1. aux(X, Y) :- a[m->>X; a->Y]. d[f->Z] :- e[w->Z; v->f(X,Y)], tnot(aux(X, Y)). Restrição devido ao sistema XSB • Todas as variáveis em predicados negados têm que ser instanciadas antes da chamada a tnot. Herança Tipos • Herança Estrutural Propagação das restrições de tipos de métodos (assinaturas) de uma superclasse para suas subclasses. student::person. person[name=>string]. ?- student[name => X] X = string. • Herança Comportamental Propagação do resultado da aplicação de um método de uma classe para suas instâncias e subclasses Métodos herdáveis são indicados por *-> e *->> Permite overriding Não monotônica Herança Comportamental Exemplo de comportamento não-monotônico elephant[color *-> gray; group *-> mammal]. royalElephant :: elephant. clyde : royalElephant. ?- clyde[color->X]. X/gray royalElephant[color *-> white]. ?- clyde[color->X]. X/white Herança Comportamental Caso mais complexos envolvem herança múltipla ou herança junto com dedução Exemplo: b[m *->> c]. a : b. a [m ->> d] :- a[m ->> c]. • Podemos deduzir que a[m->{c,d}] • Não podemos deduzir nada • F-logic recomenda a 1ª interpretação; FLORA utiliza a 2ª a 1ª é muito difícil de implementar utilizando-se um mecanismo de dedução top-down. Metaprogramação Sintaxe de F-logic permite metaprogramação naturalmente %% ?%% ?- Todas as classes que John é membro john : X. Todas as superclasses de student student :: X Metavariável: pode ser instanciada com métodos de qualquer aridade • Sintaxe: @M (M segue a sintaxe de nome de variável) • =.. é usado para transformar Metavariáveis em uma lista contendo o nome do métodos e seus argumentos (bidirecional) • @M representa um método (não um objeto) não pode ser passada diretamente como argumento para predicados e métodos Metaprogramação: exemplos Exemplo1: Copia os métodos de aridade 2 de o1 para o2 :- import length/2 from basics. o1[m1@(a1) -> r1]. o1[m2@(b1, b2) -> r2]. o1[m3 -> r3]. o1[m4@(c1, c2, c3) -> r4]. o2[@M -> R] :- o1[@M -> R], @M =..[Mth|Args], length(Args, 2). Execução ?- o2[@M -> R]. @M = m2@(b1, b2) R = r2 Yes. Exemplo2: Usando =.. para passar Metavariáveis como argumentos ?- mary[@Met -> V], @Meth =.. Param, foo(Param). foo(P) :- @M =.. P, abc[@M ->> 123]. Verificação de tipos FLORA não automaticamente verifica conformidade das instâncias e sub-classes com as assinaturas de classes. Metaprogramação permite implementar essa verificação em poucas regras scalarTypeIncorrect(O, M, R) :- O[X -> R], O:C, C[X=>D], tnot(R:D). ?- scalarTypeIncorrect(obj, method, Result). Útil para checar dados semi-estruturados. Comparações: exemplo dos estudantes/cursos Tabelas Name Joe Doe Jim Jones Jim Black student Major cs cs ee Year senior junior junior Name Joe Doe Jim Jones Jim Jones Jim Black Jim Black took Course cs123 cs101 cs143 cs143 cs101 Grade 2.7 3.0 3.3 3.3 2.7 Consultas • Nome dos estudantes junior que fizeram os cursos cs101 e cs143 • Nome e nota dos estudantes junior que fizeram o curso cs131 nota maior que 3.0 FLORA Definição joedoe:student[name->”Joe Doe”; major->cs; year->senior; took->>{[cs123, 2.7]}]. jimjones:student[name->”Jim Jones”; major->cs; year->junior; took->>{[cs101, 3.0], [cs143, 3.3]}]. jimblack:student[name->”Jim Black”; major->ee; year->junior; took->>{[cs143, 3.3], [cs101, 2.7])]. Consultas _:student[name->X; took->>{[cs143, _], [cs101, _]}]. _:student[name->X; year->junior; took->>[cs131, Y]], Y > 3.0. DATALOG Definição student(‘Joe Doe’, cs, senior). student(‘Jim Jones’, cs, junior). student(‘Jim Black’, ee, junior). took(‘Joe Doe’, cs123, 2.7). took(‘Jim Jones’, cs101, 3.0). took(‘Jim Jones’, cs143, 3.3). took(‘Jim Black’, cs143, 3.3). took(‘Jim Black’, cs101, 2.7). Consultas student(Name, _, junior), took(Name, cs101, _), took(Name, cs143, _). took(Name, cs131, Grade), Grade > 3.0, student(Name, _, junior). SQL Definição • Criação das tabelas CREATE TABLE student (Name char(20), Major char(2), Year int); CREAT TABLE took (Name char(20), Course char(5), Grade decimal(2,1)); • Adição dos valores INSERT INTO student VALUES <tuplas>; INSERT INTO took VALUES <tuplas>; Consultas SELECT t.Name FROM took t, took u, student s WHERE t.Course = ‘cs101’ AND u.Course = ‘cs143’ AND t.Name = u.Name AND s.Year = ‘junior’ AND s.Name = t.Name SELECT t.Name, t.Grade FROM took t, student s WHERE t.Course = ‘cs131’ AND s.Year = ‘junior’ AND s.Name = t.Name AND s.Grade > 3.0 FLORA x LIFE Vantagens de FLORA sobre LIFE • distinção classe/objeto • herança (método herdável/não-herdável • atributo de classe • regra mólecula-F :mólecula-F; em life não há regra do tipo -term :- term, só pred(-term) :pred(-term) • Metaprogramação • Integração quase completa com o XSB e seus módulos Vantagens de LIFE sobre FLORA • interface x-windows built-in • paradigma funcional (conhecimento inerentemente procedimental) • sem limitação sobre regras recursivas e ocorrência de variáveis livres (fatos universais) • programação por restrições • poderosa DCG integrada