banco de dados com objetos jacques robin cin-ufpe

35
Banco de Dados com Objetos Banco de Dados com Objetos Jacques Robin CIn-UFPE

Upload: internet

Post on 17-Apr-2015

118 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Banco de Dados com ObjetosBanco de Dados com Objetos

Jacques RobinCIn-UFPE

Page 2: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Banco de dados com objetos: Banco de dados com objetos: diversidade dos modelosdiversidade dos modelos

Modelo puramente orientado a objetos (OO), ex., O2

Modelo objeto-relacional (OR), ex., SQL3 Modelo funcional orientado a objeto (FOO), ex, FQL Modelo ativo orientado a objetos (AOO), ex., Chimera Modelo dedutivo orientado a objetos (DOO), ex., F-Logic Modelo com restrições e objetos (COO), ex., C3

Modelo de componentes distribuídos orientado a objetos (DOOC), ex., CORBA

imperativo

procedimental

funcional lógico por restrições

declarativo

relacional

objeto C3F-Logic

SQL92

FQL

Datalog

SLQ99

O2

DISCO

dados

comportamentos

Page 3: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Orientação objetos para BD: motivaçãoOrientação objetos para BD: motivação

Uniformidade: • codificar lógica da aplicação e o acesso aos dados no mesmo

paradigma (impedance mismatch) Completude computacional:

• embutir no BD comportamentos ligados aos dados Expressividade da modelagem:

• estruturas complexas, recursivas e heterogêneas Modularidade e reuso

• hierarquia de classes com herança e encapsulamento permite prototipagem, personalização e extensão rápida

Integração em sistemas de componentes distribuídos Novas aplicações de BD:

• CAD/CAM, CASE, GIS, gerenciamento de workflows, groupware, bibliotecas digitais multimídia, comercio eletrónico, etc.

Page 4: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Serviços requeridos de um BDOOServiços requeridos de um BDOOOrientação a objetos Identificação única Encapsulamento de estado e

comportamento Construtores de estruturas

complexas ortogonais e extensíveis Hierarquia de classes (esquema)

com herança de estado e comportamento

Estado inicial e comportamento default

Sobrescrita, sobrecarga e ligação dinâmica

Completude computacional Restrições, verificação e inferência

de tipos Herança múltipla Acesso completo a recursos Gerenciamento de versões

Banco de dados Persistência Otimização de acesso a

memória segundaria Acesso concorrente Recuperação:

• terminação, exceções, transações

Linguagem de manipulação: • conciso, intuitivo, declarativo,

interpretado, otimizável, independente da aplicação, formalmente bem fundamentado

Visões e dados derivados Restrições de integridades Manipulação dinâmica de

esquema Utilitários administrativos

Page 5: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Modelos puramente orientado a objetosModelos puramente orientado a objetos

Extensões de LPOO para serviços de BD: resolvem o “impedance mismatch” (com Java, C++, Smalltalk)- nenhum já fornece leque de serviços suficiente para constituir

um autêntico SGBD (em geral apenas persistência e concorrência)

Implementações do padrão ODMG:+ cobrem maioria dos serviços obrigatórios de BDOO- sintaxe: consultas SQL, definições SQL ( CORBA)- semântica: nada a ver com SQL, e de fato sem definição

precisa- sem fundamentação nos princípios de engenharia de software- “padrão” comercial, ainda imaturo, e sem apoio dos gigantes+ cada vez mais usadas para aplicações avançadas

Page 6: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Características de OCaracterísticas de O22

Implementação de ODMG bastante completa e divulgada

Tipos primitivos: booleano, caráter, inteiro, real, string

Tipos compostos: construtores • ortgonais e recursivos de tupla,

lista, bag e conjunto• aplicados a tipos primitivos

e/ou recursivamente classes definidas pelo usuário

Consultas: via O2SQL Classes:

• definições de novos tipos compostos e assinaturas de métodos

