Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

União complexa MYSQL


Se a sua hierarquia desejada for programa -> tema -> vertente -> ano -> unidade -> evento_aprendizagem, você deve ajustar a estrutura da tabela para refletir isso. Em particular, o tema deve ter uma relação de chave estrangeira entre tema e programa, e você precisa de um nível extra por ano. Ter uma chave estrangeira entre o tema e o programa evita a necessidade de uma junção cruzada. As junções cruzadas têm o hábito de mordê-lo e geralmente devem ser evitadas.

Se você olhar para este db fiddle você verá que eu fiz essas mudanças. Chamei o nível anual de strandyear para evitar o uso de uma palavra reservada, mas a intenção deve ser clara. Agora as junções tornam-se junções internas (em vez de junções à esquerda) para pegar os valores de descrição de níveis mais altos na árvore, e o nível inferior (learning_events) contém automaticamente apenas valores que correspondem a strand, year e unit, por nenhum outro motivo a não ser que a própria estrutura o garanta, através do simples expediente de que cada nível tenha uma chave estrangeira para o nível acima.

Observe que as chaves estrangeiras efetivamente encadeiam o link. Você não precisa, por exemplo, de uma chave estrangeira específica entre learning_event e strand, pois as chaves intervenientes na cadeia garantem o relacionamento.