doc

publicité
MSBM
2002-2003
TD 5 : Conception d'une base de données de A à Z
Ce TD a pour objectif de vous faire concevoir une base de données de A à Z selon des spécifications données.
Pour cela, vous aurez à :






modéliser l'organisation selon les spécifications imposées
convertir le schéma entité-association en schéma relationnel
rédiger le script de création du schéma de la base de données
écrire le script d'insertion des tuples
modifier le schéma en ajoutant des contraintes
interroger la base de données en traduisant les requêtes dans le langage demandé
Le langage SQL (Structured Query Langage) peut être décomposé en 3 parties :
 le langage de définition des données (LDD) qui permet de définir le schéma de la base de données,
c'est-à-dire que ce langage regroupe les instructions de création des relations, vues et contraintes
d'intégrité,
 le langage de manipulation des données (LMD) qui permet d'interroger les données
 le langage de contrôle des données (LCD) qui permet de gérer les accès aux données c'est-à-dire les
droits des utilisateurs de la base de données
Rq : Vous trouverez sur la page http://www-lsr.imag.fr/Les.Personnes/Herve.Martin/HTML/SQL.htm une
présentation concise et bien faite des trois parties du langage SQL.
Vous trouverez sur ma page personnelle (http://www.lirmm.fr/~berasalu puis enseignements puis MSBM2003) des liens vers d'autres cours sur les bases de données ainsi qu'un petit aide-mémoire sur le langage SQL.
1 SPECIFICATIONS
Le but est de décrire de manière très simplifiée le mode de fonctionnement d'un ensemble de sociétés
pharmaceutiques.
" Une société pharmaceutique a des employés. Certains de ces employés sont des
attachés de recherche clinique (ARC) qui ont pour mission de tester les médicaments,
développés par la société qui les emploie et agissant sur des pathologies, avant leur
mise sur le marché.
Une société est identifiée par son code siret, a un nom, un siège social (lieu) et un
PDG.
Un employé est identifié, au sein de son entreprise, par un matricule, porte un nom, a
une date de naissance, a été embauché a une certaine date, perçoit un salaire et est
dirigé par un supérieur .
Un ARC travaille sur des médicaments appartenant à un certain secteur médical.
Un médicament est identifié par un numéro au sein de la société qui le développe,
porte un nom, a un type de présentation et contient un principe actif.
Un principe actif est une molécule identifiée par son nom, a une formule.
Une pathologie est identifiée par un libellé et possède une description.
Un principe actif agit potentiellement sur plusieurs pathologies. "
MSBM
2002-2003
2 MODELE ENTITE-ASSOCIATION
Construisez le modèle entité-association de cette organisation grâce aux spécifications indiquées ci-dessus.
Pour cela, déterminez :
 les types d'entités nécessaires
 les types d'association
 les cardinalités caractérisant les types d'association
3 MODELE RELATIONNEL
Convertissez le modèle entité-association précédent en modèle relationnel.
o Que deviennent les types d'entité ?
o Que deviennent les types d'association ?
o Indiquer les types des attributs impliqués dans les relations que vous avez créées.
o Indiquer les dépendances fonctionnelles ainsi que les contraintes d'intégrité référentielles ?
Dans le langage de définition des données standard, on crée une table grâce aux instructions suivantes :
CREATE TABLE nom_table ( att1 type_att1, att2 type_att2, ..... , atti type_atti, ..... , attn val_attn);
Les principaux types de données qui sont disponibles dans les bases de données standard sont :
NUMBER[(longueur,[précision])
Ce type de données permet de stocker des données numériques à la fois entières et réelles dont la valeur
est comprise entre 10^-130 et 10^125/ avec une précision de 38 chiffres.
longueur
précise le nombre maximum de chiffres significatifs stockés (par défaut 38),
précision
donne le nombre maximum de chiffres après la virgule (par défaut 38), sa valeur peut être comprise
entre -84 et 127. Une valeur négative signifie que le nombre est arrondi à gauche de la virgule.
CHAR(longueur)
Ce type de données permet de stocker des chaînes de caractères de longueur fixe. Longueur doit être
inférieur à 255, sa valeur par défaut est 1.
VARCHAR(longueur)
Ce type de données permet de stocker des chaînes de caractères de longueur variable. Longueur doit
être inférieur à 2000, il n'y a pas de valeur par défaut.
DATE
Ce type de données permet de stocker des données constituées d'une date et d'une heure.
RAW(longueur)
Ce type de données permet de stocker des caractères non imprimables.
LONG
Ce type de données permet des stocker des chaînes de caractères de longueur variable et inférieure à
2^31 -1. Les colonnes de ce type sont soumises à certaines restrictions ;

une table ne peut pas contenir plus d'une colonne de ce type ;

les colonnes de ce type ne peuvent pas apparaître dans des contraintes d'intégrité ;

les colonnes de ce type ne peuvent pas être indexées ;

les colonnes de ce type ne peuvent pas apparaître dans des clauses : WHERE, GROUP BY, ORDER BY
ou CONNECT BY ainsi que dans un DISTINCT.
MSBM
2002-2003
Pour créer une contrainte d'intégrité, il existe plusieurs syntaxes possibles :
1. Soit vous indiquez la contrainte quand vous définissez l'attribut de la relation
2. Soit vous indiquez la contrainte après la définition des attributs de la relation
3. Soit vous modifier le schéma de la relation
Comme nous l'avons vu, il existe différentes contraintes d'intégrité :
a. Dépendances fonctionnelles (en particulier, clé primaire)
b. Contraintes de domaines
c. Contraintes d'intégrité référentielles (clés référentielles)
Syntaxe :
a. création d'une contrainte primaire
1.
CREATE TABLE nom_table
( att1 type_att1 PRIMARY KEY,
att2 type_att2,
..... ,
atti type_atti,
..... ,
attn val_attn);
2.
CREATE TABLE nom_table
( att1 type_att1,
att2 type_att2,
..... ,
atti type_atti,
..... ,
attn val_attn
CONSTRAINT pk_nom_table
PRIMARY KEY);
3.
ALTER TABLE nom_table ADD CONSTRAINT
pk_nom_table
PRIMARY KEY
b. création d'une contrainte de domaine
1.
CREATE TABLE nom_table
( att1 type_att1 CHECK(att1 > 0),
att2 type_att2,
..... ,
atti type_atti,
..... ,
attn val_attn);
2.
CREATE TABLE nom_table
( att1 type_att1,
att2 type_att2,
att1;
MSBM
2002-2003
..... ,
atti type_atti,
..... ,
attn val_attn
CONSTRAINT
chk_nom_table_att1
CHECK(att1
> 0));
3.
ALTER TABLE nom_table ADD CONSTRAINT
chk_nom_table_att1
ALTER TABLE nom_table ADD CONSTRAINT
pk_nom_table
CHECK(att1
PRIMARY KEY
> 0);
att1;
c. création d'une contrainte d'intégrité référentielle
1.
CREATE TABLE nom_table
( att1 type_att1 REFERENCES table_bidule(att_machin ),
att2 type_att2,
..... ,
atti type_atti,
..... ,
attn val_attn);
2.
CREATE TABLE nom_table
( att1 type_att1,
att2 type_att2,
..... ,
atti type_atti,
..... ,
attn val_attn
CONSTRAINT fk_nom_table_att1
table_bidule(att_machin ),
REFERENCES
3.
ALTER TABLE nom_table ADD CONSTRAINT
fk_nom_table_att1
REFERENCES
table_bidule(att_machin );
4 MISE A JOUR DU SCHEMA RELATIONNEL
Nous allons modifier le schéma relationnel établi en ajoutant des contraintes à ce schéma. Pour chaque
contrainte que vous devez ajouter indiquer à quel type de contrainte elle correspond.
 Les salaires des employés sont supérieur ou égal au SMIC (on admet que tout employé travaille à temps
complet et donc touche au moins le SMIC).
 Les secteurs auxquels appartiennent les ARCs sont pris parmi l'ensemble suivant : cancérologie,
rhumatologie, cardiologie, dermatologie.
 Un employé doit avoir plus de 18 ans et moins de 65 ans.
Dans le langage de définition des données, l'ajout de contraintes se fait d'après la syntaxe que nous avons vu
dans la partie 3. Servez-vous de l'instruction qui permet d'altérer une relation.
MSBM
2002-2003
Comme nous l'avons sous ACCESS, le langage de définition des données permet d'activer ou de désactiver une
contrainte. Ceci se fait de la façon suivante :
ACTIVATION :
DESACTIVATION :
ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte;
ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte;
5 MISE A JOUR DES DONNEES
Maintenant que nous avons créé le schéma de la base, il faut y insérer des données, les mettre à jour et,
pourquoi pas en supprimer. Pour cela, vous allez créer un script fait d'une suite de d'instructions du type suivant
:
 instruction d'insertion
INSERT INTO nom_table VALUES (val_att1, val_att2, ......, val_atti, ......., val_attn);
 instruction de modification
UPDATE nom_table SET atti = new_val WHERE attj = une_valeur;
 instruction de suppression
DELETE FROM nom_table WHERE attj = une_valeur;
Pour vous inspirer, vous trouverez à l'adresse
http://www.lirmm.fr/~berasalu/enseignements/MSBM/TP/TP3_ACCESS/
des exemples de tuples à insérer.
Quelle instruction (SQL) feriez-vous pour augmenter le salaire de tous les employés agés de plus de 50 ans de
10% ?
Quelle instruction (SQL) feriez-vous pour supprimer les sociétés dont le siège social se trouvent à Paris ? Quel
sera le résultat de l'exécution de cette instruction ?
6 INTERROGATION DE LA BASE
Nous avons déjà vu ensemble des exemples de requêtes SQL dans les TD 3 et 4.
Nous allons maintenant interroger la base de données construite. Les requêtes suivantes exprimées en français
sont à traduire en algèbre relationnelle (lorsque c'est possible) puis en SQL.
1. Donner les noms et matricules des employés de la société de code Siret 5.
2. Donner les noms et matricules des employés de la société Bayer Pharma.
3. Donner les noms et matricules des employés des sociétés Bayer Pharma, Pierre Fabre, Biogalénique et
Sanofi Synthelabo.
4. Lister les ARCs (noms et matricules) spécialisés en cardiologie.
5. Lister les ARCs (noms et matricules) qui ont été embauchés entre 1990 et 1992.
6. Donner la liste des pathologies triée par ordre alphabétique.
7. Donner les sociétés dont le siège social se trouve à Paris.
8. Donner le nombre de médicaments décrits dans la base de données.
9. Donner pour chaque société le nombre de molécules actives mises au point.
10. Donner les sociétés qui ont mis au point au moins deux molécules actives.
11. Quelle est la société qui a le plus de molécules actives à son actif ?
12. Quelles sont les molécules actives qui ont un rôle thérapeutique dans l'hypertension artérielle ?
13. Combien de molécules actives ont un rôle dans l'hypertension artérielle?
14. Quels sont les médicaments qui sont impliqués dans le traitement de l'hypertension artérielle ?
15. Quelles sont les molécules qui ont un rôle thérapeutique dans au moins deux pathologies ?
16. Quelles sont les molécules qui agissent à la fois sur la grippe et sur le syndrome de Kawasaki ?
17. Quelles sont les pathologies qui peuvent être soulagées par plusieurs molécules actives ?
MSBM
2002-2003
18. Quelles sont les noms de sociétés qui ont mis au point des molécules actives à l'origine de
médicaments appartenant la famille des analgésiques ?
19. Quelles sont les molecules qui n'agissent que sur la grippe ?
20. Quelles sont les molécules qui agissent sur la grippe mais qui n'agissent pas sur l'hypertension
artérielle ?
21. Quels sont les molécules actives qui agissent dans toutes les pathologies ?
Téléchargement