• herança múltipla de tipos e métodos com sobrescrita, sobrecarga e ligação dinámica

Métodos:• implementações desligadas

das suas assinaturas

• ou em O2C, subconjunto de C estendido para tipos do O2

• ou em LPOO ligado (Java, C++, Smalltalk) via interface string

Encapsulamento:• por default métodos privados• atributos acessíveis apenas via

métodos de acesso get e set• podem ser declarados públicos

Objetos: • id única• persistente ou transitório• persistência definida por

alcançabilidade

Page 7: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Estudo de caso: Estudo de caso: o BD acadêmicoo BD acadêmicoRequisitos em linguagem naturalRequisitos em linguagem natural

Esquema:1. Uma pessoa tem um nome e uma data de

nascimento.2. Um departamento tem um nome e

empregados, que podem ser professores, assistentes ou chefe.

3. Uma publicação tem um nome e um conjunto de autores.

4. Um empregado é uma pessoa que trabalha em um departamento por um salário.

5. Um professor é um empregado de meia idade, que produz publicações, ganha na media $50,000 por ano é tem algum diploma, geralmente um doutorado.

6. Professores e assistentes produzem publicações.

7. Alguém é considerado de meia idade entre 30 e 60 anos.

8. O chefe de um departamento tem que ser um professor.

Dados:1. Bob tem 40 anos e é o chefe do

departamento de informática. 2. John e Sally são assistentes do

departamento de informática.3. Mary é mestre e professora no

departamento de informática. 4. Mary publicou com seu chefe e com John e

Sally um artigo sobre F-Logic no JACM.5. Phil é um professor no departamento de

informática e publicou com Bob e Mary, um artigo sobre Flora no CACM.

Consultas:1. Quem são os empregados do

departamento de informática de meia idade que são seus próprio chefe?

2. Quem publicou com Mary no JACM?3. Onde Mary publicou junto com Phil?

Page 8: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: modelo lógico ERBD acadêmico: modelo lógico ER

Page 9: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: modelo físico ERBD acadêmico: modelo físico ER

Page 10: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: esquema em SQL92BD acadêmico: esquema em SQL92CREATE TABLE Pessoa ( Pessoa_CPF VARCHAR2(12) NOT NULL, Pessoa_Nome VARCHAR2(40) NULL, Pessoa_Nasc DATE NULL, PRIMARY KEY (Pessoa_CPF));

CREATE TABLE Depto ( Depto_CGC VARCHAR2(20) NOT NULL, Depto_Nome VARCHAR2(40) NULL, Chefe_CPF VARCHAR2(12) NULL, Chefe_Depto_CGC VARCHAR2(20) NOT NULL, PRIMARY KEY (Depto_CGC), FOREIGN KEY (Chefe_CPF, Chefe_Depto_CGC) REFERENCES Empreg(Pessoa_CPF, Depto_CGC));

CREATE TABLE Empreg_Publi ( Publi_Id VARCHAR2(20) NOT NULL, Depto_CGC VARCHAR2(20) NOT NULL, Pessoa_CPF VARCHAR2(12) NOT NULL, PRIMARY KEY (Publi_Id, Depto_CGC, Pessoa_CPF), FOREIGN KEY (Publi_Id) REFERENCES Publi, FOREIGN KEY (Depto_CGC, Pessoa_CPF) REFERENCES Empreg);

CREATE TABLE Empreg ( Depto_CGC VARCHAR2(20) NOT NULL, Pessoa_CPF VARCHAR2(12) NOT NULL, Empreg_Salario NUMBER(5,2) NULL, Empreg_Cargo VARCHAR2(20) NULL CHECK (Empreg_Cargo IN ('Professor',

'Assistente')), Empreg_Titulação VARCHAR2(10) NULL, PRIMARY KEY (Depto_CGC, Pessoa_CPF), FOREIGN KEY (Pessoa_CPF) REFERENCES Pessoa ON DELETE CASCADE, FOREIGN KEY (Depto_CGC) REFERENCES Depto);

