Aller au contenu

TP sur la modélisation SQL vers NoSQL - MongoDB

Objectif

Reprendre la base de données bd-avion dont les fichiers JSON du contenu des 3 tables vous est fourni. On vous demande de créer une seule collection (db.createCollection ("lesavions")) nommée lesavions à partir des données ses 3 fichiers.

Voici le schèma de la base de données de départ :

schèma base de données avion

Fichiers JSON fournis

[
	{
		"AV_ID" : 100,
		"AV_CONST" : "AIRBUS",
		"AV_MODELE" : "A320",
		"AV_CAPACITE" : 300,
		"AV_SITE" : "Nice"
	},
	{
		"AV_ID" : 101,
		"AV_CONST" : "BOEING",
		"AV_MODELE" : "B707",
		"AV_CAPACITE" : 250,
		"AV_SITE" : "Paris"
	},
	{
		"AV_ID" : 102,
		"AV_CONST" : "AIRBUS",
		"AV_MODELE" : "A320",
		"AV_CAPACITE" : 300,
		"AV_SITE" : "Toulouse"
	},
	{
		"AV_ID" : 103,
		"AV_CONST" : "CARAVELLE",
		"AV_MODELE" : "Caravelle",
		"AV_CAPACITE" : 200,
		"AV_SITE" : "Toulouse"
	},
	{
		"AV_ID" : 104,
		"AV_CONST" : "BOEING",
		"AV_MODELE" : "B747",
		"AV_CAPACITE" : 400,
		"AV_SITE" : "Paris"
	},
	{
		"AV_ID" : 105,
		"AV_CONST" : "AIRBUS",
		"AV_MODELE" : "A320",
		"AV_CAPACITE" : 300,
		"AV_SITE" : "Grenoble"
	},
	{
		"AV_ID" : 106,
		"AV_CONST" : "ATR",
		"AV_MODELE" : "ATR42",
		"AV_CAPACITE" : 50,
		"AV_SITE" : "Paris"
	},
	{
		"AV_ID" : 107,
		"AV_CONST" : "BOEING",
		"AV_MODELE" : "B727",
		"AV_CAPACITE" : 300,
		"AV_SITE" : "Lyon"
	},
	{
		"AV_ID" : 108,
		"AV_CONST" : "BOEING",
		"AV_MODELE" : "B727",
		"AV_CAPACITE" : 300,
		"AV_SITE" : "Nantes"
	},
	{
		"AV_ID" : 109,
		"AV_CONST" : "AIRBUS",
		"AV_MODELE" : "A340",
		"AV_CAPACITE" : 350,
		"AV_SITE" : "Bastia"
	}
]
[
	{
		"PI_ID" : 1,
		"PI_NOM" : "DORE",
		"PI_SITE" : "NICE"
	},
	{
		"PI_ID" : 2,
		"PI_NOM" : "JORDANA",
		"PI_SITE" : "PARIS"
	},
	{
		"PI_ID" : 3,
		"PI_NOM" : "KATERINE",
		"PI_SITE" : "GRENOBLE"
	},
	{
		"PI_ID" : 4,
		"PI_NOM" : "ANN",
		"PI_SITE" : "NANTES"
	},
	{
		"PI_ID" : 5,
		"PI_NOM" : "CHERHAL",
		"PI_SITE" : "PARIS"
	},
	{
		"PI_ID" : 6,
		"PI_NOM" : "BIRKIN",
		"PI_SITE" : "TOULOUSE"
	},
	{
		"PI_ID" : 7,
		"PI_NOM" : "FARMER",
		"PI_SITE" : "LYON"
	},
	{
		"PI_ID" : 8,
		"PI_NOM" : "NAKAMURA",
		"PI_SITE" : "BASTIA"
	},
	{
		"PI_ID" : 9,
		"PI_NOM" : "PUNK",
		"PI_SITE" : "PARIS"
	}
]
[
	{
		"VO_ID" : "IT100",
		"VO_AVION" : 100,
		"VO_PILOTE" : 1,
		"VO_SITE_DEPART" : "NICE",
		"VO_SITE_ARRIVEE" : "PARIS",
		"VO_HEURE_DEPART" : "07:00:00",
		"VO_HEURE_ARRIVEE" : "09:00:00"
	},
	{
		"VO_ID" : "IT101",
		"VO_AVION" : 100,
		"VO_PILOTE" : 2,
		"VO_SITE_DEPART" : "PARIS",
		"VO_SITE_ARRIVEE" : "TOULOUSE",
		"VO_HEURE_DEPART" : "11:00:00",
		"VO_HEURE_ARRIVEE" : "12:00:00"
	},
	{
		"VO_ID" : "IT102",
		"VO_AVION" : 101,
		"VO_PILOTE" : 1,
		"VO_SITE_DEPART" : "PARIS",
		"VO_SITE_ARRIVEE" : "NICE",
		"VO_HEURE_DEPART" : "12:00:00",
		"VO_HEURE_ARRIVEE" : "14:00:00"
	},
	{
		"VO_ID" : "IT103",
		"VO_AVION" : 105,
		"VO_PILOTE" : 3,
		"VO_SITE_DEPART" : "GRENOBLE",
		"VO_SITE_ARRIVEE" : "TOULOUSE",
		"VO_HEURE_DEPART" : "09:00:00",
		"VO_HEURE_ARRIVEE" : "11:00:00"
	},
	{
		"VO_ID" : "IT104",
		"VO_AVION" : 105,
		"VO_PILOTE" : 3,
		"VO_SITE_DEPART" : "TOULOUSE",
		"VO_SITE_ARRIVEE" : "GRENOBLE",
		"VO_HEURE_DEPART" : "17:00:00",
		"VO_HEURE_ARRIVEE" : "19:00:00"
	},
	{
		"VO_ID" : "IT105",
		"VO_AVION" : 107,
		"VO_PILOTE" : 7,
		"VO_SITE_DEPART" : "LYON",
		"VO_SITE_ARRIVEE" : "PARIS",
		"VO_HEURE_DEPART" : "06:00:00",
		"VO_HEURE_ARRIVEE" : "07:00:00"
	},
	{
		"VO_ID" : "IT106",
		"VO_AVION" : 109,
		"VO_PILOTE" : 8,
		"VO_SITE_DEPART" : "BASTIA",
		"VO_SITE_ARRIVEE" : "PARIS",
		"VO_HEURE_DEPART" : "10:00:00",
		"VO_HEURE_ARRIVEE" : "13:00:00"
	},
	{
		"VO_ID" : "IT107",
		"VO_AVION" : 106,
		"VO_PILOTE" : 9,
		"VO_SITE_DEPART" : "PARIS",
		"VO_SITE_ARRIVEE" : "BRIVE",
		"VO_HEURE_DEPART" : "07:00:00",
		"VO_HEURE_ARRIVEE" : "08:00:00"
	},
	{
		"VO_ID" : "IT108",
		"VO_AVION" : 106,
		"VO_PILOTE" : 9,
		"VO_SITE_DEPART" : "BRIVE",
		"VO_SITE_ARRIVEE" : "PARIS",
		"VO_HEURE_DEPART" : "19:00:00",
		"VO_HEURE_ARRIVEE" : "20:00:00"
	},
	{
		"VO_ID" : "IT109",
		"VO_AVION" : 107,
		"VO_PILOTE" : 7,
		"VO_SITE_DEPART" : "PARIS",
		"VO_SITE_ARRIVEE" : "LYON",
		"VO_HEURE_DEPART" : "18:00:00",
		"VO_HEURE_ARRIVEE" : "19:00:00"
	},
	{
		"VO_ID" : "IT110",
		"VO_AVION" : 102,
		"VO_PILOTE" : 2,
		"VO_SITE_DEPART" : "TOULOUSE",
		"VO_SITE_ARRIVEE" : "PARIS",
		"VO_HEURE_DEPART" : "15:00:00",
		"VO_HEURE_ARRIVEE" : "16:00:00"
	},
	{
		"VO_ID" : "IT111",
		"VO_AVION" : 101,
		"VO_PILOTE" : 4,
		"VO_SITE_DEPART" : "NICE",
		"VO_SITE_ARRIVEE" : "NANTES",
		"VO_HEURE_DEPART" : "17:00:00",
		"VO_HEURE_ARRIVEE" : "19:00:00"
	}
]

