Lab VIII
30 min
Soit le modèle UML ci-après.

1
Le Chourix a pour description courte "Médicament contre la chute des choux" et pour description longue "Vivamus fermentum semper porta. Nunc diam velit, adipiscing ut tristique vitae, sagittis vel odio. Maecenas convallis ullamcorper ultricies. Curabitur ornare.". Il est conditionné en boîte de 13.
2
Ses contre-indications sont :
3
- Le Chourix ne doit jamais être pris après minuit.
4
- Le Chourix ne doit jamais être mis au contact avec de l'eau.
5
Ses composants sont le HG79 ("Vif-argent allégé") et le SN50 ("Pur étain").
6
7
Le Tropas a pour description courte "Médicament contre les dysfonctionnements intellectuels" et pour description longue "Suspendisse lectus leo, consectetur in tempor sit amet, placerat quis neque. Etiam luctus porttitor lorem, sed suscipit est rutrum non.". Il est conditionné en boîte de 42.
8
Ses contre-indications sont :
9
- Le Tropas doit être gardé à l'abri de la lumière du soleil.
10
Son unique composant est le HG79 ("Vif-argent allégé").
Question
Réaliser l'implémentation R-JSON de ce modèle UML et insérer des données d'exemple.
Solution
1
CREATE TABLE medicament (
2
nom TEXT PRIMARY KEY,
3
description JSON NOT NULL,
4
cond INTEGER NOT NULL,
5
ci JSON,
6
comp JSON NOT NULL);
1
INSERT INTO medicament VALUES (
2
'Chourix',
3
'{"desc_courte":"Médicament contre la chute des choux","desc_longue":"Vivamus fermentum semper porta. Nunc diam velit, adipiscing ut tristique vitae, sagittis vel odio. Maecenas convallis ullamcorper ultricies. Curabitur ornare."}',
4
13,
5
'["Le Chourix ne doit jamais être pris après minuit.","Le Chourix ne doit jamais être mis au contact avec de l''eau."]',
6
'[
7
{"code":"HG79", "nom":"Vif-argent allégé"},
8
{"code":"SN50", "nom":"Pur étain"}
9
]'
10
);
11
12
INSERT INTO medicament VALUES (
13
'Tropas',
14
'{"desc_courte":"Médicament contre les dysfonctionnements intellectuels","desc_longue":"Suspendisse lectus leo, consectetur in tempor sit amet, placerat quis neque. Etiam luctus porttitor lorem, sed suscipit est rutrum non."}',
15
42,
16
'["Le Tropas doit être gardé à l''abri de la lumière du soleil."]',
17
'[{"code":"HG79", "nom":"Vif-argent allégé"}]'
18
);
19
Question
Proposez 3 vues permettant de visualkiser :
La liste des noms des médicaments avec leurs contre-indications
La liste des des noms des médicaments avec leurs composants
La liste des noms des médicaments avec leur description courte, leur conditionnement, le nombre de leurs contre-indications et le nombre de leurs composants
Solution
1
CREATE VIEW v_ci (medicament, ci) AS
2
SELECT m.nom, ci.*
3
FROM medicament m, JSON_ARRAY_ELEMENTS(m.ci) ci;
1
medicament | ci
2
------------+----------------------------------------------------------------
3
Chourix | "Le Chourix ne doit jamais être pris après minuit."
4
Chourix | "Le Chourix ne doit jamais être mis au contact avec de l'eau."
5
Tropas | "Le Tropas doit être gardé à l'abri de la lumière du soleil."
1
CREATE VIEW v_comp (medicament, comp_code, comp_nom) AS
2
SELECT m.nom, c->>'code' AS comp_code, c->>'nom' AS comp_nom
3
FROM medicament m, JSON_ARRAY_ELEMENTS(m.comp) c;
1
medicament | comp_code | comp_nom
2
------------+-----------+-------------------
3
Chourix | HG79 | Vif-argent allégé
4
Chourix | SN50 | Pur étain
5
Tropas | HG79 | Vif-argent allégé
1
CREATE VIEW v_nbcomp (medicament, nbco) AS
2
SELECT medicament, COUNT(*)
3
FROM v_comp
4
GROUP BY medicament;
5
6
CREATE VIEW v_nbci (medicament, nbci) AS
7
SELECT medicament, COUNT(*)
8
FROM v_ci
9
GROUP BY medicament;
10
11
CREATE VIEW v_medicament AS
12
SELECT m.nom, m.description->>'desc_courte' AS desc_courte, co.nbco, ci.nbci
13
FROM medicament m
14
JOIN v_nbcomp co ON m.nom=co.medicament
15
LEFT JOIN v_nbci ci ON m.nom=ci.medicament;
1
nom | desc_courte | nbco | nbci
2
---------+--------------------------------------------------------+------+------
3
Chourix | Médicament contre la chute des choux | 2 | 2
4
Tropas | Médicament contre les dysfonctionnements intellectuels | 1 | 1