ajuda trigger

PostgreSQL

18/06/2014

Preciso criar uma trigger para realizar algumas validações nos registros de hospedagem de um hotel utilizando as seguintes tabelas:
-Reserva (codreserva, codcliente, codquarto, dtreserva, dthospedagem, qtdereservaadulto, qtdereservacrianca, qtdediareserva, vlpagoreserva, codtppagamento)
-Hospedagem (codhospedagem, codcliente, codreserva, codquarto, dthospedagem, qtdehospadulto, qtdehospcrianca, qtdediaria, dtcheckin, dtcheckout, vlhospedagem, vldesconto, vltotalpago, codtppagamento)

Preciso fazer o que está citado abaixo:
• Controlar para que não possa ser vinculada a hospedagem a uma reserva que não existe;
• Controlar para que não seja vinculada uma mesma reserva a duas hospedagens diferentes, ou seja, cada reserva só pode ser relacionada uma vez aos registros de hospedagens;

Alguém poderia me dar uma dica de como fazer isto.

Obrigado!
Samuel Campanella

Samuel Campanella

Curtidas 0

Melhor post

Ronaldo Lanhellas

Ronaldo Lanhellas

07/07/2014

Bom, em ambos os casos você consegue resolver apenas aplicando conceitos nativos do SGBD:

1- Controlar para que não possa ser vinculada a hospedagem a uma reserva que não existe;
Aqui você pode transformar o campo "codreserva" da tabela Hospedagem para chave estrangeira, e assim o próprio SGBD se encarregará de não permitir associações erradas.

2- Controlar para que não seja vinculada uma mesma reserva a duas hospedagens diferentes, ou seja, cada reserva só pode ser relacionada uma vez aos registros de hospedagens;
No mesmo campo "codreserva" da tabela Hospedagem, você pode colocar como "UNIQUE KEY" e assim você garante que essa reserva só aparecerá 1 vez.

Esqueça implementações de funções e triggers para fazer isso, use os princípios já existentes no SGBD.
GOSTEI 1

Mais Respostas

Marisiana Battistella

Marisiana Battistella

18/06/2014

• Controlar para que não possa ser vinculada a hospedagem a uma reserva que não existe;

Nesse caso, precisa fazer um SELECT verificando se a reserva que está sendo passada como parâmetro já está cadastrada...

• Controlar para que não seja vinculada uma mesma reserva a duas hospedagens diferentes, ou seja, cada reserva só pode ser relacionada uma vez aos registros de hospedagens;

Nesse caso pode ser criado um UNIQUE INDEX para garantir que não haja a repetição de hospedagens na tabela que armazena as reservas.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

18/06/2014

Sobre índices no PostgreSQL: [url]http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/DDL/%C3%8Dndices,_Tipos_de_Dados_e_Integridade_Referencial[/url]
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

18/06/2014

1- Controlar para que não possa ser vinculada a hospedagem a uma reserva que não existe;
Aqui você pode transformar o campo "codreserva" da tabela Hospedagem para chave estrangeira, e assim o próprio SGBD se encarregará de não permitir associações erradas.


Tens razão Ronaldo!
Revi minha resposta e devo ter pensado na aplicação na hora que respondi ...
Obrigada por contribuir com sua resposta!!
Me deu a chance de avaliar o que eu tinha respondido...
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

18/06/2014

Acontece. As vezes nós pensamos no mais difícil mas a solução é mais simples do que imaginamos. :D
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

18/06/2014

Verdade!
Como diz meu chefe: "Às vezes, tem que sair do fusca e entrar de novo pra conseguir encontrar a melhor solução." =D
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

18/06/2014

Verdade!
Como diz meu chefe: "Às vezes, tem que sair do fusca e entrar de novo pra conseguir encontrar a melhor solução." =D


Hahah, essa eu não conhecia.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

18/06/2014

Pérolas da TI!! =D
GOSTEI 1
POSTAR