CREATE TABLE Publi ( Publi_Id VARCHAR2(20) NOT NULL, Publi_Nome VARCHAR2(40) NULL, PRIMARY KEY (Publi_Id));

CREATE ASSERTION Restrição_Chefe CHECK (NOT EXISTS (SELECT * FROM Depto D, Empreg E, WHERE D.Chefe_CPF = E.Pessoa_CPF AND E.Cargo <> “Professor”));

Page 11: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: dados em SQL92BD acadêmico: dados em SQL92

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome,Pessoa_Nasc) VALUES (“025440874-55”,”Bob”, 01021960);

INSERT INTO Depto (Depto_CGC, Depto_Nome, Pessoa_CPF) VALUES (“001.002.33-44”,”DI”, “025440874-55”);

INSERT INTO Empreg (Depto_CGC , Pessoa_CPF, Empreg_Cargo, Empreg_Titulação, Empreg_Salario)

VALUES (“001.002.33-44”, “025440874-55”, “Professor”, “PhD”,5200);

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome) VALUES (“020440994-50”, ”John”);

INSERT INTO Empreg (Depto_CGC, Pessoa_CPF, Empreg_Cargo) VALUES (“001.002.33-44”, “020440994-50”, “Assist”);

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome) VALUES (“040450964-10”, ”Sally”);

INSERT INTO Empreg (Depto_CGC, Pessoa_CPF, Empreg_Cargo) VALUES (“001.002.33-44”, “040450964-10”, “Assist”);

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome) VALUES (“020453924-11”, ”Mary”);

INSERT INTO Empreg (Depto_CGC, Pessoa_CPF, Empreg_Cargo)

VALUES (“001.002.33-44”, “020453924-11”, “Prof”, “Mestre”,5100);

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome) VALUES (“044453424-41”, ”Phil”);

INSERT INTO Empreg (Depto_CGC, Pessoa_CPF, Empreg_Cargo)

VALUES (“001.002.33-44”, “044453424-41”, “Prof”, “Mestre”,5100);

INSERT INTO Publi (Publi_Id, Publi_Nome) VALUES (“0001”, “Flora - CACM”);

INSERT INTO Publi (Publi_Id, Publi_Nome) VALUES (“0002”, “F-Logic - JACM”);

INSERT INTO Empreg_Publi (Depto_CGC, Pessoa_CPF, Publi_Id) VALUES (“001.002.33-44”, “025440874-55”, “0001”);

INSERT INTO Empreg_Publi (Depto_CGC, Pessoa_CPF, Publi_Id) VALUES (“001.002.33-44”, “020440994-50”, “0001”);

INSERT INTO Empreg_Publi (Depto_CGC, Pessoa_CPF, Publi_Id) VALUES (“001.002.33-44”, “044453424-41”, “0002”);

INSERT INTO Empreg_Publi (Depto_CGC, Pessoa_CPF, Publi_Id) VALUES (“001.002.33-44”, “025440874-55”, “0002”);

Page 12: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: consultas em SQL92BD acadêmico: consultas em SQL92

SELECT Depto. Pessoa_CPF, Empreg.Pessoa_CPFFROM Depto, EmpregGROUP BY Depto. Pessoa_CPFWHERE Depto.nome = “DI” AND Depto.Pessoa_Nasc < 01011970 AND Depto.Pessoa_Nasc > 01011950;

SELECT Pessoa. Pessoa_NomeFROM PessoaWHERE Pessoa. Pessoa_CPF = (SELECT Empreg_Publi. Depto_CGC, Empreg_Publi. Pessoa_CPF, Empreg_Publi. Publi_Id FROM Empreg_Publi WHERE Empreg_Publi. Pessoa_CPF = “020453924-11”

AND Empreg_Publi. Pessoa_CPF = “0002”);

