Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Chave estrangeira?


Donald Stuart

Pergunta

Olá amigos, estou montando uma aplicação onde tenho duas classes: Carro e Cliente.

Para essa aplicação, um Cliente só pode ter um carro. Até aí tudo bem... a tabela Carro já foi criada... agora gostaria de saber como criar a tabela Cliente para manter um registro de Carro em MySQL. Pensei em utilizar chave estrangeira, mas não sei qual a melhor forma. Independente de qual seja, alguém poderia me indicar como fazer?? Sou um pouco leigo quando o assunto são relações entre tabelas... sendo que em casos anteriores eu manteria apenas um campo Carro com o nome do carro e para utilização na aplicação buscaria um carro com este nome... mas isso é gambiarra...

Desde já agradeço.

Abraços,

Adriano

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Oi, Adriano!

Nesta situação a chave estrangeira deve ser um campo com o id do cliente na tabela carro, pois o modelo precisa responder a pergunta "O carro do cliente é?" ou "O cliente possui que carro?". Esta é uma relação 1 para 1 sendo o domínio em carros variando de 0 a 1.

Como exemplo seria assim:

Tabela Cliente

id_Cliente,

nome,

endereço,

etc,

PRIMARY (idCliente)

Tabela Carro

idCliente,

idCarro, (este atributo pode ser a placa do carro, já que atualmente no Brasil só pode haver 1 carro para cada placa)

ano,

modelo,

etc,

PRIMARY (idCliente, idCarro)

Na forma acima você já deixaria o modelo pronto para que o cliente possua nenhum, um ou vários carros. Ou seja transformaria o relacionamento em 1 para N. Sendo o domínio para carros variando de 0 a N.

A consulta para responder as perguntas acima, as SELECTs seriam assim:

Para que retornasse somente os clientes que possuissem carros (e seus carros)

SELECT * FROM Cliente cli

INNER JOIN Carro car ON cli.idCliente = car.idCarro

Para que retornasse todos os clientes e mostrando os carros daqueles que possuissem os mesmos

SELECT * FROM Cliente cli

LEFT JOIN Carro car ON cli.idCliente = car.idCarro

Neste último caso, os capos da tabela carro, para os clientes que não possuissem carros, seriam preenchidos com nulo.

Você está usando o engine MyISAM ou o InnoDB?

Para MyISAM a resposta acima basta.

Para InnoDB você poseria acrescentar um constraint que obrigaria você a não cadastrar carro antes de cadastrar cliente.

Ou seja, só haveria carros cadastrados para clientes já cadastrados. Isto evitaria inconsistência no banco.

Para tal você deverá aplicar uma atualização na tabela, da seguinte forma:

ALTER TABLE Carro

ADD CONSTRAINT FK_CLICARRO FOREIGN KEY (idCliente) REFERENCES Cliente (idCliente) ON DELETE CASCADE ON UPDATE CASCADE;

Este tipo de constraint facilita na hora de deletar o cliente, pois de outra maneira você deveria deletar os carros do cliente, primeiro e depois, deletar o cliente.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...