Jump to content


- - - - -

Discussão Sobre Bd










3 respostas a este tópico

#1 Paulo Gurgel

    Já esvaziou sua xícara hoje?

  • (*)Insigne
  • 10498 posts
  • Você é Humano?:Sim
  • Sexo:Masculino
  • Estado:São Paulo

Adicionado 18 March 2010 - 01:27 PM

Pessoal, fiquei em dúvida de onde colocar este tópico. É um assunto de interesse do pessoal de todas as linguagens de programação e de todos os SGBDs. Pensei que talvez devessemos ter uma seção extra para programação e banco de dados independente de linguagem e fica aí uma sugestão.

Seguinte, vou colocar uma modelagem problema aqui:

Temos uma tabela (tipo entidade) cuja estrutura contem as seguintes colunas (campos) e alguns registros (tuplas) preenchidos de exemplo:
Classe      Sequencial
---------------------------------
Azul        0001
Azul        0002
Verde       0001
Verde       0002
Verde       0003
Vermelho    0001
Vermelho    0002
Vermelho    0003

Veja que este simples exemplo abstrai problemas especificos que podem exigir situação similar. Então temos o caso de um par de campos que formam uma identidade, talvez chave primária composta, onde a classe ou categoria é um campo que vem do problema e temos um campo sequencial... Vamos lá, se tivessemos uma classe só poderiamos usar um campo auto incremento, ou sequences/generators... o problema é que esse campo precisará ser sequencial por classe.

Podemos resolver este problema com diversas abordagens, me ocorreu 4 até o momento. Select Max / Multiplos Generators-sequences / Um generator modificado conforme a necessidade / uma tabela para controlar os incrementos. Não vou dar todas as informações sobre essas soluções pois este modelo deve ser também um desafio... mas devo colocar que as soluções devem ser comparadas quanto a velocidade, custo de implementação, custo de manutenção e principalmente, quanto a concorrência.

No seu SGBD preferido, como você resolve(ria) este tipo de situação? O porque você escolhe essa abordagem? É essa a discussão que eu quero propor.

Finalizo com uma pergunta. Seu SGBD tem algum recurso legal pra isso?
Eu gostaria do seguinte:

Ex com Oracle:
SEQ_CORES.NEXTVAL_FOR('Verde'); // é como se fosse um vetor de geradores, mas DDL é uma instrução só... DML para adicionar classes no gerador :)

Ex com Firebird/Interbase
GEN_ID(GERA_CORES, 1, 'Verde');

Bons estudos ;)

#2 nebrio

    Colaborador

  • (*)Insigne
  • 910 posts
  • Você é Humano?:Sim
  • Sexo:Masculino
  • Estado:Other Countries

Adicionado 19 March 2010 - 03:31 PM

Paulo,
Não sei se entendi direito, o objetivo é incrementar de acordo com a classe, correto?

se fizer um select + ou - assim:

select max(sequencial) as sequencia from TABELA where classe =:parametro

nesse caso passariamos o parametro desejado e incrementariamos 1 no resultado

isso pode ser via procedimento

Att,

nebrio

#3 Bruno Faria

    Moderador

  • Moderador
  • 829 posts
  • Estado:Minas Gerais

Adicionado 19 March 2010 - 03:40 PM

Fico com a sugestão do nebrio

ou então montaria uma tabela de "generator" que conteria a cor e o maior valor já definido para o mesmo. Se não existisse o valor, daria um insert e retornaria 1.

O problema é que ambas soluções não são válidas para concorrência...

To perdido... hehe

Editado por Bruno Faria, 19 March 2010 - 03:42 PM.


#4 Paulo Gurgel

    Já esvaziou sua xícara hoje?

  • (*)Insigne
  • 10498 posts
  • Você é Humano?:Sim
  • Sexo:Masculino
  • Estado:São Paulo

Adicionado 22 March 2010 - 10:19 PM

Colegas, concordo com vocês que seja uma solução simples, mas o problema é justamente este.
Concorrencia!

Como garantir dentro de um conjunto de operações a consistencia dessas informações num ambiente concorrente?
Essa é a principal questão!

[]'s





1 usuário(s) esta(ão) lendo este tópico

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)