SELECT Publi. Publi _NomeFROM Publi WHERE Publi. Publi _ID = (SELECT Empreg_Publi. Publi_Id FROM Empreg_Publi WHERE Empreg_Publi. Pessoa_CPF = “020453924-

11” AND Empreg_Publi.Pessoa_CPF = “044453424-

41”);

Page 13: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: modelo UMLBD acadêmico: modelo UML

Pessoa

Empreg DeptoPublitrabalhan 1

chefia1 1

Prof

autorn n

Page 14: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: esquema em O2BD acadêmico: esquema em O2Esquema: definição das classesclass Pessoa tuple(nome: string, nasc: Date) method public idade: integer, meiaIdade:

booleanend;

class Empreg inherit Pessoa tuple(cargo: string, salario: real, titulação: string; depto: Depto, publi: set(Publi), method public setCargo(cargo: string)end;

class Prof inherit Empreg method public setCargo(cargo: string), getCargo: string, getSalario:

integer, getTitulacao: string, meiaIdade:

stringend;

class Depto tuple(nome: string, chefe :Prof, empregs: set(Empreg)) method public addEmpreg(empreg:

Empreg) end; class Publi tuple(nome: string, autores: set(Empreg))

end;

Page 15: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: esquema em OBD acadêmico: esquema em O22

Esquema: definição dos métodosmethod body idade: integer in Pessoa { integer i; Date d; d = today(); i = d->year - self->nasc->year; if (d->month < self->nasc->month) || ((d->month == self->nasc->month) && (d->day < self->nasc->dat))) --i; return i;}

method body meiaIdade: boolean in Pessoa { return (self->idade => 30 && self->idade <= 60);}

method setCargo(cargo: string):boolean in Prof { if cargo == “prof” then {self->cargo = cargo; return 1;} else return 0;}

method getCargo: string in Prof { if (self->cargo == null) then return “prof” else return self->cargo;}

method getSalario: integer in Prof { if (self->salario == null) then return 50,000 else return self->salario;}.

method getTitulaçãp: string in Prof { if (self->titulacao == null) then return”PhD.” else return self->titulação;}

method body MeiaIdade: boolean in Prof { return true};

method body addEmpreg(Empreg): boolean in Depto { if (Empreg->cargo == “prof”) || (Empreg->cargo == “assist”) then {self->empregados += set(Empreg); return true} else return false;}

Page 16: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: dados em OBD acadêmico: dados em O22

