Como modelar um banco de dados com muitas relações m: n em uma tabela
Atualmente, estou configurando um banco de dados com um grande número de relações muitos-para-muitos. Todo relacionamento foi modelado por meio de uma tabela de links. Exemplo
Uma pessoa tem vários empregos, os empregos são cumpridos por várias pessoas. Uma pessoa tem um número de casas, as casas são ocupadas por um número de pessoas. Uma pessoa tem vários restaurantes de que gosta, restaurantes têm várias pessoas que gostam do restaurant
Primeiro projetei isso da seguinte maneira:
Tabelas: Pessoa, Trabalho, Casa, Restaurante, Pessoa_Job, Pessoa_House, Pessoa_Restaurante.
Relationships 1 - n: Pessoa -> Cargo_Job, Pessoa -> Cargo_House, Pessoa -> Restaurante_Restaurante, Trabalho -> Cargo_Job, Casa -> Restaurante_House, Restaurante -> Restaurante_Restaurante.
Isso leva muito rapidamente a um modelo ER lotado e complex
Tentando simplificar isso, eu o modelei da seguinte forma:
Tabels: Pessoa, Trabalho, Casa, Restaurante, Person_Attributes
Relationships 1 - n: Pessoa -> Atributos da Pessoa, Trabalho -> Atributos da Pessoa, Casa -> Atributos da Pessoa, Restaurante -> Atributos da Pessoa
tabela Person_Attributes deve ter a seguinte aparência: personId jobId houseId restaurantId
Se existir uma relação de pessoa - trabalho, adicionarei uma entrada parecida com:
P1, J1, NULL, NULL
Se existir um relacionamento pessoa - casa, adicionarei uma entrada parecida com:
P1, NULL, H1, NULL
Portanto, a tabela de atributos no segundo exemplo terá o mesmo número de entradas que as tabelas de links dos primeiros exemplos somada
Isso simplifica bastante o modelo de ER e, desde que eu crie índices para personId + jobId, personId + houseId e personId + restaurantId, acho que não haverá muito impacto no desempenh
Minhas perguntas são: O segundo método é uma maneira correta de modelar isso? Se não, por que? Estou certo sobre o impacto no desempenho? Se não, por quê?
MySQL Workbench O exemplo do que quero dizer pode ser encontrado aqui: