Base de Donnees Sil 1
Base de Donnees Sil 1
Base de Donnees Sil 1
INTRODUCTION
Dans les formes traditionnelles de l’informatique, les données sont stockées
sur des supports constituants les fichiers. Ces fichiers sont construits pour
répondre aux besoins des applications informatiques. Leur exploitation connaît
des difficultés liées au fait qu'ils sont utilisés isolement et indépendamment les
uns des autres ; ceci est d'une part coûteux en moyen de stockage de données
et d'autre part pose le problème de cohérence entre les données car la mise à
jour d’une même donnée localisée dans plusieurs fichiers utilisés, par des
applications différentes, peut ne pas être simultanée.
Aujourd’hui, la plupart des utilisateurs ne veulent plus d'un tel système
d’information constitué d’un ensemble de fichiers inflexibles et de données
inaccessibles. Il existe aujourd’hui des systèmes de gestion de base de données
basés sur des langages d'accès puissants.
Dans le déroulement de ce chapitre, nous essayerons de définir ce que c’est
qu'une base de données et les différentes étapes à suivre pour sa mise en
œuvre. On cherchera ensuite à connaître l’utilité des bases de données ; ce que
c’est qu’un système de gestion de base de données, ses principes et ses
objectifs.
I- LES BASES DE DONNÉES
A- Qu'est-ce qu'une base de données ?
Une base de données (Data Base, en Anglais) est un ensemble structuré de
données enregistrées, avec le moins de redondance possible, dans un
ordinateur et accessibles de façon sélective par plusieurs utilisateurs.
INTRODUCTION
Un modèle de données est un ensemble de concepts et de règles permettant
de décrire les données. Il existe généralement trois modèles de données à
savoir : le modèle hiérarchique, le modèle réseau et le modèle rationnel.
C’est l’étude de ce dernier qui fera l’objet de ce chapitre. Il a été (modèle
rationnel) inventé par CODD en 1970 et est basé sur de concepts très simples. Il
lui est associé une théorie qui ne peut être séparée du modèle : c’est la théorie
de la normalisation des relations dont le but est d’éliminer les données
redondantes et de mieux comprendre la structure des données.
I- LES DIFFÉRENTS MODÈLES DE DONNÉES
Le principal objectif est de rendre indépendant les données vis-à-vis des
applications. L’accès à ces données par ces applications pose souvent un
certain nombre de problèmes. Pour simplifier ou réduire ces problèmes
d’accès, plusieurs modèles logiques de données ont vu le jour. On distingue par
ordre chronologique :
A- Le Modèle Hiérarchique
Historiquement premier, il est constitué d’une structure simple à gérer. Dans
cette structure, chaque élément n’a qu’un seul supérieur ; un tel modèle à un
nombre de communication limitée. Il n’y a aucune connexion.
B- Le Modèle Réseau
Le modèle réseau est une extension du modèle précédent. Il permet d'établir
les connexions entre les différents éléments. De cette manière, on dispose d'un
plus grand nombre d'interrogations possible mais elles doivent être toujours
prévues lors de la construction de la base de données.
Exemples
L’expression numcde → datecde signifie qu’à une valeur du numéro d’un bon
de commande correspond une seule valeur de la date de commande ; l’inverse
n’est pas vrai car à une date donnée, on peut passer plusieurs commandes.
L’expression numcde → numcli signifie qu’à une valeur du numéro de
commande correspond une seule valeur du numéro de client ; l’inverse n’est
pas toujours vrai car un client peut passer plusieurs commandes.
1- La réflexivité
On a : S → S ou S1, S2 → S1 ou S1, S2 → S2
Exemple : numcli → numcli
2- L’additivité
Si S → B1 et S → B2 alors S → B1, B2
Exemple : numcli → nomcli et numcli → prencli
alors numcli → nomcli, prencli
3- La projection
Si S → B1, B2 alors S → B1 et S → B2
4- La transitivité
Si S → S1 et S1 → B alors S → B
telcli
0,1
1,N
1 ,1
ETABLIR COMPORTER
LIVRAISON
qtecde
numliv
1,1 dateliv
1,N
FACTURE
1,N
numfact PRODUIT
codprod 1,N
datefact LIVRER
desprod
qteliv
pu
Travail à faire :
1- Indiquer le nombre d’entité, le nombre d’association, d’association binaire,
d’association ternaire, d’association porteuse, d’association hiérarchique,
association non-hiérarchique, CIF et CIM que comporte le schéma.
2- Présenter le tableau de justification des cardinalités.
3- Déduire le Modèle Logique Relationnel des Données correspondant.
4- Présenter, dans un tableau, le degré, la clé primaire et la (les) clé(s)
étrangère(s) de chacune des relations du MLRD obtenu
NOM DE L’ENTITE
identifiant
propriété 2
…………
…………
propriété N
Une association est un lien sémantique définit entre deux ou plusieurs entités.
Son nom est généralement un verbe à l’infinitif. Elle est dite binaire lorsqu’elle
relie exactement deux entités ; ternaire lorsqu’elle relie exactement trois
entités, N-aires lorsqu’elle relie plus de trois entités etc. Elle peut être porteuse
de propriété(s) ou non.
Sur les branches reliant une entité à une association on observe des
cardinalités.
On note deux types de cardinalités : la cardinalité minimum (0 ou 1) et la
cardinalité maximum (1 ou n).
Les différents types de cardinalités (CardMin, CardMax) possibles sont :
Nom_ASSOCIATION Nom_ASSOCIATION
Ou
[Propriété 1] [Propriété]
[Propriété n]
Ou CIF
Une association est dite hiérarchique lorsqu’elle porte sur l’une de ses
branches le type de cardinalité 1,1 ou 0,1. Elle n’est jamais porteuse de
propriété. On la considère comme une contrainte d’intégrité fonctionnelle
(CIF).
Une CIM est une association non hiérarchique. Elle peut être porteuse de
propriété(s) ou non.
1- Dénombrement
On a :
Elément Nombre
Entité 05
Association 05
Association binaire 05
Association ternaire 00
Association porteuse 02
Association hiérarchique 03
Association non hiérarchique 02
CIF 03
CIM 02
Rappel 3 :
Règles de passage du MCD au MLDR
R1 : Toute entité du MCD devient, donne son nom à une relation du MLDR.
L’identifiant de cette entité devient la clé primaire et les propriétés de l’entité
deviennent les attributs.
Remarque : les entités n'ayant que leur identifiant comme élément ne sont pas
concernées par cette règle.
R3 : Toute association non hiérarchique du MCD donne son nom à une relation
du MLDR. La clé primaire de cette relation sera formée par concaténation
(c'est-à-dire par juxtaposition) des identifiants des entités reliées à cette
association. Chaque composant de cette clé formée sera précédé du symbole
dièse (#), sauf dans le cas où ce composant est issu d’une entité n’ayant que
son identifiant comme élément. Les propriétés éventuellement portées par
cette association deviennent les attributs de la relation obtenue.
3- Déduisons le MLDR correspondant au MCD
En appliquant de façon cumulative les règles de passage du MCD au MLDR,
On a :
CLIENT (numcli, nomcli, prencli, vilcli, telcli)
COMMANDE (numcde, datecde, #numcli)
LIVRAISON (numliv, dateliv, #numcde)
FACTURE (numfact, datefact, #numcde)
PRODUIT (codprod, desprod, pu)
COMPORTER (#numcde,#codprod, qtecde)
LIVRER (#numliv,#codprod, qteliv)
Ch Charcuterie P24 D1 3
Al Alcool P22 D2 2
Go Gourmandise P23 D2 10
Ep Epices P29 D2 1
P21 D3 1
P26 D3 1
P30 D3 2
Table « CLIENT »
C-1. La projection
Elle consiste à choisir les noms des colonnes représentant chacun un attribut
exprimant ce que l’on désir obtenir.
Remarque :
La projection consiste en un découpage vertical d’une table de données à
projeter.
nomcli adrcli
D1 12/12/2010 C01
D2 12/12/2010 C02
D3 12/12/2010 C03
C-3. La jointure
C’est une opération fondamentale qui permet de réunir deux par deux des
tables.
En effet, cette opération permet de relier avec une relation d’égalité (on parle
d’équi-jointure) des tables qui ont au moins un attribut_Clé en commun.
La syntaxe est la suivante :
Résolution
- Ecriture algébrique
R1 = SELECTION PRODUIT (puprod >= 4000)
Résultat = PROJECTION R1 (nomprod, puprod)
- Illustration
nomprod puprod
Vin de table rosé 6700
Gruyère 5400
Pâte à tartiner 4800
Raisin 4500
nomcli villecli
100% Alphabétisation Cotonou
Exemple 1 (suite)
g- La liste des produits (nom et quantité en stock) dont la quantité en stock est
d’au moins 50.
Résolution
- Ecriture algébrique
R1 = SELECTION PRODUIT (qtestock >= 50)
Res = PROJECTION R1 (nomprod, qtestock)
- Illustration
nomprod qtestock
Pâte à tartiner 50
Sucre roux 50
Yaourt 126
Fromage 54
Huile d’arachide 87
Moutarde 76
Beurre pasteurisé 100
codprod qtecmde
P21 1
P26 1
P30 2
Exemple 1 (suite)
i- Afficher les codes, libellés et quantités des produits figurant sur le devis de
code D3.
Résolution
- Ecriture algébrique
R1 = SELECTION CONTENIR (coddev = "D3")
R2 = JOINTURE R1, PRODUIT (R1.codprod = PRODUIT.codprod)
Res = PROJECTION R2 (codprod, nomprod, qtecmde)
-Illustration
I- GÉNÉRALITÉS
Une requête (query, en anglais) est une question posée à une base de données
concernant les informations qu’elle contient, par exemple une recherche
d’informations dans la base ou une action exécutée sur ces informations (ajout,
suppression, modification).
Toute requête se comprend sur la base d’un raisonnement en trois temps :
exprimer un besoin d’information ; programmer grâce au langage SQL le moyen
de satisfaire ce besoin ; obtenir la réponse formelle.
Le langage structuré de requêtes (SQL : Structured Query Language, en Anglais)
est un langage informatique (de type requête) standard et normalisé, destiné à
manipuler une base de données relationnelle à l’aide des commandes.
Le but ce chapitre est d’étudier les différentes commandes du langage SQL et
de les mettre en œuvre, par l’écriture des requêtes et leur exécution, en
utilisant Microsoft Access, un logiciel de type Système de Gestion de Base de
Données (SGBD).
UPDATE NomTABLE
WHERE condition ;
Exemple :
UPDATE PRODUIT
SET villecli="Dassa"
WHERE CodCli="C02" ;
WHERE condition ;
On aura :
WHERE codcli="C02" ;
a- Le prédicat NULL
Un attribut (une colonne, un champ...) peut avoir la valeur "NULL" soit en
raison d'information incomplète (la valeur n'était pas connue au moment de
la saisie des données), soit parce que la donnée n'est pas pertinente. La valeur
"NULL" est différente de la valeur par défaut d’un l'attribut : zéro pour un
attribut de type numérique et espace pour un attribut de type caractère.
La syntaxe est : IS NULL et sa négation IS NOT NULL.
b- Le prédicat IN
Il comporte une liste de valeurs et vérifie si une valeur particulière apparaît
sur cette liste.
La syntaxe est : IN (val1, val2, ...) et sa négation NOT IN (val1, val2, ...).
Lorsque la liste des valeurs est connue et fixe, le prédicat IN peut être
remplacé par une suite d'opérateurs logiques OR.
NB : lorsque la liste des valeurs n'est pas connue à priori, comme dans
certaines sous-interrogations (ou sous-requêtes), ce prédicat est nécessaire.
d- Le prédicat BETWEEN
Il permet de comparer la valeur d'un champ par rapport à une borne inférieure
et une borne supérieure (bornes incluses).
NB : en fonction des conditions que l'on veut exprimer au niveau des valeurs
renvoyées par une requête, on peut utiliser les prédicats IN, ANY, ALL ou
EXISTS.
e- Le prédicat ANY
Il permet de vérifier si au moins une valeur de la liste spécifiée (ou renvoyée
par la sous-requête) satisfait la condition.
f- Le prédicat ALL
Permet de vérifier si la condition est réalisée pour toutes les valeurs de la liste
spécifiée (ou renvoyée par la sous-requête).
g- Le prédicat EXISTS
Si la sous-interrogation renvoie un résultat, la valeur retournée est "Vrai" sinon
la valeur "Faux" est retournée.
4. Notion d’alias
Table : COMMANDE
numcmde datecmde adrliv numcli numrep
Table : DEPARTEMENT
coddep nomdep superficie
1010 D08
1010 D09
1010 D11
1011 D03
1011 D11
1012 D04
1012 D10
1013 D01
1013 D02
1014 D11
1015 D06
1015 D07
Table : CONCERNER
numcmde codprod qtecmde
550 P03 50
550 P06 25
550 P09 28
551 P03 31
551 P08 13
552 P01 13
552 P03 18
552 P09 24
553 P02 25
554 P03 21
554 P08 9
555 P01 25
555 P06 18
555 P09 31
556 P02 10
556 P07 12
556 P01 30
557 P01 23
557 P05 8
557 P08 29
558 P06 8
558 P10 11
559 P02 12
559 P05 16
559 P07 8
560 P03 9
560 P04 12
560 P09 24
560 P10 11
562 P01 13
562 P03 15
563 P01 10
563 P02 14
563 P03 12
Travail à Faire :
1- Utiliser le logiciel Microsoft Access pour créer une base de données nommée
"TP ACCESS" en se servant des tables de données ci-dessus.
2- Créer la structure des différentes tables.
3- Afficher toutes les tables précédemment créées.
4- Créer des liens possibles entre les tables affichées.
5- Insérer les données dans les tables.
La syntaxe est
Table1.AttributClé=Table2.AttributClé
P03 Fromage
P05 Suze
P06 Pastis
AZONDE 01 BP 4023
VIVIME Tél. 95 06 11 11
LAWANI 06 BP 004
BALOGOUN 04 BP 2024
ABALO Tél. 97 06 38 18
COCOU Tél. 93 34 41 11
DANSOU Tél. 90 90 04 40
AFANVI 06 BP 3434
FANOU 04 BP 444
EFIOU Tél. 95 90 01 01
GANDONOU Tél. 90 06 38 41
GUEDE 03 BP 2711
ZANNOU 05 BP 3618
MAMADOU 02 BP 4400
PADONOU Tél. 21 01 44 20
OUINSOU 01 BP 2100
Bohicon
Cotonou
Lokossa
Natitingou
Parakou
Porto-Novo
550 13/06/2022
557 17/06/2022
560 19/06/2022
561 13/06/2022
ALLE Constance
BEHANZIN Didier
Borgou 15000
Couffo 8500
Mono 9000
Collines 6500
Zou 12000
Donga 14000
Requête 10 : Noms et adresses des clients dont l’adresse comporte le sigle "BP"
- Ecriture algébrique
R1 = SELECTION CLIENT (adrcli COMME "*BP*")
Résultat = PROJECTION R1 (nomcli, adrcli)
- Ecriture de la requête en SQL
SELECT nomcli, adrcli
FROM CLIENT
WHERE adrcli LIKE "*BP*";
- Résultat attendu
Requête10
nomcli adrcli
AZONDE 01 BP 4023
LAWANI 06 BP 004
BALOGOUN 04 BP 2024
AFANVI 06 BP 3434
FANOU 04 BP 444
GUEDE 03 BP 2711
ZANNOU 05 BP 3618
MAMADOU 02 BP 4400
OUINSOU 01 BP 2100
Requête 12 : Les dates des commandes passées par le client de numéro 4010
- Ecriture algébrique
R1 = SELECTION COMMANDE (numcli = 4010)
Résultat = PROJECTION R1 (UNIQUE datecmde)
- Ecriture de la requête en SQL
SELECT DISTINCT datecmde
FROM COMMANDE
WHERE numcli = 4010;
15/06/2022
17/06/2022
18/06/2022
Requête 13 : Affichage des noms et prix des produits coûtant moins de 3000
- Ecriture algébrique
R1 = SELECTION PRODUIT (prixunit < 3000)
Résultat = PROJECTION R1 (libprod, prixunit)
- Ecriture de la requête en SQL
SELECT libprod, prixunit
FROM PRODUIT
WHERE prixunit < 3000;
- Résultat attendu
Requête13
libprod prixunit
Fromage 600
Requête 16 : Liste des produits dont le prix unitaire est compris entre 2000 et
5000
- Ecriture algébrique
R1 = SELECTION PRODUIT (prixunit ENTRE 2000 ET 5000)
Résultat = PROJECTION R1 (codprod, libprod, prixunit)
553
554
Agbodjèdo
Grand Marché
St Michel
Vèdoko
Wologuèdè
552
555
556
558
559
560
562
563
Requête 21 : Les numéros des clients qui ont passé les commandes de numéros
551, 555 et 560.
- Ecriture en langage algébrique
R1 = SELECTION COMMANDE (numcmde = 551 OU numcmde = 555 OU
numcmde = 560)
Res = PROJECTION R1 (UNIQUE numcli)
- Ecriture de la requête en SQL
SELECT DISTINCT numcli
FROM COMMANDE
WHERE (numcmde = 551
OR numcmde = 555
OR numcmde = 560) ;
- Résultat attendu
Requête21
numcli
4020
4021
4018
558 St Michel
559 St Michel
550
551
554
Requête 24 : Liste des produits dont le nom commence par L ou dont le prix
dépasse 5000
- Ecriture algébrique
4020
4021
4018
GUEDE Zinsou
libprod
Fromage
Pastis
Coca Cola
15/06/2022 Fromage
19/06/2022 Fromage
Requête 31 : Les noms et prénoms des clients qui ont commandé le produit
"Pâte dentifrice"
- Ecriture algébrique
R1 = SELECTION PRODUIT (libprod = "Pâte dentifrice")
R2 = JOINTURE CONCERNER, R1 (CONCERNER.codprod = R1.codprod)
R3 = JOINTURE COMMANDE, R2 (COMMANDE.numcmde = R2.numcmde)
R4 = JOINTURE CLIENT, R3 (CLIENT.numcli = R3.numcli)
Res = PROJECTION R4 (UNIQUE nomcli, prencli)
- Ecriture de la requête en SQL
4010 AZONDE
Nombre
Nombre
QtéTotale
55
205 000
139 275
Superficie_Moyenne
9708,33
Requête 43 : Prix unitaire moyen des produits dont le nom commence par "S".
- Ecriture en langage algébrique
R1 = SELECTION PRODUIT (libprod COMME "S*")
Res = PROJECTION R1 (MOYENNE(prixunit))
- Ecriture de la requête en SQL
SELECT AVG(prixunit) As Prix_Moyen
FROM PRODUIT
WHERE libprod LIKE "S*";
- Résultat attendu
Requête43
Prix_Moyen
3575
100 000
Plus_cher
1025
600
Petite_Superficie
7000
Requête 49 : Pour chaque adresse de livraison, indiquer les noms des produits
- Ecriture en langage algébrique
R1 = GROUPER COMMANDE (adrliv)
R2 = JOINTURE CONCERNER, R1 (CONCERNER.numcmde = R1.numcmde)
R3 = JOINTURE PRODUIT, R2 (PRODUIT.codprod = R2.codprod)
Res = PROJECTION R3 (adrliv, libprod)
- Ecriture de la requête en SQL
SELECT adrliv, libprod
FROM PRODUIT, CONCERNER, COMMANDE
WHERE PRODUIT.codprod = CONCERNER.codprod
AND CONCERNER.numcmde = COMMANDE.numcmde
GROUP BY adrliv, libprod;
- Résultat attendu
NB : pour cette requête, l’utilisation du groupe de mots
Requête49 « pour chaque» suivi de « adresse de livraison », une
adrliv libprod information de la base de données représentée par l’attribut
adrliv, entraine un regroupement des données de l’attribut
Agbodjèdo Pâte dentifrice libprod autour d’une même valeur de l’attribut adrliv ; d’où
l’utilisation de la clause GROUP BY.
Agbodjèdo Lait en poudre
Agbodjèdo Fromage
Godomey Fromage
St Michel Fromage
St Michel Pastis
St Michel Suze
Vèdoko Fromage
Wologuèdè Pastis
4011 2
4013 2
4015 1
4018 1
4020 1
4021 1
4025 1
4029 2
Remarque : au cas où on souhaiterait afficher en plus du numéro, le nom et le prénom des clients, on aura ceci :
555 92
556 52
557 60
560 56
550 3
552 3
555 4
556 3
557 3
559 3
560 4
563 3
Requête 56 : Liste des noms (dans l’ordre alphabétique inverse) des produits
figurant sur la commande 555.
- Ecriture en langage algébrique
R1 = SELECTION CONCERNER (numcmde = 555)
R2 = JOINTURE PRODUIT, R1 (PRODUIT.codprod = R1.codprod)
R3 = ORDONNER R2 (libprod)
Requête56
libprod
Pâte dentifrice
Pastis
Lait en boîte
Coca Cola
Requête 57 : Numéros des commandes qui n’ont fait l’objet d’aucun produit.
- Ecriture de la requête en SQL
SELECT numcmde
FROM COMMANDE
WHERE numcmde NOT IN (SELECT numcmde
FROM COMMANDE C, CONCERNER CO
WHERE C.numcmde = CO.numcmde);
- Résultat attendu
numcmde
561
B- REQUÊTES ACTIONS
WHERE codprod="P02";