Dados: conjuntos de objetos persistentesname Empregs: set(Empreg); name Publis: set(Publi); name DI: DeptoDados: criação de objetos por instanciaçãorun body{ o2 Prof bob = new Prof; bob = tuple(nome: “Bob”, nasc: 01021960,

cargo: “prof”, depto: DI); Empregs += set(bob); DI -> empregs += set(bob) DI -> chefe = bob;

o2 Prof phil = new Prof; mary = tuple(nome: “Phil”, cargo: “prof”, depto: DI); Empregs += set(phil); DI -> empregs += set(phil)

o2 Prof mary = new Prof; mary = tuple(nome: “Mary”, titulação: “mestre”; cargo: “prof”, depto: DI); Empregs += set(mary); DI -> empregs += set(mary)

o2 Prof sally = new Empreg; mary = tuple(nome: “Sally”, cargo: “assist”, depto: DI); Empregs += set(sally); DI -> empregs += set(sally)

o2 Prof john = new Empreg; mary = tuple(nome: “John”, cargo: “assist”, depto: DI); Empregs += set(john); DI -> empregs += set(john)

o2 Publi jacm1 = new Publi;jacm1 = tuple(nome: “JACM”);jacm1->autores += set(phil);phil->publi += set(jacm1);jacm1->autores += set(bob);bob->publi += set(jacm1);jacm1->autores += set(mary);mary->publi += set(jacm1);

o2 Publi cacm1 = new Publi;cacm1 = tuple(nome: “CACM”);cacm1->autores += set(mary);mary->publi += set(cacm1);cacm1->autores += set(bob);bob->publi += set(cacm1);cacm1->autores += set(sally);sally->publi += set(cacm1);cacm1->autores += set(john);sally->publi += set(cacm1);

Page 17: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: consultas em OBD acadêmico: consultas em O22

select e.nome from e in Empregswhere e.meiaIdade = 1 and e->Depto->chefe = e

select e.nomefrom e in Empregs, f in Empregs, p in e->Publi, q in f->Publiwhere f = mary and p = q and p->nome = “JACM”

select p.nomefrom p in Publis, e1 in p->autores, e2 in p->autoreswhere e1 = mary and e2 = phil

Page 18: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Características de SQL99Características de SQL99 Extensão de SQL92 aprovada fim 1999 por ISO e ANSI:

• Apesar de ainda chamar-se de SQL,• não é mais uma linguagem de consulta de SGBD relacional,

mas• uma linguagem de programação de aplicações de BD

integrando os modelos relacional, dedutivo, ativo e orientado a objetos

Objetivo:• Padronizar extensões proprietárias de SQL92 já implementadas

nos SGBDR comerciais recentes (Oracle, IBM, Sybase, Informix) Principais extensões:

• Modelo objeto-relacional • Completude computacional

via integração no padrão de SLQ/PSM (Persistent Stored Modules) uma linguagem de programação persistente inspirada de PASCAL

• Regras ativas (gatilhos) e dedutivas (visões recursivas)• Operador SIMILAR TO de casamento string / expressão regular

Page 19: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Regras dedutivas recursivas em SQL99Regras dedutivas recursivas em SQL99 Regras dedutivas recursivas:

• consultas recursivas via WITH RECURSIVE• visões recursivas via CREATE RECURSIVE VIEW

Exemplo:CREATE TABLE parent ( parent_CPF VARCHAR(20) NOT NULL, criança_CPF VARCHAR(20) NOT NULL, sexo_parent BOOLEAN, sexo_criança BOOLEAN);

CREATE RECURSIVE view ancestral(Ancestral,Descendente) AS SELECT Parent Filho FROM parent UNION SELECT a.Ancestral, p.Filho FROM ancestral a, parent p WHERE a.Descendente = p.Parent;SELECT * FROM ancestral WITH RECURSIVE ancestral(Ancestral,Descendente) AS (SELECT Parent Filho FROM parent UNION SELECT a.Ancestral, p.Filho FROM ancestral a, parent p WHERE a.Descendente = p.Parent) SELECT * FROM ancestral

Page 20: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Regras ativas em SQL99Regras ativas em SQL99 Regras ativas:

• Evento = modificação do BD (via UPDATE, INSERT, DELETE)• Condição = consulta (SELECT FROM WHERE) antes ou

depois do evento• Ação = modificação do BD

via operação de manipulação de dados (UPDATE, INSERT, DELETE)

ou via chamada de procedimento ou função SQL/PSM

Exemplo:CREATE TRIGGER log_atualização_salario BEFORE UPDATE OF salario ON empregs REFERENCING OLD ROW as antigo NEW ROW as novo FOR EACH ROW INSERT INTO tabela_de_log VALUES (CURRENT_USER, antigo.salario, novo.salario)

Page 21: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Orientação a objetos em SQL99Orientação a objetos em SQL99 Tipos primitivos:

• os SQL92 + booleano Tipos compostos:

• conjuntos de atributos• cada um de tipo primitivo ou

recursivamente composto Classes:

• definições de novos tipos compostos e assinaturas de métodos

Herança:• simples com sobrescrita,

sobrecarga e ligação dinámica

• classe instanciáveis ~ classes Java

• classes não instanciáveis ~ interface Java

Métodos:• implementações desligadas das

suas assinaturas• ou em SQL/PSM• ou em LPOO ligado (ex, Java) via

interface string (ex, JSQL) Encapsulamento:

• todos os atributos privados acessíveis apenas via métodos de acesso get e set fornecidas automaticamente pela declaração de um novo tipo composto

• todos os outros métodos são publicos

Objetos: • tabelas de novos tipo compostos• id única criada automaticamente• expressão de caminho com ->

Page 22: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: esquema em SQL99BD acadêmico: esquema em SQL99Esquema: definição das classescreate type pessoa as (nome varchar(20), nasc date) instanciable not final ref pessoa_id instance method idade returns int instance method meiaIdade returns boolean;

create type empreg under pessoa as (cargo varchar(20), salario real, titulação varchar(20), depto ref(depto), publi set(ref(publi)) instanciable not final ref empreg_id; create type prof under empreg as (cargo varchar(20) default professor, salario int default 50,000, titulação int default “PhD.”) instanciable not final ref prof_id instance method meiaIdade returns boolean;

create type publi as (nome varchar(20), autores

set(ref(empreg))) instanciable not final ref publi_id;

create type depto as(nome varchar(20), chefe ref(prof), empregs set(ref(empreg))) instanciable not final ref depto_id;

create table pessoas of pessoacreate table empregs of empregcreate table profs of profcreate table deptos of deptocreate table publis of publi

Page 23: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: esquema em SQL99BD acadêmico: esquema em SQL99

Esquema: restrições de integridadescreate assertion restrição_chefe check (not exists (select * from deptos d, empregs e, where d.chefe->cargo <> “professor”));

create assertion restrição_prof check (not exists (select * from profs p where p.cargo <>

“professor”));

Esquema: definição dos métodoscreate method idade of pessoa ? begin declare i; declare date d; set d = today(); set i = d.year - self.nasc.year; if (d.month < self.nasc.month) || ((d.month = self.nasc.month) && (d.day < self.nasc.dat))) then return i - 1; else return i; endif; end;

create method meiaIdade of pessoa return (self.idade => 30) && (self.idade <= 60);

Page 24: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: dados em SQL99BD acadêmico: dados em SQL99insert into profs(nome,nasc) values(“Bob”, 01021960) ;insert into deptos (nome, chefe) values (”DI”, select ref from profs where nome = “Bob”);insert into profs(depto) values (select ref from deptos where nome = “DI”); insert into empregs(nome,depto,cargo) values (”John”, select ref from deptos where nome = “DI”,”assistente”); insert into empregs(nome,depto,cargo) values (”Sally”, select ref from deptos where nome = “DI”,”assistente”);insert into profs(nome,depto,cargo,titulação) values (“Mary”, select ref from deptos where nome = “DI”, ”assistente”, “mestre”);insert into profs(nome,depto,cargo,titulação) values (“Phil”, select ref from deptos where nome = “DI”, ”professor”);update depto set empregs = select ref from profs where nome = “Bob” union select ref from empregs where nome = “Mary” union select ref from profs where nome = “Phil” union select ref from profs where nome = “John” union select ref from profs where nome = “Sally” where nome = “DI”); insert into publis(nome,autores) values (“Florid - CACM”, select ref from empregs where nome = “Phil” union select ref from profs where nome = “Bob” union select ref from profs where nome = “Mary”);insert into publis(nome,autores) values (“F-Logic - JACM”, select ref from empregs where nome = “Mary” union select ref from profs where nome = “Bob” union select ref from profs where nome = “John” union select ref from profs where nome = “Sally”);

Page 25: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: consultas em SQL99BD acadêmico: consultas em SQL99

select e.nome from empregswhere e.meiaIdade = true and e = e.depto->chefe;

select e.nome from empregswhere “JACM” in e.publis->nome and “Mary” in e.publis->autores-

>nome;

select p.nome from publiswhere “Mary” in p.autores->nome and “Phil” in p.autores->nome;

Page 26: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Aplicações e limitações Aplicações e limitações dos modelos OO e ORdos modelos OO e OR

Aplicações: Integração de BD em

sistemas maiores orientados a objetos

BD espaciais e GIS BD espaço-temporais BD multimídia BD distribuídas heterogêneas BD de workflows BD para CAD/CAM e CASE

BD OLTP clássica também, especialmente com SQL99

Limitações: Sem semântica formal

definida Sem capacidade built-in para

raciocínio Comportamentos

implementados procedimentalmente

Performance insuficiente para bases muito grandes (TB)

Metodologia de projetos de BD

Page 27: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Modelo OO x Modelo ORModelo OO x Modelo OR

Superficialmente muito convergente• ex, definição de classes em O2 e SQL99, consultas em O2SQL

e SQL99, métodos em O2C e SQL/PSM

Fisicamente muito diferente, com conseqüências de performance ainda não clara

