Mysql
 sql >> Base de données >  >> RDS >> Mysql

Union du complexe MYSQL

Si votre hiérarchie souhaitée est programme -> thème -> volet -> année -> unité -> événement_d'apprentissage, vous devez alors ajuster la structure de votre tableau pour refléter cela. En particulier, le thème doit avoir une relation de clé étrangère entre le thème et le programme, et vous avez besoin d'un niveau supplémentaire pour l'année. Avoir une clé étrangère entre le thème et le programme évite le besoin d'une jointure croisée. Les jointures croisées ont l'habitude de vous mordre et sont généralement à éviter.

Si vous regardez ce db fiddle vous verrez que j'ai fait ces changements. J'ai appelé le niveau année strandyear pour éviter d'utiliser un mot réservé, mais l'intention doit être claire. Désormais, les jointures deviennent des jointures internes (au lieu de jointures gauches) pour récupérer les valeurs de description des niveaux supérieurs de l'arborescence, et le niveau inférieur (learning_events) ne contient automatiquement que des valeurs qui correspondent au volet, à l'année et à l'unité, pour aucune autre raison que que la structure elle-même le garantit, par le simple expédient que chaque niveau a une clé étrangère vers le niveau supérieur.

Notez que les clés étrangères sont effectivement liées par une chaîne. Vous n'avez pas besoin, par exemple, d'une clé étrangère spécifique entre learning_event et strand, car les clés intermédiaires dans la chaîne garantissent la relation.