Paulo,
> nos indicam onde podermamos acha mais informagues.
Vide e-mails anteriores (cetus-links.org eh legal)
> Cada entidade de um modelo relacional i na
> verdade, em um BD OO, definido como uma classe, implementada no caso em
> C++...
Nao entendi muito bem o que voce eles quiseram dizer com isso mas posso
tentar criar um exemplo em Java que exemplifique o paradigma de SGBD OO.
Um conceito basico para o entendimento de SGBDs OO eh o de "root", que
corresponde a um objeto que podemos pegar no banco a partir de um nome
(conceito similar a uma tabela de simbolos em qualquer linguagem de
programacao). Voce pode, por exemplo, criar um root que seja uma Vector,
onde voce ira armazenar seus objetos do tipo Pessoa e outro root (um
Vector ou outra estrutura de dados que melhor se adeque ao tipo de
acesso que voce fara) que armazenara os objetos do tipo Empresa.
No exemplo abaixo, ignorem os parametros que nao fazem sentido para
voces, nao vale a pena entrar em detalhes, ok?
Primeiramente, voce devera criar o banco de dados e os roots:
<snip>
Vector rootPessoas;
Vector rootEmpresas;
// cria banco de dados
Database db = Database.create("meuBancoDeDados", ALL_WRITE | ALL_READ);
// inicializa transacao
Transaction txn = Transaction.begin(UPDATE);
// cria roots (poderiam ser qualquer estrutura)
db.createRoot("pessoas", rootPessoas = new Vector());
db.createRoot("empresas", rootEmpresas = new Vector());
// finaliza transacao
txn.commit();
</snip>
No exemplo acima nos criamos um banco de dados e dois roots (do tipo
Vector). Podemos, agora, criar varias pessoas, associa-las a empresas e
armazenar tudo no banco de dados.
<snip>
Pessoa pessoa;
Empresa empresa;
// inicializa transacao
txn = Transaction.begin(UPDATE);
// cria 10 pessoas e as associa a empresas
for (int i = 0; i < 10; i++) {
pessoa = new Pessoa();
pessoa.setNome("pessoa-" + i);
empresa = new Empresa();
pessoa.setEmpresa(empresa);
// insere nos roots
rootPessoas.addElement(pessoa);
rootEmpresas.addElement(empresa);
}
// finaliza transacao
txn.commit();
</snip>
Ja temos um banco de dados criado e contendo varios objetos. Imagine
agora que no dia seguinte, queremos abrir o banco de dados e manipular
aqueles objetos que foram inseridos:
<snip>
Vector rootPessoa;
Vector rootEmpresa;
Pessoa p;
// abre banco de dados
Database db = Database.open("meuBancoDeDados", UPDATE);
Transaction txn = Transactin.begin(UPDATE);
// pega Vectors (roots) no banco de dados
rootPessoa = db.getRoot("pessoas");
rootEmpresa = db.getRoot("empresas");
// manipula banco de dados
for (int i = 0 ; i < rootPessoa.size() ; i++) {
p = (Pessoa)rootPessoa.get(i);
if (p.getNome().equals("pessoa-7")) {
p.getEmpresa().setNome("empresa-7");
}
}
txn.commit();
</snip>
No exemplo acima, mudamos o nome da empresa da "pessoa-7" para
"empresa-7". O que o banco faz eh marcar todos os objetos modificados
para poder salva-los quando invocarmos commit(). Perceba que nao
armazenamos os dados em sua forma nativa, sem a necessidade de fazermos
o mapeamento entre Java Objects e tabelas.
> Sendo assim temos que possuir um stimo hardware como servidor de Banco
> de Dados e uma largura de banda na rede que dj "conta do servigo". Ja que
> nada ou quase nada i processado no lado cliente (estagco). Nco acha?!
Ha duas coisas que devem ser consideradas neste caso. A granularidade de
bloqueio de dados (pagina ou objeto) e a capacidade de execucao de
queries no cliente ou no servidor. O primeiro ponto diz respeito `a
unidade de transferencia de dados do disco para a memoria principal. Um
"object server" bloqueia um objeto quando este eh requisitado e um "page
server" bloqueia toda a(s) pagina(s) na(s) qual(is) aquele objeto esta
armazenado. "Page servers" minimizam o trafego na rede pois o overhead
para a transferencia eh menor. Ha desvantagens que nao vem ao caso.
Em relacao ao local onde as consultas sao feitas, ha banco de dados que
transferem todos os dados necessarios para a consulta para o cliente.
Outros executam a consulta no servidor e retornam apenas seu resultado.
No primeiro caso, o trafego na rede eh maior mas o servidor fica mais
livre (fat clients). No segundo caso, o servidor pode ficar muito
carregado mas o trafego diminui (thin clients). Qual eh melhor? Depende
da situacao; voce pode ter 1) um servidor muito veloz, com muita memoria
e uma rede sobrecarregada ou 2) um servidor sobrecarregado por outras
aplicacoes, maquinas poderosas nos clietes e uma rede extremamente
confiavel.
O POET (www.poet.com) eh o SGBD OO que deixa mais clara sua forma de
trabalhar.
Eh isso ai. Espero ter ajudado.
Andre Mendonca
[EMAIL PROTECTED]
> Aguardarei, tambim, indicagues sobre o assunto. Ati mais!
>
> [ ]'s
>
> Paulo Correia
>
> "Josi Augusto Cintra" gravada:
>
> > ...nunca trabalhei com banco de dados OO e nco fago a menor idiia de
> > como eles funcionam.
>
> > O Andri recentemente mencionou alguns BD's tais como o POET, O JASMINE,
> > etc.
> > Esses bancos estco sendo efetivamente utilizados em projetos corporativos?
> > Estou interessado no assunto e agradeceria se me indicassem links com
> > tutoriais a respeito, pois tudo o que li ati agora ainda nco me livrou do
> > paradigma relacional.
> > Ati mais,
> > Augusto
>
> --------------------------- LISTA SOUJAVA ---------------------------
> http://www.soujava.org.br - Sociedade de Usuarios Java da Sucesu-SP
> [dzvidas mais comuns: http://www.soujava.org.br/faq.htm]
> [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
> ---------------------------------------------------------------------
--------------------------- LISTA SOUJAVA ---------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
[dúvidas mais comuns: http://www.soujava.org.br/faq.htm]
[para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
---------------------------------------------------------------------