SGBDOR implementados (ex, Oracle8i) com várias vantagens sobre SGBDOO implementados (ex, O2):• escalabilidade de espaço e concorrência

(ex, BD da Nasqad: 30,000 acessos concorrentes a TB de dados)

• declaratividade para criação e atualização de dados, restrições de integridades, comportamentos ativos e dedutivos (recursão, default)

• sem ponteiros (segurança contra hackers)• facilidade para embrulhar BD relacionais de legado

Page 28: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD dedutivo orientado a objetos: BD dedutivo orientado a objetos: motivaçãomotivação

Serviços ortogonais e qualidades complementarias: capacidade de inferência built-in (BDD +, BDOO -) declaratividade (BDD +, BDOO -) fundamentos formais (BDD +, BDOO -) integração com BD relacionais (BDD+, BDOO -) poder de modelagem (BDD -, BDOO +) metodologia de projeto (BDD -, BDO ok) extensibilidade (BDD -, BDO +) integração em sistemas maiores (BDD -, BDO +) divulgação e implementações comerciais (BDD -,

BDO +)

Page 29: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Serviços de um BD Serviços de um BD dedutivo orientado a objetosdedutivo orientado a objetos

Requisitos OO:•identidade de objetos•objetos complexos•classes•encapsulamento•herança•overriding, overloading e ligação dinâmica•extensibilidade

Requisitos Raciocínio:

•linguagem declarativa baseado na lógica•unificação de termos com variáveis

•mecanismo de dedução

•fundamentos formais

Requisitos BD:•dados persistentes•gerenciamento de grandes conjuntos de dados•gerenciamento de memória secundária•gerenciamento de transações•linguagem de consulta declarativa

BDDOOBDDOO

Page 30: Banco de Dados com Objetos Jacques Robin CIn-UFPE

Tipologia e implementações dos modelos Tipologia e implementações dos modelos dedutivos orientados a objetosdedutivos orientados a objetos

Extensões de modelo dedutivo com facilidades OO• extensões de Datalog (ConceptBase, Logres, Logidata+, ROL)• extensões de Prolog (Quixote)

Extensões de modelo OO com regras dedutivas (?) Extensões de SQL com objetos e regras dedutivas

(ESQL2) Acoplamento entre SGBDOO e SGBDD (Coral++, ROCK & ROLL, Chimera) Construção de uma lógica formal orientada a objetos,

seguida da sua implementação em um sistema (F-Logic, Florid, Flora e Orlog)

Page 31: Banco de Dados com Objetos Jacques Robin CIn-UFPE

F-Logic: serviços de orientação a objetosF-Logic: serviços de orientação a objetos

Fornecidos: Identificação única, inclusive

funcionais Construtores de estruturas

complexas ortogonais e extensíveis

Hierarquia de classes (esquema) com herança múltipla de estado e comportamento

Estado inicial e comportamento default

Sobrescrita, sobrecarga e ligação dinâmica

Restrições de tipos

Parcialmente fornecidos: Completude computacional

dependentemente da implementação

Verificação e inferência de tipos indiretamente via regras de ordem superior

Não fornecidos: Encapsulamento Acesso completo a recursos Gerenciamento de versões

