Olá, estou criando um pequeno sistema para uma empresa de viagens, gostaria de tirar uma dúvida, como eu faço para relacionar a lista de passageiros? preciso que cada viagem fique registrado o destino e os passageiros que viajarão nela. não consigo imaginar como fazer. alguém me ajuda? Obrigado!
Cada viagem tem N passageiros e cada passageiro pode estar em N viagens.
Até aí, ok, cria-se uma tabela associativa passageiro_viagem, com PK composta pelas FKs de passageiro e viagem e boa.
Agora, como você vai dizer qual passageiro foi para qual lugar?
Vai usar a relação de cada viagem com cada passageiro e com o itinerário ao qual uma viagem está associada.
A tabela ‘viagem’ é a minha associativa, minha tabela itinerário é justamente para dizer para onde vai qual viagem, aí minha tabela viagem herda a PK da itinerário (saber para onde é a viagem) e tenho que colocar os passageiros ligados a cada viagem. Mas não sei como fazer
No lugar de lista vc vai colocar viagem_passageiro, e nessa tabela vc vai herdar o id de viagem e passageiro. Assim sera possivel uma viagem ter varios passageiros e um passageiro ter varias viagens.
Ola
me desculpe se eu estiver viajando muito, mas eu ja utilizei alguns sites de compra de passagem e notei algumas coisas:
eu, com o meu login, posso comprar bilhetes para outras pessoas. o que vale é o nome impresso nesse bilhete
um bilhete é de uma determinada “linha”, tipo Paris <-> Londres as 19:50 é o trem 9999, uma linha significa um horario e local de partida e chegada, unico naquele dia, que pode se repetir em outros dias. uma linha tem um numero X de assentos reservados.
o bilhete pode ser numerado ou não.
então a modelagem fica mais interessante: vc tem um Trem codigo unico xxx, horario, trajeto, mas vc só compra bilhetes se o trem esta sendo oferecido nesse dia.
assim teriamos essas tabelas:
usuario -> Bilhete (numero assento) -> viagem (data) -> linha/trem (horario) -> ponto ( inicio fim ) -> lugar geografico de interesse
o ponto seria algo como o aeroporto, a estação de trem, etc. vc pode ter varios pontos na mesma cidade. inclusive isso causa polemica pois, por exemplo, o Aeroporto Charles de Goule é dito como Paris, mas fica na verdade em outra cidade. A Ryan Air usa o aeroporto Paris Beauvais que fica em outro estado. Mas ninguem quer ir pra Beuvais e sim pra Paris ( exceto se vc gosta de plantação de vaca )
Se vc simplificar e dizer que o login X comprou o Bilhete X, ok. isso força a familia q vai viajar com 2 crianças a criar o login pra eles. eles podem não ter CPF, etc. Isso pode ser aceitável.
Outra coisa é trens, por exemplo, vc pode ter diversas paradas e vc pode querer entrar/sair no meio. vc pode simplificar como sendo apenas trens ( ou avião, ou barco, etc ) que saem do ponto A para o ponto B
A unica restrição que vejo é que talvez vc queira evitar apagar qualquer registro. Por exemplo, apagar o destino Londres iria ferrar toda a consistencia de dados. ao invés disso talvez vc queira fazer um controle lógico, colocando um campo booleano ATIVO ( true/false ). E vc só permite a venda se tudo estiver ativo.
vc não ferra o historico dessa forma. e se eu quiser cancelar a minha inscrição no sistema, o historico permanece. se for MESMO preciso apagar, apaga apenas os bilhetes.
eu não vejo motivo para criar tabelas associativas, não vejo relação NxN em nenhum lugar. exceto se vc considerar quebrar uma viagem em multiplos pontos e multiplos bilhetes.