Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera,
Estou desenvolvendo um sistema de reserva de equipamentos institucionais ex: Data Show , Caixa de som e etc...
Dessa forma me encontrei em uma situação bem difícil e gostaria de pedir a ajuda de vocês, pois estou á vários dias pensando na solução, mas sem sucesso :upset: .
Possuo uma tabela chamada Equipamentos
create table equipamentos(
id_equipamento INT NOT NULL PRIMARY KEY,
nome_equipamento VARCHAR(60)
)
E outra tabela chamado Reserva
create table reserva(
id_reserva INT NOT NULL PRIMARY KEY,
id_equipamento INT NOT NULL,
FOREIGN KEY(id_equipamento)references equipamento(id_equipamento)
);
No momento de reservar o equipamento estou enviando o id do equipamento para a tabela "Reserva" que possui todas as informações da reserva(id da reserva, nome do usuário, id do equipamento, e etc...). Até ai tudo bem, está tudo funcionando corretamente :).
O PROBLEMA
No momento de reservar deve haver a possibilidade do usuário reservar um ou mais equipamentos, ou seja, ele pode reservar um Data Show e uma Caixa de Som simultaneamente.
Com essa demanda eu não estou conseguindo pensar em uma maneira de fazer isso, pois na tabela "Reserva" eu possuo um campo id_equipamento que é foreign key da tabela de equipamentos(id_equipamentos é chave primária da tabela equipamentos).
O que eu devo fazer para registrar vários equipamentos(id_equipamento, nome do equipamento) na mesma reserva?
Exemplo:
Reserva 1 , deve haver o Id do equipamento 1 ,2 e 3
Reserva 2 , deve haver o Id do equipamento 2, 3 e 6
e assim sucessivamente....
Desde já agradeço amigos!! :yes:
Boa noite Massaki,
Antes de mais nada , quero agradecer por se disponibilizar a me ajudar =)
Acredito que dessa forma não irá dar certo, porque estou realizando uma consulta que identifica se o equipamento(id_equipamento) está reservado para determinado dia e turno. Ex: se houver um equipamento reservado para hoje 05/09 , ele não é retornado como opção para outro usuário reservar.
Acho que não irá dar certo porque a consulta não irá identificar o id 1,2,3 como o de um equipamento existente :upset:
Mas caso você saiba de alguma forma para que a consulta consiga identificar que o id 1 2 e 3 está reservado para determinado dia e assim não retorne os equipamentos como opção para reserva, agradeço se compartilhar comigo =)
create table reserva
(id_reserva INT NOT NULL ,
id_equipamento INT NOT NULL
PRIMARY KEY (id_reserva,id_equipamento)
FOREIGN KEY(id_equipamento)references equipamento(id_equipamento));
Faça com que RESERVA tenha uma PK composta , só não estou certo de a síntaxe ser esta mas uma pesquisada na documentação resolve.
Com a PK assim a reserva permite mais de um equipamento.
Creio que falta em RESERVA data de e até da reserva.
Boa noite Motta,
Fiz da maneira que você me orientou e funcionou =) , porém fico com a seguinte dúvida
Quando eu inserir uma nova reserva com 3 equipamentos, será inserido 3 linhas na tabela ?
Exemplo: Realizei a reserva 1 com 3 equipamentos.
Segue imagem abaixo
/applications/core/interface/imageproxy/imageproxy.php?img=http://imagizer.imageshack.us/v2/1024x798q90/537/1Fpqf3.jpg&key=67b16f9d1d54c0ed6b463b669f6f84adeb27d264ca2ee38066b288434022b15e" alt="1Fpqf3.jpg" />
Como observa na imagem acima, foi inserido 3 novas linhas , contendo o id_equipamento distinto, mas todas as outras informações iguais, dessa forma fica minha pergunta, é dessa maneira que deverá ficar? ou eu entendi errado ?
Sim, são 3 equipamentos reservados diferentes.
Uma estrutura alternativa seria
Reserva-----------<Item_Reserva
Boa noite Motta,
Cara, muito obrigado pela dica, com o conhecimento que você me passou consegui resolver o meu problema :)
Para quem estiver com a mesma dúvida , faça assim:
1 - Crie uma tabela com chave primária composta e para buscar os campos agrupados faça da seguinte maneira:
SELECT campos_que_deseja_retornar,GROUP_CONCAT(campo_que_deseja_mostrar_em_um_registro)
FROM tabela
GROUP BY campo_que_deseja_agrupar
Mas uma vez agradeço Motta =)
Você vai ter que alterar essa estrutura. Uma forma menos danosa é remover a chave estrangeira, mudar o campo para varchar e alterar seu programa para que salve os equipamentos separando por vírgulas.
Aí a busca pode ser por WHERE IN (XXX, YYY, ZZZ), onde XXX, YYY e ZZZ vão ser os itens da lista de equipamentos.