Fórum Campo primario sem ser unique #40320
24/11/2003
0
Grato pela Atenção
Gandalf
Curtir tópico
+ 0Posts
24/11/2003
Afarias
A condição *fundamental* para uma chave primária é ser ÚNICO!! -- não teria sentido um CADASTRO NACIONAL DE PESSOA FÍSICA (CPF) se pudesse haver duas pessoas com o mesmo número -- então, quando vc enviasse sua declaração de imposto de renda, como o leão ia saber quem é vc???
T+
Gostei + 0
25/11/2003
Gandalf
No IBOConsole é so ir em Unique Constraints e remover alinha correspondente.
Gostei + 0
25/11/2003
Afarias
|cadastrar as operaões e o operador não faz tudo de uma vez.
foi só um exemplo! :roll:
|No IBOConsole é so ir em Unique Constraints e remover alinha
|correspondente.
pode até ser q vc consiga realmente ´driblar´ o banco removendo o índice/contraint único(a) criado como suporte a chave primária (o q seria uma falha/bug do IB possivelmente corrigida em versões futuras e muito provavelmente não existente em muitos outros bancos)
Isso -- se realmente for possível -- não quer dizer que esteja certo! Fazer mau uso da ferramenta ou dos conceitos base de modelagem de dados pode tornar seu sistema uma fonte de problemas no futuro.
Só minha opnião.!
T+
Gostei + 0
25/11/2003
Gandalf
se existem problemas em que o campo primario tem de ser repetido, isso não pode ser um bug, ou não deve ser tratado com um bug, ja que existe a necessidade em certas aplicações de compo primario ser repetido.
na minha aplicação o campo ´operacao´ e o mais importante. poderia ter colocado ele como não primario mas os demais campos (coisas do tipo data, inicio, termino) pode acontecer de vir repetido tbm.
tbm é só uma opinião.
abraços...
Gostei + 0
25/11/2003
Afarias
Sim, mas é necessário conhecê-lo. Um alicate de crimpar (cabos de rede) será muito pouco útil para cortar fios elétricos.
|se existem problemas em que o campo primario tem de ser repetido,
|isso não pode ser um bug, ou não deve ser tratado com um bug, ja que
|existe a necessidade em certas aplicações de compo primario ser
|repetido.
Isso não existe!!! Se um campo tem de ser repetido então ele não deve ser CHAVE PRIMÁRIA! *não é sua natureza* -- A questão ai é entender os conceitos.
|na minha aplicação o campo ´operacao´ e o mais importante. poderia ter
|colocado ele como não primario mas os demais campos (coisas do tipo
|data, inicio, termino) pode acontecer de vir repetido tbm.
Ser o mais importante não é ser chave primária. A chave primária em um banco de dados relacional deve identificar únicamente cada tupla (linha).
Se vc pode ter vários registros de mesma operação está claro q esta não é uma chave primária!
No seu caso, vc poderia criar um campo alimentado por um generator para ser sua chave primária -- este campo não tem q ter qualquer ´função de negócio´ (isso é normal e tb uma boa prática) -- servirá ´apenas´ para identificar exclusivamente cada registro!!
Aqui já não é questão de opnião. Se vc não possuir uma chave primária (de verdade) NÃO conseguirá editar um ÚNICO registro (pelo menos com facilidade) -- e não poderá garantir que as operações nesta tabela sejam corretas.
T+
Gostei + 0
25/11/2003
Gandalf
o problema e que qualquer consulta que eu fizer no meu banco de dados tera de ser feita por operação, data, refulgo, etc. não tenho a necessidade de diferenciar campos, como na tebela de componentes onde cada uma tem um codigo especifico, com isso um campo sequencial nao me sera util. pos isso perguntei sobre o campo não ser unique. talvez isso me gere problemas no futuro.
Gostei + 0
25/11/2003
Gandalf
quando a operação e concluida preciso somar as peças produzidas e inserir no campo de uma outra tabela. o problema e que começam uma operação sem ter concluida a anterior entao os dados ficam espalhados:
operação 10 quantidade X
operação 10 quantidade X
operação 20 quantidade X
operação 30 quantidade X
operação 20 quantidade X
operação 10 quantidade X
etc;
como vou fazer para ele somar as quantidades de peças de determinada operação.
Gostei + 0
25/11/2003
Afarias
where operacao = 10;
T+
Gostei + 0
25/11/2003
Gandalf
isso eu tava ligado, mas como eu coloco isso em uma variavel?
desculpe a chatiação
Gostei + 0
25/11/2003
Gandalf
Gostei + 0
25/11/2003
Afarias
no INTERBASE (SP/Trigger) ::
select sum(quantidade) from sua_tabela
where operacao = 10
into :sua_variavel;
no Delphi (seno o SQL de um componente xxQuery um, o acima) ::
xxQuery1.Open;
sua_variavel := xxQuery1.Fields[0].AsInteger; // ou AsFloat, ...
T+
Gostei + 0
25/11/2003
Gandalf
não deu certo
se vc poder me responder.
valeu
Gostei + 0
25/11/2003
Afarias
??
veja minha resposta anterior. espero q ajude.
T+
Gostei + 0
25/11/2003
Gandalf
valeu
Gostei + 0
25/11/2003
Gandalf
como eu faço para passar como paramentro o codigo sql do componente IBQuery?
Grato pela GRANDE atenção;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)