OID em debate

20 views
Skip to first unread message

sdw

unread,
Jan 10, 2007, 7:15:40 PM1/10/07
to tiOPF.br
Pessoal,

Achei interessante iniciar uma nova discução.
Achei muito leitura teórica sobre OIDs e sua importância para modelos
baseados em objetos.
Porém, relativo à técnicas de integração e mapeamento
objeto-relacional os materiais que achei acabam enveredando pelo campo
filosófico e ficam longe da prática.

Em resumo, descobri que existem dois tipos de OIDs quanto à unicidade
que proporcionam:
1) OID com unicidade à nível de tabela
2) OID com unicidade à nível global

Quanto à possibilidades, os OIDs podem ser de todos os tipos
primitivos (praticamente) e também de tipos especiais (formatos), como
GUID e UUID.
Estudei um pouco sobre o uso de OID do tipo GUID que são conjuntos de
caracteres gerados automagicamente e que possuem um comprimento fixo e
36 dígitos. Isso quer dizer que todos os OIDs que forem persistidos no
banco de dados deverão possuir um campo do tipo Caracter com 36
dígitos, sendo que estes seram sempre utilizados em sua totalidade.
Como uma das recomendações do mapeamento objeto-relacional é que os
OIDs passem a ser as chaves primárias das tabelas e que tabelas com
chaves compostas sejam modificadas de modo a possuirem um atributo OID
chave, temos que praticamente todas as tabelas do sistema terão um
atributo chave do tipo caracter de 36 dígitos.

Meu questionamento inicial está dirigido à performance oferecida por
uma abordagem desse tipo. Me pergunto como fica o desempenho de um SGBD
quando é necessário realizar pesquisas com relacionamentos complexos
entre 10 ou mais tabelas e que retornam grandes quantidades de dados,
visto que uma regra básica para a boa performance, que é a de usar
campos chave pequenos, é ignorada neste caso.

Segundo, que outras formas de geração de OIDs são admitidas pelo
tiOPF e como fica a manutenção destas? De que forma pode-se usar um
esquema parecido com chaves sequenciais (integer), na qual os OIDs
seriam numeros sequenciais iniciados em 1 para cada tabela? Qual
técnica oferece melhor relação manutenibilidade x desempenho?

Um abraço.

Message has been deleted
Message has been deleted
Message has been deleted

Diogo Augusto Pereira

unread,
Jan 12, 2007, 1:46:48 PM1/12/07
to tiOPF.br
Parece que a lista voltou ao normal agora, as mensagens voltaram a
aparecer na interface web.

Bruno, tu recebeu a minha resposta ao teu primeiro tópico sobre OIDs?

Se não, ela está aqui:
http://groups-beta.google.com/group/tiopf_br/browse_thread/thread/54d3efb5e4714e3d

bermudez

unread,
Feb 10, 2007, 8:15:47 AM2/10/07
to tiOPF.br
Aproveitando a deixa sobre OIDs resolvi entrar nesta lista que me
parece ser interessante. Estou começando a estudar este framework e
estou gostando...
Seguinte vamos dizer que eu tenho um banco de dados ja bem populado
( Firebird) e chaves primarias das tabelas são geradas atraves de
generators. Como ficaria esse lance de OID neste caso?

Precisaria de algo no tiopf que ao criar um novo objeto que fosse
persistir no banco buscasse o proximo valor do generator que eu
utilizo como chave. Como faria isso utilizando o tiopf ?


Diogo Augusto Pereira

unread,
Feb 11, 2007, 3:22:59 PM2/11/07
to tiOPF.br
On Feb 10, 10:15 am, "bermudez" <bermudez.an...@gmail.com> wrote:
> Aproveitando a deixa sobre OIDs resolvi entrar nesta lista que me
> parece ser interessante. Estou começando a estudar este framework e
> estou gostando...

Seja bem-vindo, o tiOPF é um OPF de muita qualidade e muito flexível,
existem N formas de trabalhar com ele.

> Seguinte vamos dizer que eu tenho um banco de dados ja bem populado
> ( Firebird) e chaves primarias das tabelas são geradas atraves de
> generators. Como ficaria esse lance de OID neste caso?
>
> Precisaria de algo no tiopf que ao criar um novo objeto que fosse
> persistir no banco buscasse o proximo valor do generator que eu
> utilizo como chave. Como faria isso utilizando o tiopf ?

Depende de como o OID será obtido, eu particularmente nunca usei OID
integer no tiOPF, mas é possível usar sim. Para isso tu terá que fazer
o seguinte;

- Deverá haver um único generator no banco de dados.
- A unit tiOIDInteger deverá estar na uses de alguma unit do projeto,
no dpr, por exemplo.
- Toda vez que uma classe precisa de um novo OID, um visitor é chamado
no método TNextOIDGeneratorInteger.NextOID da unit tiOIDInteger:
gTIOPFManager.VisitorManager.Execute(cNextOIDReadHigh,
FNextOIDData, ADatabaseName, APersistenceLayerName);
- Isso quer dizer que tu terá de criar um visitor para buscar o valor
do generator no banco, não testei, mas acho que ele deve do tipo
TVisOwnedQrySelect.
- Esse visitor deverá ser registrado da seguinte forma:
gTIOPFManager.RegisterVisitor(cNextOIDReadHigh,
TOID_Integer_Generator);
Onde o primeiro parâmetro é o grupo de visitors que a função
TNextOIDGeneratorInteger.NextOID utiliza e o segundo é o nome da
classe do visitor que busca o valor do generator no banco.

Reply all
Reply to author
Forward
0 new messages