Reste quand même un problème : il faudrait qu'on utilise la même terminologie.
Dans mon esprit, on fait un voyage entre un point de départ et un point d'arrivée.
Pour ce voyage, on effectuera un à plusieurs vols selon qu'il existe ou non un vol direct.
L'escale, c'est une pause aucun d'un voyage et ça sous-entend qu'on repart avec le même appareil. Dans le modèle de données, je dirais que c'est de la pollution intellectuelle et que ça n'a pas autant d'importance qu'on lui en accorde ici. Parce qu'au bout du compte, on va parler soit d'un voyage avec des escales en utilisant le même appareil du départ à l'arrivée finale, soit on fera plusieurs vols successifs en empruntant différentes compagnies.
Là ça se corse à mon avis parce que je dois trouver comment organiser mon voyage en changeant le moins de fois possible et en arrivant le plus rapidement possible.
Il faudrait donc établir des règles de gestion des priorités. Si par exemple je veux aller de Paris à Athènes et que j'ai le choix suivant :
- Vol direct, départ midi, arrivée 17h30;
- Vol de Paris à Rome avec AirBête, départ midi arrivée 13h35 puis de Rome avec AirNiais départ 14h15 arrivée 17h15;
Est-ce que je donne la priorité au plus direct ou au plus rapide ?
Le problème général de toutes façon, ce sera dans le cas où il n'existe pas de vol direct (avec ou sans escale) parce qu'il va falloir calculer toutes les possibilités à partir de la date et de l'heure de départ pour trouver la combinaison la plus intéressante. Techniquement, rien ne m'interdit de passer de Paris à New-York puis Moscou pour me rendre à Athènes, mais il est évident qu'on doit pouvoir trouver un itinéraire moins chaotique.
Il faut donc établir les villes intermédiaires possibles entre la ville de départ et celle d'arrivée. Ça sous entend que la table des villes doit avoir une relation réflexive établissant les liens existant, une ville pouvant être reliée à une ou plusieurs autres villes... et réciproquement.
Rapidement comme ça, j'ai pas la réponse au vu du modèle tel qu'il est, mais à mon avis, le modèle de données actuel est bancal
