Lab V
[30 min]
Soit le MCD et le MLD en RO ci-après.
![](../res/labo_uml-3.png)
Type typ_ci <importance:integer, description:string>
Type col_ci : collection de typ_ci
Type typ_desc <courte:string(100), longue:string)>
medicament (#nom:string, description typ_desc, ci col_ci)
composant (#code:string, intitule:string)
composition (#fkmed=>medicament, #fkcomp=>composant)
Données de test
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.Ses contre-indications sont :
Le Chourix ne doit jamais être pris après minuit.
Le Chourix ne doit jamais être mis au contact avec de l'eau.
Ses composants sont le HG79 et le SN50.
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.Ses contre-indications sont :
Le Tropas doit être gardé à l'abri de la lumière du soleil
Son unique composant est le HG79.
Les composants existants sont :
HG79 : "Vif-argent allégé"
HG81 : "Vif-argent alourdi"
SN50 : "Pur étain"
Question
Implémentez le modèle sous Oracle en RO.
Solution
CREATE TYPE typ_ci AS OBJECT (
importance NUMBER,
description VARCHAR(255));
/
CREATE TYPE col_ci AS TABLE OF typ_ci;
/
CREATE TYPE typ_desc AS OBJECT (
courte VARCHAR(100),
longue VARCHAR(255));
/
CREATE TABLE medicament (
nom VARCHAR(50),
description typ_desc,
ci col_ci,
PRIMARY KEY (nom))
NESTED TABLE ci STORE AS ntci;
CREATE TABLE composant (
code VARCHAR(10),
intitule VARCHAR(255),
PRIMARY KEY (code));
CREATE TABLE composition (
fkmed VARCHAR(50) REFERENCES medicament(nom),
fkcomp VARCHAR(10) REFERENCES composant(code),
PRIMARY KEY (fkmed, fkcomp));
Question
Initialisez la base avec les données de test.
Solution
INSERT INTO composant VALUES ('HG79', 'Vif-argent allégé');
COMMIT;
INSERT INTO composant VALUES ('AU7979', 'Double soleil');
COMMIT;
INSERT INTO composant VALUES ('SN50', 'Pur étain');
COMMIT;
INSERT INTO medicament VALUES (
'Chourix',
typ_desc('Médicament contre la chute des choux','Vivamus fermentum...'),
col_ci(typ_ci(1,'Ne jamais prendre après minuit'), typ_ci(2,'Ne jamais mettre en contact avec de l''eau'))
);
INSERT INTO composition VALUES ('Chourix', 'HG79');
INSERT INTO composition VALUES ('Chourix', 'AU7979');
COMMIT;
INSERT INTO medicament VALUES (
'Tropas',
typ_desc('Médicament contre les dysfonctionnements intellectuels',' Suspendisse lectus...'),
col_ci(typ_ci(1, 'Garder à l''abri de la lumière du soleil'))
);
INSERT INTO composition VALUES ('Tropas', 'HG79');
COMMIT;
Question
Écrivez la requête permettant d'afficher la liste des médicaments avec leurs descriptions et leurs contre-indications.
Solution
SELECT m.nom, m.description.courte, m.description.longue, ci.importance, ci.description
FROM medicament m, TABLE(m.ci) ci
Question
Écrivez la requête permettant de trouver les médicaments qui contiennent à la fois du vif-argent (sous toutes ses formes) et qui ont des contre-indications en rapport avec l'eau.
Solution
SELECT fkmed
FROM composition, composant, medicament m, TABLE(m.ci) ci
WHERE code=fkcomp AND nom=fkmed
AND ci.description LIKE '%eau%'
AND intitule LIKE 'Vif-argent%'