Une fois la structure de votre collection définie, insérer les données récupérées depuis les fichiers JSON et tentez d’exécuter les requêtes suivantes qui étaient destinées à une base de données relationnelle.

Comment allez-vous faire ? Quelle structure aura votre collection ?

Voici ci-dessous, la liste des requêtes à réaliser (ou tenter de réaliser) lorsque vous aurez créé votre collection qui contiendra des données.

Vous avez de la chance car les données provenant de d’une base de données relationnelle sont structurées… mais on vous demande d’ajouter des informations compémentaires pour certains pilotes :

Les 3 premiers avec les changements :

Pour les autres, aucun changement !

Liste des requêtes à réaliser (mais cette fois-ci en NoSQL sur MongoDB)

  1. liste de tous les numéros d’avions
  2. Liste des noms des pilotes
  3. Liste des marques d’avions (sans doublon)
  4. Liste des vols pour Nice
  5. Liste des avions qui ont plus de 200 places
  6. Liste des avions AIRBUS localisés à Toulouse
  7. Liste des avions AIRBUS allant à Paris
  8. Liste des vols Paris-Nice et Toulouse-Paris
  9. Liste des avions Airbus et Boeing
  10. Liste des Airbus ou des avions de plus de 200 places
  11. Liste des avions AIRBUS qui ne sont pas localisés à Toulouse
  12. Liste des Airbus qui ne vont pas à Paris
  13. Liste des avions pour Paris qui ne sont pas des Airbus
  14. Liste de tous les vols avec le nom des avions
  15. Type et capacité des avions en service (donc des avions qui volent !)
  16. Liste des avions qui ne sont pas des BOEING allant à Paris
  17. Nom des pilotes en service
  18. Nom des avions (BOEING) ayant une même capacité (auto-jointure)
  19. Nombre d’avions de chaque marque
  20. Nombre de pilotes différents pour chaque avion en service
  21. Nombre de vols différents pour chaque pilote (regroupé par nom)
  22. Pilotes (ordre croissant des numéros) assurant plus d’un vol (Afficher: Numéro et nom des pilotes, nombre de vols)
  23. Nombre de vols assurés au départ de Nice ou de Paris par chaque pilote (Afficher: Numéros des pilotes, ville de départ et nombre de vols)
  24. Nombre de vols assurés au départ ou à l’arrivée de Nice par chaque pilote (Afficher: Numéros des pilotes, nombre de vols)
  25. Liste des vols dont la ville de départ correspond à la ville où est localisé l’avion
  26. Liste des avions de capacité égale ou supérieure à la moyenne
  27. Capacité mini et maxi des BOEING
  28. Capacité moyenne des avions localisés à Paris avec 2 chiffres après la virgule
  29. Capacité moyenne des avions par marque
  1. Capacité totale des avions de la table avion
  2. Affichage de l’heure système avec les secondes

proposition de correction

Lien vers une proposition de correction à tester