Lab V

[30 min]

Soit le MCD et le MLD en RO ci-après.

1
Type typ_ci <importance:integer, description:string>
2
Type col_ci : collection de typ_ci
3
Type typ_desc <courte:string(100), longue:string)>
4
5
medicament (#nom:string, description typ_desc, ci col_ci)
6
composant (#code:string, intitule:string)
7
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 :

    1. Le Chourix ne doit jamais être pris après minuit.

    2. 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 :

    1. 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

1
CREATE TYPE typ_ci AS OBJECT (
2
importance NUMBER,
3
description VARCHAR(255));
4
/
5
CREATE TYPE col_ci AS TABLE OF typ_ci;
6
/
7
CREATE TYPE typ_desc AS OBJECT (
8
courte VARCHAR(100),
9
longue VARCHAR(255));
10
/
11
12
CREATE TABLE medicament (
13
nom VARCHAR(50),
14
description typ_desc,
15
ci col_ci,
16
PRIMARY KEY (nom))
17
NESTED TABLE ci STORE AS ntci;
18
19
CREATE TABLE composant (
20
code VARCHAR(10),
21
intitule VARCHAR(255),
22
PRIMARY KEY (code));
23
24
CREATE TABLE composition (
25
fkmed VARCHAR(50) REFERENCES medicament(nom),
26
fkcomp VARCHAR(10) REFERENCES composant(code),
27
PRIMARY KEY (fkmed, fkcomp));

Question

Initialisez la base avec les données de test.

Solution

1
INSERT INTO composant VALUES ('HG79', 'Vif-argent allégé');
2
COMMIT;
3
4
INSERT INTO composant VALUES ('AU7979', 'Double soleil');
5
COMMIT;
6
7
INSERT INTO composant VALUES ('SN50', 'Pur étain');
8
COMMIT;
9
10
INSERT INTO medicament VALUES (
11
'Chourix',
12
typ_desc('Médicament contre la chute des choux','Vivamus fermentum...'),
13
col_ci(typ_ci(1,'Ne jamais prendre après minuit'), typ_ci(2,'Ne jamais mettre en contact avec de l''eau'))
14
);
15
INSERT INTO composition VALUES ('Chourix', 'HG79');
16
INSERT INTO composition VALUES ('Chourix', 'AU7979');
17
COMMIT;
18
19
INSERT INTO medicament VALUES (
20
'Tropas',
21
typ_desc('Médicament contre les dysfonctionnements intellectuels',' Suspendisse lectus...'),
22
col_ci(typ_ci(1, 'Garder à l''abri de la lumière du soleil'))
23
);
24
INSERT INTO composition VALUES ('Tropas', 'HG79');
25
COMMIT;

Question

Écrivez la requête permettant d'afficher la liste des médicaments avec leurs descriptions et leurs contre-indications.

Solution

1
SELECT m.nom, m.description.courte, m.description.longue, ci.importance, ci.description
2
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

1
SELECT fkmed 
2
FROM  composition, composant, medicament m, TABLE(m.ci) ci
3
WHERE code=fkcomp AND nom=fkmed
4
AND ci.description LIKE '%eau%'
5
AND intitule LIKE 'Vif-argent%'