[firebase-br] Chave primaria Guid

Carlos Wilson cwfsa1 em gmail.com
Terça Março 16 12:00:32 -03 2021


Não, não vou concatenar. Hoje Uso uma chave concatenada mas não tá sendo 
eficiente porque numa filial a pessoa acessa e cadastra pra outra. 
Exemplo minha chave era um char(13). Os dois primeiros digitos era a 
filial e o restante vinha de um generator, então ficava: 0100000004566

aí o que acontecia vamos dizer que na empresa 02 alguém logasse na 
empresa 01 pra fazer alguma coisa aí podia-se gravar o registro 
0100000004566, se tivesse feito pela empresa 02 seria 0200000004566.

tá virando uma maçaroca danada na hora da replicação. por isso o 
interesse de usar guid

[]'s
Carlos Wilson
Formosystem
Informática e Automação Comercial

Em 15/03/2021 10:24, Gladiston Santana via lista escreveu:
> Olá colega.
>
> Eu trabalho com sistemas multiempresa desde que me conheço por programador.
> O UUID lhe gera unicidade, mas não resolverá seu problema sozinho e pelo
> que entendi voce pretende colocar um prefixo ao UUID para a caracterização
> de filial, ok, não entrarei no mérito da questão, então que voce precisará
> será uma querie assim:
> (...)
>     qry.SQL.Clear;
>     qry.SQL.Add('select CAST(prefixo_empresa||GEN_UUID() as varchar(30)) as
> meu_id_unico from RDB$DATABASE');
>     //qry.SQL.Add('returning  meu_id_unico');
>     qry.Open;
>     Result := qry.FieldbyName('meu_id_unico').AsString;
>
> Só uma sugestão, ao concatenar você terá dificuldades de particionar seus
> dados mais tarde, este é um recurso desejável que alguns bancos de dados
> dão de criar um indice baseado em expressão para separar dados por empresa,
> ano, etc.... o que deixaria o banco de dados mais rapido porque faria
> operações com dados mais relevantes.
>
> Em sex., 12 de mar. de 2021 às 15:47, Carlos Wilson via lista <
> lista em firebase.com.br> escreveu:
>
>> Boa tarde a todos,
>>
>> Atravessei a madrugada pesquisando e não achei solução para o meu
>> problema. Utilizo o Unidac.
>>
>> Devido a tantos problemas com replicação e outros em sincronizar bancos
>> de várias filiais estou tentando migrar minhas PK para GUID
>>
>> depois de estudar em alguns lugares vi que a pk tem que ser criada como
>> Char(16) Octates. Dessa maneira a pk é gravada como bytes binarios e o
>> desempenho fica melhor ao indexar e usar como FK.
>>
>> No delphi fiz essa função para preenchimento da chave.
>>
>> function Tdm.IncUUID: TBytes;
>> var
>>     qry: TUniQuery;
>> begin
>>     qry := TUniQuery.Create(Self);
>>     qry.Connection := DBConn1;
>>     qry.SQL.Clear;
>>     qry.SQL.Add('select GEN_UUID() from RDB$DATABASE');
>>     qry.Open;
>>     Result := qry.Fields[0].AsBytes;
>>     qry.Free;
>> end;
>>
>> Ao fazer o append ele chama essa função e parece que está preenchendo.
>> porém ao dar um post, acontece a excessao:
>>
>> Could not convert variant of type (array byte) into type (integer).
>>
>> Atualizei o Unidac mas o erro persiste, mas não sei mais o que posso
>> fazer. Alguém, por favor, pode me dar uma luz?
>>
>> Grato.
>>
>> --
>> []'s
>> Carlos Wilson
>> Formosystem
>> Informática e Automação Comercial
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas:
>> http://www.firebase.com.br/pesquisa_lista.html
>>
>



Mais detalhes sobre a lista de discussão lista