Fórum Campo primario sem ser unique #40320

24/11/2003

0

como fazer para um campo primario não ser unique, isso é, receber dados repetidos.

Grato pela Atenção


Gandalf

Gandalf

Responder

Posts

24/11/2003

Afarias

*não* faz!!

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+


Responder

Gostei + 0

25/11/2003

Gandalf

bom não to fazendo um programa pra fazenda, e uma tabela que se cadastrar as operaões e o operador não faz tudo de uma vez.

No IBOConsole é so ir em Unique Constraints e remover alinha correspondente.


Responder

Gostei + 0

25/11/2003

Afarias

|bom não to fazendo um programa pra fazenda, e uma tabela que se
|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+


Responder

Gostei + 0

25/11/2003

Gandalf

mas o banco de dados não e pra te ajudar?
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...


Responder

Gostei + 0

25/11/2003

Afarias

|mas o banco de dados não e pra te ajudar?

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+


Responder

Gostei + 0

25/11/2003

Gandalf

vc tem razão!!!
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.


Responder

Gostei + 0

25/11/2003

Gandalf

ja que estamos neste debate me ajude aqui:

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.


Responder

Gostei + 0

25/11/2003

Afarias

select sum(quantidade) from sua_tabela
where operacao = 10;



T+


Responder

Gostei + 0

25/11/2003

Gandalf

valeu pela resposta
isso eu tava ligado, mas como eu coloco isso em uma variavel?

desculpe a chatiação


Responder

Gostei + 0

25/11/2003

Gandalf

valeu ja descobri!


Responder

Gostei + 0

25/11/2003

Afarias

uma variável ONDE???


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+


Responder

Gostei + 0

25/11/2003

Gandalf

não descobri não
não deu certo
se vc poder me responder.

valeu


Responder

Gostei + 0

25/11/2003

Afarias

|se vc poder me responder.

??

veja minha resposta anterior. espero q ajude.


T+


Responder

Gostei + 0

25/11/2003

Gandalf

agora como faço para passar nome da tabela e operacao como parametro?

valeu


Responder

Gostei + 0

25/11/2003

Gandalf

para facilitar:

como eu faço para passar como paramentro o codigo sql do componente IBQuery?

Grato pela GRANDE atenção;


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar