RO sans fil

[30 minutes]

L'on souhaite réaliser une base de données permettant de gérer tous les relais Wifi sur un site d'entreprise. Chaque relais est identifié par une coordonnée géographique (de type CooT, dont le code est fourni ci-après) et fait référence à un modèle. On associe également à chaque relais son prix d'achat. Chaque modèle est décrit par une marque et un type et possède une puissance.

1
CREATE TYPE CooT AS OBJECT (
2
latitude real,
3
longitude real
4
);

Question

Proposez une implémentation RO SQL3 sous Oracle exploitant les tables-objets et le modèle imbriqué (vous pouvez faire un MCD et un MLD préalablement pour vous aider).

Solution

MCD
MLD
1
type CooT <lat, long>
2
type ModeleT <marque, type, puissance>
3
type RelaisT <coo:CooT, prix, modele =>o Modele>
4
5
table Modele of ModeleT (#marque, #type)
6
table Relais of RelaisT (#coo)
SQL
1
CREATE TYPE RelaisT AS OBJECT (
2
coo CooT,
3
prix real,
4
modele REF ModeleT
5
);
6
/
7
CREATE TYPE ModeleT AS OBJECT (
8
marque varchar,
9
type varchar,
10
puissance integer
11
);
12
/
13
CREATE TABLE Relais OF RelaisT (
14
PRIMARY KEY (coo),
15
modele NOT NULL,
16
SCOPE FOR (modele) IS modele
17
);
18
CREATE TABLE Modele OF ModeleT (
19
PRIMARY KEY (marque, type),
20
puissance NOT NULL
21
);

Question

Insérer les données suivantes dans votre base de données :

  • Un modèle de marque SuperWif et de type X1, puissance 25mW

  • Deux relais de ce modèle respectivement aux coordonnées (48.853 ; 2.35) et (48.978 ; 3.01), achetés chacun 100€.

Solution

1
DECLARE
2
x1 REF ModeleT;
3
BEGIN
4
-- Insertion du modèle X1
5
INSERT INTO Modele VALUES ('SuperWif', 'X1', 25);
6
-- Récupération de l'OID de X
7
SELECT REF(m) INTO x1
8
FROM Modele m
9
WHERE marque='SuperWif' AND type='X1';
10
-- Insertion des relais
11
INSERT INTO Relais VALUES (CooT(48.853,2.35),100,x1);
12
INSERT INTO Relais VALUES (CooT(48.978,3.01),100,x1);
13
END;

Question

Écrivez deux requêtes permettant de renvoyer respectivement :

  • La puissance du relais situé à la coordonnée (47.5 ; 1.5)

  • La moyenne des prix des relais pour chaque modèle (type et marque)

Solution

1
SELECT r.modele.puissance
2
FROM Relais r
3
WHERE r.coo.latitude=47.5 AND r.coo.longitude=1.5
1
SELECT AVG(r.prix)
2
FROM Relais r
3
GROUP BY r.modele.marque, r.modele.type