Page 32: Banco de Dados com Objetos Jacques Robin CIn-UFPE

F-Logic: serviços de dedução e de BDF-Logic: serviços de dedução e de BD

Serviços de dedução: Fundamentação em uma teoria

da prova completa e correta Motor de inferência para regras

dedutivas com:• referências a objetos nas

premissas e conclusões• sintaxe de ordem superior• semântica da 1a ordem• unificação de descrições

parciais de objetosServiços de BD: Construtores de conjuntos com

semântica de inclusão Operadores de agregação Consultas devolvem todas as

respostas de uma vez

Falta: Atualizações declarativas Persistência Gerenciamento de grandes

conjuntos de dados Gerenciamento de memória

secundária Gerenciamento de transações

Page 33: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: em RelationlogBD acadêmico: em Relationlog

Esquema: titulacao(F,phd) :- trabalha(F,_,prof), not titulacao(F,ms).salario(P,50000) :- trabalha(F,_,prof), not salario(F,_).meiaIdade(F) :- idade(F,A), integer(A), A >= 30, A =< 60.meiaIdade(F) :- trabalha(F,_,prof).trabalha(B,D,prof) :- chefe(D,B), trabalha(E,D,prof).patrão(B,E) :- chefe(D,B), trabalha(E,D,_).Dados:idade(bob,40). trabalha(bob,di,prof).

chefe(di,bob).trabalha(john,di,assist). trabalha(sally,di,assist). titulacao(mary,ms). trabalha(mary,di,prof).trabalha(phil,di,prof).publi(jacm,{john,sally,mary,bob}).publi(cacm,{phil,mary,bob}).

Consultas:? meiaIdade(<B>), trabalha(<B>,di,_), patrão(<B>,<B>).B = {bob}.?- publi(jacm,<F,mary>), F \= mary.F = {bob}.?- publi(P,<phil,mary>).P = {cacm}.

Page 34: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: esquema e dados em F-BD acadêmico: esquema e dados em F-LogicLogic

Esquema: hierarquia de classesempreg::pessoa. prof::empreg. assist::empreg.Esquema: assinatura de classesdepto[nome => string; empregs =>> empreg; chefe => prof].pessoa[nome => string; nasc => data; idade

=> int].empreg[depto => depto; salario => int].publi[nome => string, autores =>>

{assist,prof}].prof[publi =>> publi; titulação *-> PhD; salario -> 50000].assist[publi =>> publi].data[ano=>int; mes=>int; dia=>int].Esquema: regras dedutivasD:data :- ... X:pessoa[idade -> I] :- ...meiaIdade(P) :- P:prof.meiaIdade(P) :- P.idade >= 30, P.idade <= 60.X:[jointPubli@Y->> P] :- X:{prof,assist}, Y:

{prof,assist}, X[publi ->> P], Y[publi ->>P].

Dadosbob:prof[nome -> “Bob”; nasc -> data[ano => 1960; mes => 01; dia => 02]; depto -> di, publi ->> {jacm,cacm}].mary:prof[nome -> “mary”; titulacao -> mestre depto => di, publi ->>

{jacm,cacm}]. phil:assist[nome -> “Phil”, depto => di, publi ->> {cacm}].john:assist[nome -> “John”, depto => di, publi ->> {jacm}].sally:assist[nome -> “Sally”, depto => di, publi ->> {jacm}].jacm:publi[nome -> “JACM”; autores ->> {bob, mary, john,

sally}].cacm:publi[nome -> “CAC”, autores ->> {bob, mary, phil}].

Page 35: Banco de Dados com Objetos Jacques Robin CIn-UFPE

BD acadêmico: consultas em F-LogicBD acadêmico: consultas em F-Logic

?- meiaIdade(E), E:empreg[depto -> di[chefe -> E]].E = bob.?- mary[jointPubli@E ->> jacm].E = bobE = johnE = sally?- mary[jointPubli@phil ->> P].P = cacm