École Nationale des Sciences Géographiques |
Année scolaire
2000-2001
|
cours 272b2 de bases de données
(géographiques)
Stéphane PELLE |
Corrigé de l'interrogation
de Base de Données
(Géographiques)
Durée : 2 h
Documents autorisés
Le corrigé comporte 8 pages
Les réponses même partielles ont été prises en compte.
Énoncé du problème *
1) Modélisation par la méthode HBDS (10 points) *
L'ENSG veut robotiser l'acheminement du matériel pédagogique dans les salles de cours en fonction du nombre d'élèves par promotion. L'ENSG décide donc de créer une base de données sur Intranet qui devra permettre de répondre aux requêtes suivantes :
1.1) Décrire le contenu de la base sous forme d'un schéma HBDS avec les cardinalités sur les liens et le type des objets (objets simples ponctuels, simples linéaires, simples surfaciques ou complexes).
On notera, une fois n'est pas coutume, que les cardinalités ont pu être indiquées malgré la présence d'hyperclasses (grâce aux commentaires sur le modèle) : par expérience, un ordinateur est connecté à une prise réseau et un vidéoprojecteur est connecté à un ordinateur... La solution présentée suppose que les imprimantes sont rangées avec les ordinateurs (et connectées soit directement au réseau soit à un autre ordinateur)…
1.2) Indiquer les informations qui seront calculées et non pas gérées sous forme de données.
Les informations calculées sont essentiellement les places disponibles pour mettre du matériel (les caractéristiques telles que la longueur et la largeur utiles des pièces et la largeur et la profondeur utiles des ascenseurs sont indiquées par un signalant que l'attribut correspondant est calculé par rapport à la géométrie). De même, le lien "relie " est partiellement mis à jour grâce à la détection automatique des ordinateurs par les prises réseau…
Enfin, les itinéraires et les distances à parcourir sont a priori calculés grâce au positionnement géométrique des objets simples et des robots. L'acquisition des données nécessaires fait d'ailleurs l'objet de la question 3.4…
1.3) Décrire les tables relationnelles qui seront gérées par le SIG. Indiquer le type de chaque colonne (nombre, identifiant ou chaîne de caractères) et sa taille en nombre de caractères à afficher.
Il suffit d'appliquer les règles de passage entre le modèle HBDS et le modèle relationnel dérivé. Les classes induisent des tables dont les colonnes correspondent aux attributs des classes : on évitera juste de rajouter une colonne pour l'identifiant implicite si un des attributs peut servir d'identifiant... Les liens n:m induisent des tables dont les colonnes sont les identifiants des classes de départ et d'arrivée donc des colonnes NumInfo1 et NumInfo2. Les liens n:1 (ou 1:n) induisent une colonne rajoutée sur la classe de départ (respectivement d'arrivée) donc une colonne ("NumTable") sur les "chaises", deux colonnes ("NumSalle" et "NumCouloir") sur tout le matériel et une colonne ("NumBâtiment") sur toutes les pièces. Le lien n:2 indique que les objets de la classe de départ sont considérés comme des arcs topologiques, il induit donc l'ajout de deux colonnes sur la classe de départ pour préciser les 2 sommets de l'arc topologique (car les numéros ABEL sont tous distincts)…
La seule difficulté pouvait être la taille réservée
aux numéros IP mais on signalait que ce numéro n'était
qu'un synonyme du nom de l'ordinateur. En prévoyant classiquement
50 caractères pour le nom, on n'a aucun souci car le numéro
IP est en fait sur 12 caractères. Quant aux numéros ABEL,
en les considérant comme des nombres entiers sur 4 octets (avec
un affichage sur 10 caractères), on peut évidemment générer
4 milliards de référence matérielle ce qui devait
paraître suffisant pour l'ENSG voire l'IGN…
Chaises | ||
Numéro | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
Type | Nombre (énuméré : 1 octet) | 1 caractère à l'affichage |
NumTable | voir Table.Numéro | voir Table.Numéro |
NumSalle | voir Salles.Identifiant | voir Salles.Identifiant |
NumCouloir | voir Couloirs.Identifiant | voir Couloirs.Identifiant |
Tables | ||
Numéro | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
Longueur | Nombre flottant en mètre | 1+1+2=4 caract. à l'aff. |
Largeur | Nombre flottant en mètre | 1+1+2=4 caract. à l'aff. |
NumSalle | voir Salles.Identifiant | voir Salles.Identifiant |
NumCouloir | voir Couloirs.Identifiant | voir Couloirs.Identifiant |
Ordinateurs | ||
Numéro | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
NuméroIP (Nom) | Chaîne de caractères | 50 caractères à l'affichage |
Processeur | Chaîne de caractères (marque et type du processeur) | 50 caractères à l'affichage |
Fréquence | Chaîne de caractères (avec l'unité) | 50 caractères à l'affichage |
Mémoire | Chaîne de caractères (mémoire vive et disque dur) | 50 caractères à l'affichage |
Écran | Chaîne de caractères | 50 caractères à l'affichage |
NumSalle | voir Salles.Identifiant | voir Salles.Identifiant |
NumCouloir | voir Couloirs.Identifiant | voir Couloirs.Identifiant |
Vidéoprojecteurs | ||
Numéro | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
NumSalle | voir Salles.Identifiant | voir Salles.Identifiant |
NumCouloir | voir Couloirs.Identifiant | voir Couloirs.Identifiant |
PrisesRéseau | ||
Numéro | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
NumSalle | voir Salles.Identifiant | voir Salles.Identifiant |
NumCouloir | voir Couloirs.Identifiant | voir Couloirs.Identifiant |
Câbles | ||
Identifiant | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
Type | Nombre (énuméré : 1 octet) | 1 caractère à l'affichage |
NumInfo1 | voir Ordinateurs.Numéro ou Vidéoprojecteurs.Numéro ou PrisesRéseau.Numéro | voir Ordinateurs.Numéro ou Vidéoprojecteurs.Numéro ou PrisesRéseau.Numéro |
NumInfo2 | voir Ordinateurs.Numéro ou Vidéoprojecteurs.Numéro ou PrisesRéseau.Numéro | voir Ordinateurs.Numéro ou Vidéoprojecteurs.Numéro ou PrisesRéseau.Numéro |
Bâtiments | ||
Identifiant | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
Nom | Chaîne de caractères | 50 caractères à l'affichage |
Salles | ||
Identifiant | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
Nom | Chaîne de caractères | 50 caractères à l'affichage |
Numéro | Nombre (entier court : 1 octet) | 2 caractères à l'affichage |
Étage | Nombre (entier court : 1 octet) | 1 caractère à l'affichage |
LargeurUtile | Nombre flottant en mètre | 3+1+2=6 caract. à l'aff. |
LongueurUtile | Nombre flottant en mètre | 3+1+2=6 caract. à l'aff. |
NumBâtiment | voir Bâtiment.Identifiant | voir Bâtiment.Identifiant |
Couloirs | ||
Identifiant | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
Étage | Nombre (entier court : 1 octet) | 2 caractères à l'affichage |
LargeurUtile | Nombre flottant en mètre | 3+1+2=6 caract. à l'aff. |
LongueurUtile | Nombre flottant en mètre | 3+1+2=6 caract. à l'aff. |
NumBâtiment | voir Bâtiment.Identifiant | voir Bâtiment.Identifiant |
Portes | ||
Identifiant | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
Largeur | Nombre flottant en mètre | 1+1+2=4 caract. à l'aff. |
Ascenseurs | ||
Identifiant | Identifiant (entier long : 4 octets) | 10 caractères à l'affichage |
LargeurUtile | Nombre flottant en mètre | 1+1+2=6 caract. à l'aff. |
ProfondeurUtile | Nombre flottant en mètre | 1+1+2=6 caract. à l'aff. |
EstPoséSur | ||
NumInfo | voir Ordinateurs.Numéro ou Vidéoprojecteurs.Numéro ou PrisesRéseau.Numéro | voir Ordinateurs.Numéro ou Vidéoprojecteurs.Numéro ou PrisesRéseau.Numéro |
NumBureau | voir Chaises.Numéro ou Tables.Numéro | voir Chaises.Numéro ou Tables.Numéro |
EstUnAccèsA | ||
NumPorte | voir Portes.Identifiant | voir Portes.Identifiant |
NumAscenseur | voir Ascenseurs.Identifiant | voir Ascenseurs.Identifiant |
NumSalle | voir Salles.Identifiant | voir Salles.Identifiant |
NumCouloir | voir Couloirs.Identifiant | voir Couloirs.Identifiant |
2) Rédaction de requêtes en SQL (6 points)
Avec la syntaxe SQL de Microsoft Access par exemple…
2.1) Dans quelles salles se trouvent les vidéoprojecteurs ?
SELECT Videoprojecteurs.Numero, Batiments.Nom, Salles.Etage, Salles.Numero
FROM Videoprojecteurs, Salles, Batiments
WHERE (((Videoprojecteurs.NumSalle)=[Salles].[Identifiant]) AND ((Batiments.Identifiant)=[Salles].[NumBatiment]));
2.2) Au maximum, combien de tables peuvent être mises dans la salle 09 du 3ème étage du bâtiment Laplace (salle L309) ?
On peut déjà calculer les dimensions maximales des tables :
SELECT Max(Tables.Longueur) AS MaxDeLongueur, Max(Tables.Largeur) AS MaxDeLargeur
FROM Tables;
Si on a sauvegardé le résultat dans une table DimensionsMaxTables, on peut alors calculer le nombre de tables en supposant qu'il faut laisser 50% de marge autour de chaque table :
SELECT [LongueurUtile]*[LargeurUtile]/([MaxDeLongueur]*[MaxDeLargeur]*1.5)
FROM Salles, Batiments, DimensionsMaxTables
WHERE (((Batiments.Identifiant)=[Salles].[NumBatiment]) AND ((Batiments.Nom) Like "L*") AND ((Salles.Etage)=3) AND ((Salles.Numero)=9));
2.3) Combien de chaises sont actuellement dans la salle L309 ?
SELECT Count(*)
FROM Tables, Salles, Batiments
WHERE (((Tables.NumSalle)=[Salles].[Identifiant]) AND ((Salles.NumBatiment)=[Batiments].[identifiant]) AND ((Batiments.Nom) Like "L*") AND ((Salles.Etage)=3) AND ((Salles.Numero)=9));
2.4) Quelle est la longueur minimum du câble nécessaire pour connecter l'ordinateur dont le nom est "SATRIANI" à la prise réseau la plus proche de la table sur laquelle il est posé ?
Cette requête va évidemment faire appel à des calculs de distance sur la géométrie que l'on ne possède pas dans la partie SGBD de notre SIG mais on peut déjà rechercher sur quelle table est posée l'ordinateur le numéro des prises dans cette salle :
SELECT Ordinateurs.NumeroIP, Tables.Numero, PrisesReseau.Numero
FROM Ordinateurs, Tables, EstPoseSur, PrisesReseau
WHERE (((Ordinateurs.NumeroIP) Like "satriani") AND ((Tables.Numero)=[EstPoseSur].[NumBureau]) AND ((Ordinateurs.Numero)=[EstPoseSur].[NumInfo]) AND ((Ordinateurs.NumSalle)=[PrisesReseau].[NumSalle]));
Il suffira ensuite de rechercher grâce au module CAO/DAO du SIG, quelle prise est la plus proche de la table…
On peut en outre rechercher à quelle prise est connecté l'ordinateur pour vérifier que la prise choisie est bien la bonne (en demandant au module CAO/DAO de nous renseigner sur la longueur du câble utilisé)…
SELECT Ordinateurs.NumeroIP, PrisesReseau.Numero
FROM Ordinateurs, Cables, PrisesReseau
WHERE (((Ordinateurs.NumeroIP) Like "satriani") AND ((PrisesReseau.Numero)=[Cables].[NumInfo2]) AND ((Ordinateurs.Numero)=[Cables].[NumInfo1])) OR (((Ordinateurs.NumeroIP) Like "satriani") AND ((PrisesReseau.Numero)=[Cables].[NumInfo1]) AND ((Ordinateurs.Numero)=[Cables].[NumInfo2]));
3) Gestion de la base de données (4 points)
3.1) Quelles données peuvent être recopiées dans chaque robot pour éviter les transferts par le réseau ?
Les robots ont besoin des données statiques pour se déplacer. On peut donc décider de leur donner les éléments du plan une fois pour toutes. Si la place nécessaire n'est pas trop importante.
3.2) Quelles sont les données qui doivent être sauvegardées ? Quel sera le type de support utilisé ?
Les données "temporaires" comme l'affectation
du matériel dans une salle peuvent être sauvegardées
régulièrement sur un support à longévité
faiblement garantie comme un support magnétique (souple ou dur).
3.3) Quelles sont les données qui doivent être archivées ? Quel sera le type de support utilisé ?
Les données statiques (à savoir les éléments du plan et les caractéristiques du matériel) doivent être archivées car elles doivent être pérennes (elles sont généralement reproduites sur un support papier en lieu sûr).
3.4) Comment les robots pourront-ils se localiser par rapport au plan ?
Le problème principal des robots est de se repérer dans l'espace. Il existe beaucoup de solutions techniques éprouvées (antennes et balises radio, gyroscopes, GPS, marquages au sol avec lecture optique, etc.) mais plus ou moins coûteuses. Les distances à parcourir étant relativement faibles et le positionnement relativement peu précis (si on ne demande pas à un robot de poser un ordinateur sur le bord d'une table…), tracer des lignes au sol pour une lecture optique et compter les tours de roues devraient suffire.
Il ne faut cependant pas négliger les
obstacles "naturels" comme les chaises au milieu des couloirs mais surtout
tenir compte des obstacles "accidentels" tels que les élèves
qui s'amuseront à donner des coups de pieds dans les robots. Un
recalage du positionnement théorique sur le positionnement réel
est donc à prévoir…