GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

MySQL melhores praticas sobre relacionamento entre 3 tabelas

mysql
Tags: #<Tag:0x00007fb39c047368>

#1

Pessoal, preciso de uma ajuda…
Tenho 3 tabelas, uma “morador”, uma “visitante”, e uma “veiculo”…
Um morador pode ter n veiculos…
Um visitante pode ter n veiculos…
No db, a tabela veiculo vão ter duas foreign key q pode conter valor nulo? Assim consigo indicar se esse veiculo pertence a um morador ou a um visitante?
Obrigado desde ja!


#2

Na verdade acaba sendo redundância a meu ver, pq se vc colocar em veiculo por exemplo:

id_morador
id_visitante

Um dos dois vai estar nulo por natureza e ambos já serão as foreign keys não precisando ter 4 campos (foi o que entendi da sua duvida ok?)

Agora, se vc quiser separar as coisas, vc pode criar duas entidades fracas (tabelas sem primary key) uma que vincule veiculo a morador

veiculo_morador
id_veiculo
id_morador

E outra com visitante

veiculo_visitante
id_veiculo
id_visitante

Mas lembre-se que essa ultima forma acaba expandido as capacidades das tabelas tornando o relacionamento de muitos para muitos se assim desejar

Qual forma é a correta? Ambas e nenhuma :joy:, o que quero dizer com isso? Cada estrutura serve para um propósito, caminhos alternativos vc tem e vc quem vai definir qual escolher blz? sucesso!


#3

@rodevops muito obrigado, bem explicado, e clareou muito a minha mente sobre como fazer… :stuck_out_tongue:

Vou usar as entidades fracas, só fiquei com uma dúvida, se por exemplo no meio do sistema eu resolver mudar e criar uma entidade prestador_servico e quiser linkar um veiculo nela também, eu vou la e crio uma outra tabela veiculo_prestador.

Isso não vai começar a ficar meio poluido o MySQL com tantas tabelas relacionadas assim?

Obrigadoo man!!


#4

É o preço a se pagar por ter tudo “divididinho” :joy:, mas penso eu que a vantagem é tudo bem identificado e com poucos registros (pode não ser uma vantagem pra vc por ter que separar tudo etc)…

O modo que mostrei vc pode imaginar que um mesmo veiculo pode ser “compartilhado” entre várias pessoas. afinal o mesmo id_veiculo pode estar em várias linhas (e em várias tabelas se usar entidade fraca) para pessoas diferentes de uma mesma familia por exemplo, já usando chave estrangeira apenas em veiculo isso não será possível, pois vc está “amarrando” o veiculo apenas a uma unica pessoa, são vários cenários…

E é como disse antes, vai da forma que vc deseja implementar, é até melhor vc começar a se questionar assim pensando no futuro, os impactos que sua decisão terá assim vc consegue pesar se compensa mais criar uma entidade fraca ou colocar chaves estrangeiras apenas em veiculo… eu apenas lhe mostrei o caminho e fazer vc pensar como um todo mas cada projeto tem suas necessidades e cabe a vc decidir o que fazer…

Indico vc modelar sua estrutura no mysql workbench, há uma versão free com vários recursos, se vc ja tem sua estrutura montada, pode fazer engenharia reversa e ver como suas tabelas estão relacionadas, assim vc tem uma visão mais abrangente do projeto e apontar falhas, melhorias ou correções que precisa fazer…

sucesso!


#5

Cara, ótima explicação, me ajudou muito e ainda me deu um senso critico sobre as opções que posso seguir.

Na verdade ainda não tenho a estrutura completa, vou seguir seu conselho e modelar ela no workbench.

Muito obrigado pela ajuda e pela paciencia em ajudar @rodevops, tudo de melhor pra você!

Abrass!