sql >> Base de Datos >  >> RDS >> Mysql

Unión compleja MYSQL

Si su jerarquía deseada es programa -> tema -> rama -> año -> unidad -> evento_de_aprendizaje, entonces debe ajustar la estructura de su tabla para reflejar esto. En particular, el tema debe tener una relación de clave externa entre el tema y el programa, y ​​necesita un nivel adicional por año. Tener una clave externa entre el tema y el programa evita la necesidad de una unión cruzada. Las uniones cruzadas tienen la costumbre de morderte y, por lo general, deben evitarse.

Si miras este db fiddle verás que he hecho estos cambios. He llamado al nivel de año strandyear para evitar usar una palabra reservada, pero la intención debe ser clara. Ahora las uniones se convierten en uniones internas (en lugar de uniones a la izquierda) para recoger los valores de descripción de los niveles más altos en el árbol, y el nivel inferior (eventos_de_aprendizaje) automáticamente solo contiene valores que coinciden con el capítulo, el año y la unidad, sin otra razón que que la propia estructura lo garantiza, por el simple hecho de que cada nivel tiene una clave ajena al nivel superior.

Tenga en cuenta que las claves foráneas efectivamente se vinculan en cadena. No necesita, por ejemplo, una clave externa específica entre learning_event y strand, porque las claves intermedias en la cadena garantizan la relación.