RO sans fil imbriqué

[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 caractérisé par une coordonnée géographique (de type CooT, dont le code SQL3 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 possède un type qui l'identifie de façon unique, une marque et une puissance.

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

Question

Proposez une implémentation RO SQL3 sous Oracle exploitant le modèle imbriqué. Vous proposerez un MCD et un MLD préalablement pour vous aider.

Solution

MCD
MLD
1
type CooT <latitude:decimal, longitude:decimal>
2
table Modele (#type:varchar, marque:varchar, puissance:entier)
3
table Relais (#id:entier, coo:CooT, prix:decimal, modele=>Modele)
SQL
1
CREATE TABLE Modele  (
2
type VARCHAR(25),
3
marque VARCHAR(25),
4
puissance Number(6),
5
PRIMARY KEY (type)
6
);
7
8
CREATE TABLE Relais (
9
id NUMBER(9),
10
coo CooT,
11
prix NUMBER(6,2),
12
modele VARCHAR(25) NOT NULL,
13
PRIMARY KEY (id),
14
FOREIGN KEY (modele) REFERENCES Modele (type)
15
);

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
-- Insertion du modèle X1
2
INSERT INTO Modele VALUES ('X1','SuperWif',25);
3
-- Insertion des relais
4
INSERT INTO Relais VALUES (1,CooT(48.853,2.35),100,'X1');
5
INSERT INTO Relais VALUES (2,CooT(48.978,3.01),100,'X1');
6

Question

Écrivez deux requêtes permettant de renvoyer respectivement :

  • La puissance du relais situé à la coordonnée (48.853,2.35)

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

Solution

1
SELECT m.puissance
2
FROM Relais r, Modele m
3
WHERE r.modele = m.type
4
AND r.coo.latitude=48.853 AND r.coo.longitude=2.35
1
SELECT AVG(r.prix)
2
FROM Relais r, Modele m
3
WHERE r.modele = m.type
4
GROUP BY m.marque, m.type