RO sans fil référencé
[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 (représentée par une chaîne de caractère) 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.
Question
Proposez une implémentation RO SQL3 sous Oracle exploitant les tables objets. Vous proposerez un MCD et un MLD préalablement pour vous aider.
Solution
MCD
MLD
type ModeleT <type:varchar, marque:varchar, puissance:entier>
type RelaisT <id:entier, coo:chaine, prix:decimal, modele =>o Modele>
table Modele of ModeleT (#type)
table Relais of RelaisT (#id)
Remarque :
On pourrait représenter Relais en R, le passage par le RO n'est pas utilisé ici (un relais n'est jamais référencé).
SQL
CREATE TYPE ModeleT AS OBJECT (
type varchar(25),
marque varchar(25),
puissance number
);
/
CREATE TABLE Modele OF ModeleT (
PRIMARY KEY (type)
);
CREATE or replace TYPE RelaisT AS OBJECT (
id number,
coo varchar(11),
prix number,
modele REF ModeleT
);
/
CREATE TABLE Relais OF RelaisT (
PRIMARY KEY (id),
modele NOT NULL,
SCOPE FOR (modele) IS Modele
);
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
DECLARE
x1 REF ModeleT;
BEGIN
-- Insertion du modèle X1
INSERT INTO Modele VALUES ('X1', 'SuperWif', 25);
-- Récupération de l'OID de X
SELECT REF(m) INTO x1
FROM Modele m
WHERE type='X1';
-- Insertion des relais
INSERT INTO Relais VALUES (1, '48.853,2.35',100,x1);
INSERT INTO Relais VALUES (2, '48.978,3.01',100,x1);
END;
Question
Écrivez deux requêtes permettant de renvoyer respectivement :
La puissance du relais 1
La moyenne des prix des relais pour chaque modèle
Solution
SELECT r.modele.puissance
FROM Relais r
WHERE r.id=1
SELECT AVG(r.prix)
FROM Relais r
GROUP BY r.modele.type