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
1
type ModeleT <type:varchar, marque:varchar, puissance:entier>
2
type RelaisT <id:entier, coo:chaine, prix:decimal, modele =>o Modele>
3
4
table Modele of ModeleT (#type)
5
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
1
CREATE TYPE ModeleT AS OBJECT (
2
type varchar(25),
3
marque varchar(25),
4
puissance number
5
);
6
/
7
CREATE TABLE Modele OF ModeleT (
8
PRIMARY KEY (type)
9
);
10
11
CREATE or replace TYPE RelaisT AS OBJECT (
12
id number,
13
coo varchar(11),
14
prix number,
15
modele REF ModeleT
16
);
17
/
18
CREATE TABLE Relais OF RelaisT (
19
PRIMARY KEY (id),
20
modele NOT NULL,
21
SCOPE FOR (modele) IS Modele
22
);

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
4
BEGIN
5
6
-- Insertion du modèle X1
7
INSERT INTO Modele VALUES ('X1', 'SuperWif', 25);
8
9
-- Récupération de l'OID de X
10
SELECT REF(m) INTO x1
11
FROM Modele m
12
WHERE type='X1';
13
14
-- Insertion des relais
15
INSERT INTO Relais VALUES (1, '48.853,2.35',100,x1);
16
INSERT INTO Relais VALUES (2, '48.978,3.01',100,x1);
17
18
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

1
SELECT r.modele.puissance
2
FROM Relais r
3
WHERE r.id=1
1
SELECT AVG(r.prix)
2
FROM Relais r
3
GROUP BY r.modele.type