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.
CREATE TYPE CooT AS OBJECT (
latitude DECIMAL(5,3),
longitude DECIMAL(5,3)
);
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
type CooT <latitude:decimal, longitude:decimal>
table Modele (#type:varchar, marque:varchar, puissance:entier)
table Relais (#id:entier, coo:CooT, prix:decimal, modele=>Modele)
SQL
CREATE TABLE Modele (
type VARCHAR(25),
marque VARCHAR(25),
puissance Number(6),
PRIMARY KEY (type)
);
CREATE TABLE Relais (
id NUMBER(9),
coo CooT,
prix NUMBER(6,2),
modele VARCHAR(25) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (modele) REFERENCES Modele (type)
);
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
-- Insertion du modèle X1
INSERT INTO Modele VALUES ('X1','SuperWif',25);
-- Insertion des relais
INSERT INTO Relais VALUES (1,CooT(48.853,2.35),100,'X1');
INSERT INTO Relais VALUES (2,CooT(48.978,3.01),100,'X1');
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
SELECT m.puissance
FROM Relais r, Modele m
WHERE r.modele = m.type
AND r.coo.latitude=48.853 AND r.coo.longitude=2.35
SELECT AVG(r.prix)
FROM Relais r, Modele m
WHERE r.modele = m.type
GROUP BY m.marque, m.type