bem pessoal, estou fazendo uma relação de cheques para um mercado, e preciso que o número da relação seja auto incremento, só que não quero que ele seja primary key, mas quando coloco como auto incremento, ele muda sozinho pra primary key, pois eu quero adicionar vários pagamentos para uma só relação, e se for PK ele nao vai aceita mais que um pagamento.
Alguem tem uma ideia de como posso fazer isso ?!
Considere o atributo auto incremental da sua classe como apenas um valor inteiro e escreva a lógica de incremento na sua classe, e não na definição da tabela no banco de dados ou na configuração do seu framework ORM caso esteja usando algum.
Se quiser, pode também criar uma view que sempre lhe retorne o maior valor para o dado campo na tabela e em seguida, ao persistir os seus valores, simplesmente incrementá-lo.
bom, creio que ele está mudando para auto incremento pq eu nao dexei nenhum campo como PK, pq todos os campos dessa tabela, poderão ter valores iguais, então pode ser esse o motivo que ele muda sozinho para PK.
eu gostaria de saber se posso fazer isso:
bom Dyego, dependendo do banco de dados, ao você mudar o tipo do campo para autoincremental, ele automaticamente transforma aquele em chave primária.
Por isto que eu falei pra você tratar o valor deste campo como se fosse um atributo qualquer do seu bean.
Com relação a ter mais de uma condição em um where, pode ter sim.
Quantas você quiser.
[quote]… mas quando coloco como auto incremento, ele muda sozinho pra primary key, pois eu quero adicionar vários pagamentos para uma só relação, e se for PK ele nao vai aceita mais que um pagamento.
Alguem tem uma ideia de como posso fazer isso ?!
[/quote]
Quando você fala vários pagamentos para uma relação você quer dizer para um cliente? Se é este o caso, acredito que você deve ter uma tabela de clientes e uma para pagamento. Na tabela cliente, deve ter uma chave primária e na de pagamentos uma chave estrangeira reportando para a tabela de clientes.
eu acho que, resolvendo este impasse fica mais fácil.
vamos exclarecer o seguinte:
tenho a tabela de empresa, para a qual será efetuada o pagamento.
digamos que o nome da empresa seja X e a relação seja 01.
podemos dizer também que a relação 01 seja do mês de janeiro.
então nessa relação eu quero gravar mais que um pagamento.
exemplo:
Empresa 01 > relação 01 > pgto 01, pgto 02 … pgto n;
Empresa 01 > relação 02 > pgto 01, pgto 02 … pgto n;
Empresa 01 > relação n > pgto 01, pgto 02 … pgto n;
Espero ter exemplificado bem oque estou querendo fazer.
Obrigado.
dyego
Bem, neste caso, acho que você deve ter três tabelas relacionadas entre si com relacionamento um para muitos.
tabelaClientes–>tabelaRelacoes–>tabelaPagamentos
A tabela de clientes contém, logicamente, dados dos clientes(e um campo ID que será chave primária). A tabela de relações contém uma chave estrangeira que será relacionada a chave primária cliente e uma chave primária para se relacionar aos pabamentos. Finalmente a tabela de pagamentos deverá ter uma chave estrangeira para se relacionar a chave primária da talela de relações.
Espero ter simplificado. Procura sobre relacionamentos de tabelas que você deve encontrar bons materiais.
pois eh…
antes eu tinha tentado criar umas chaves estrangeiras, mas tinha dado erro…
eu vou tentar fazer como vc disse, qlquer coisa se der erro novamente, eu posto ae
Obrigado
Dependendo do BD vc pode fazer este comando direto no SQl no Oracle funciona bem e não compromete performace…se voces usam no metodo e acham melhor…tudo bem…mas prefiro nos comando SQL… e se for chave estrangeira é impossivel de correr o risco de q seja deletado algum registro pois o BD reclama…
Inacio Alves creio que a sua solução dará certo cara ;]
mas tenho uma duvida, depois de criado as FK quando eu chamar no programa uma certa empresa ele vai puxa tbm a relação e os pagamentos, ou terei que fazer um select e talz no banco ???
PS: meu MySQL Front expirou, vc sabe outro programa pra mecher no banco ???
Desculpe pela demora na resposta, mas os dados não virãoi automaticamente não. Você precisará fazer quantas consultas forem as suas tabelas (no caso que citei acima, três), sendo que as consultas dependentes devem ser realizadas após as consultas principais.
Exemplo:
Você encontrou o cliente, então logo em seguida você faz uma consulta para buscar o pagamento baseado no codigo do cliente.
1º eu faço a consulta pelo cliente, como vc acabou de dizer;
2º ele vai carregar o cliente e juntamente com ele eu quero que carregue as relações de pagamento 01,02…n;
3º quando se clica em uma dessa relações abre outra tela mostrando os pagamentos dessa relação;
outra coisa, eu parei de mecher pois meu MySQL FRONT expirou, e não sei outro programa, para que eu possa manipular o banco, sem ser pelas linhas de comando do proprio MySQL.
1 e 2. Como eu já havia dito, na tabela de Relações deve ter uma chave estrangeira para a tabela cliente. Assim, depois de encontrado o cliente, faça uma busca na tabela de Relações onde o código do cliente (na tabela de relações) seja igual ao código do cliente encontrado (na tabela de clientes)
Acho que eles ainda fornecem o MySqlCC que é (ou pelo menos era quando eu baixei há um tempão atrás) uma interfaze gratuita e por tempo indeterminado.
A chave primária deve conter valores únicos e sob o seu controle. A lógica do auto-incremento dos cheques não está sob o seu controle, portanto, não utilize-a como chave primária. Use um campo seu, escondido, no sistema e deixe campos de negócio apenas como chaves estrangeiras. Aí sim, nesse campo, que você numera como quiser, use o auto-incremento do banco de dados, para fazer o trabalho de incremento para você.
Isso evita, no futuro, o seu cliente dizer: “Olha, o Beltrão assinou aí um documento e os números dos cheques agora vão zerar… mas não queremos perder os registros antigos, ok?” E isso ferrar com todo seu sistema.