Vous êtes sur la page 1sur 8

Schéma relationnel et requêtes SQL : le cas SPORTONS

Propriétés Description
Intitulé long Utilisation d’une base de données pour une gestion de stocks.
Formation Classes de première Sciences et technologies de la gestion (STG)
concernée
Matière « Information et gestion »
Notions 1.2 Les principales activités de l’entreprise : gestion des approvisionnements et des stocks
2.3. La base de données
- Le schéma de la base de données
- Le langage de requête SQL
Restriction, projection, jointure, tri

Présentation A partir de l'étude du contenu des tables d'une base de données et de l'étude du schéma
relationnel associé, l'élève répond à des questions qui vont lui permettre de comprendre le
schéma proposé.
Il va ensuite analyser, modifier et créer des requêtes en langage SQL pour répondre aux
besoins de gestion de stocks.
Pré-requis Le schéma relationnel et la base de données.
Le langage SQL (Restriction, projection, jointure, tri).
La gestion des stocks.
Outil SGBD Access
Mots-clés Gestion de stocks, SQL, schéma relationnel
Durée 2h
Auteur(es) Estelle CYBULA-SORNETTE et Véronique STROILI
Version 1.0
Date de 14 Janvier 2005
publication

http://www.reseaucerta.org © CERTA - octobre 2019 – v1.0 Page 1/8


Le schéma relationnel - le langage SQL

Énoncé

Contexte de travail
SPORTONS TOUS est une petite entreprise spécialisée dans la vente de vêtements de sport. Elle
achète les vêtements auprès d'entreprises de confection qui lui proposent des produits variés en
termes de modèles, matières, couleurs et tailles.
Afin d’optimiser la gestion de ses stocks, notamment éviter les ruptures de stock, mais aussi d’affiner
sa politique de prix, Mme Marinière souhaite utiliser une base de données. La société chargée de la
réalisation de la base a fourni le modèle donné en annexe ainsi qu’un extrait du contenu des tables
associées.
Mme Marinière vous demande d’étudier ce modèle afin de lui permettre de vérifier que celui-ci
correspond bien à son besoin en matière de gestion de stocks.

Travail à Réaliser

Question 1 :
Mme Marinière souhaite mieux comprendre le modèle relationnel qui lui est proposé
et vous demande de l’aider dans sa démarche.
Répondre aux questions suivantes et indiquer le (ou les) table(s) vous ayant permis
d'y répondre.
1.1 – Quelles sont les couleurs et les tailles des vestes de lin commercialisées?

1.2 - Le prix d'achat d’un produit peut-il varier en fonction de la date d’entrée en stock ? Pourquoi ?

1.3 - Le prix de vente d’un produit peut-il varier en fonction de la date de sortie de stock ? Qu’en
pensez-vous ?

1.4 - A quel(s) prix la responsable a-t-elle acheté et vendu le produit « Pull marin » en taille 2 couleur
blanche, et à quelle(s) date(s) a-t-il été vendu ?

Question 2 :
Afin de préparer son inventaire de fin d’année, Mme marinière vous
demande d'élaborer les requêtes SQL suivantes :
2.1 - La liste de tous les produits commercialisés et leurs caractéristiques (référence, taille, couleur,
prix de vente) triés par ordre croissant sur le libellé.

2.2 – Combien reste-t-il en stock de "pull marin" bleu en taille 3 (libellé du produit et Quantité en
stock) ?

Mme Marinière vous demande également de répondre aux questions ci-après :


2.3 - Quel est l'énoncé de cette requête ? Quel en est le résultat (issu des tables) ?

SELECT PRODUIT.Reference, QuantiteEntrée, DateEntrée


FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference
AND PRODUIT.Reference="P102"
AND DateEntrée=20/01/2004 ;

http://www.reseaucerta.org © CERTA - octobre 2019 – v1.0 Page 2/8


2.4 - Afin de proposer un plus grand choix de couleurs à ses clients, Mme Marinière désire connaître
les couleurs commercialisées du produit « veste toile ». Chercher la solution à cette requête dans les
tables fournies puis, écrire la requête correspondante (afficher la référence et la couleur du produit).

Question 3 :
Désirant calculer les marges réalisées sur la vente de ses produits, Mme Marinière
vous demande :
3.1 - D'écrire la requête SQL donnant le prix de vente et le(s) prix d'achat du produit P113 ?

3.2 - De l’aider à comprendre le résultat de cette requête qui lui a été proposée, mais dont elle ne
connaît pas le résultat. Pouvez-vous l’éclairer.

SELECT PrixEntrée
FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference
AND Taille = "4"
AND Couleur = "rouge"
AND Libellé = "Polo labuze"
AND DateEntree = 15/03/2004;

3.3 - D'étudier la marge dégagée sur la vente de certains produits. Pour cela :
- Donner la requête SQL permettant de savoir à quel prix le produit ci-dessus est vendu.
- Calculer la marge réalisée sur la vente de ces 2 produits (P113 et Polo labuze en taille 4
et rouge)
- Dire ce que représente cette marge en pourcentage du prix d’achat ?
- Analyser les résultats obtenus.

Question 4 :
Compléter et/ou corriger les requêtes SQL suivantes :
Mme Marinière voulant minimiser le délai de rotation de ses stocks, et
particulièrement du produit P119 qui encombre les rayons, vous demande de :
4.1 – Calculer le délai entre la date de sortie et la date d’entrée du produit correspondant à l’entrée
numéro 23, en précisant le libellé du produit et la date d’entrée du produit en stock.

SELECT Libellé, (DateSortie – DateEntrée) AS Délai, DateEntrée


FROM PRODUIT
WHERE NumeroEntree = 23 AS : permet de renommer le champ
qui contiendra le résultat du calcul.

Après avoir complété la requête ci-dessus, commenter le résultat obtenu.

4.2 – Afficher la liste des produits achetés avant avril 2004 et restant en stock, avec leur(s) référence,
libellé, taille, couleur, prix d’achat, prix de vente, date d'achat et quantité en stock. Classer ces
produits du prix d'achat le plus élevé au moins élevé, puis par ordre chronologique d’achat.

SELECT PRODUIT.Reference, Libellé, taille,couleur, PrixEntrée, PrixVente, DateEntrée,


QuantitéEnStock
FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference
Parallèlement, Mme Marinière s’inquiète des éventuelles ruptures de stock et vous
demande :

http://www.reseaucerta.org © CERTA - octobre 2019 – v1.0 Page 3/8


4.3 – La liste des produits achetés entre le 01 Mars et le 01 Août qui ne sont plus disponibles à la
vente.
SELECT Distinct Libellé
FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference

4.4 – Quel est le résultat donné par cette requête ?

SELECT Libellé, QuantiteEnStock


FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference
AND DateEntrée > 01/01/2004
AND Saison = « Hiver »
AND QuantitéStock > 0;

Quelle(s) modification(s) de la structure de la base de données proposez-vous pour que cette requête
puisse fonctionner ?

Quel serait l’intérêt d’une telle modification dans le cadre de la gestion des stocks ?

Annexe : Le modèle relationnel et le contenu des tables

Le schéma relationnel

Légende :
Chaque clé primaire est précédée d'une clé
Chaque clé étrangère est suivie de (FK) (soit Foreign Key)
Taille : taille du vêtement.

Remarque : Ce champ sera de type texte dans la base de données. En effet, il n'est pas question de
faire des opérations (addition) sur la taille d'un vêtement.

QuantitéEntrée : quantité de produit entrée en stock à une certaine date.


QuantitéSortie : quantité de produit sortie de stock afin d'être mis en rayon et vendu.
QuantitéEnStock : quantité de produit en stock, est un champ calculé (somme des quantités entrées
en stock – somme des quantités sorties du stock, pour un même produit). Ce champ est mis à jour
après chaque entrée et chaque sortie de stock. Ce champ a été ajouté au niveau physique afin de
faciliter l'exploitation de la base de données (notamment au niveau des requêtes).

http://www.reseaucerta.org © CERTA - octobre 2019 – v1.0 Page 4/8


Voici un extrait du contenu des tables :
PRODUIT

ENTREE_STOCK SORTIE_STOCK

Correction

Question 1 :

http://www.reseaucerta.org © CERTA - octobre 2019 – v1.0 Page 5/8


Mme Marinière souhaite mieux comprendre le modèle relationnel qui lui est proposé et vous
demande de l’aider dans sa démarche.

Répondre aux questions suivantes et Indiquer le (ou les) table(s) vous ayant permis d'y
répondre.

1.1 – Quelles sont les couleurs et les tailles des vestes de lin commercialisées ?
Table PRODUIT, couleur crème, tailles 1, 2, 3

1.2 - Le prix d'achat d’un produit peut-il varier en fonction de la date d’entrée en stock ? Pourquoi ?
Table ENTREE_STOCK, oui le prix d’achat varie en fonction des dates d’achat, car il peut y avoir des
articles en promotion, des variations de la demande (qui influeraient sur le prix du grossiste), des
variations des prix des matières premières...

1.3 - Le prix de vente d’un produit peut-il varier en fonction de la date de sortie de stock ? Qu’en
pensez-vous ?
Table PRODUIT, non le prix de vente d’un produit ne varie pas dans ce modèle.
Dans la réalité ce cas de figure est envisageable (soldes, forte augmentation du prix d’achat...), il
faudrait alors placer ce champ dans la table SORTIE_STOCK.

1.4 - A quel(s) prix avons-nous acheté et vendu le produit « Pull marin » en taille 2 couleur blanche, et
à quelle(s) date(s) a-t-il été vendu ?
Tables PRODUIT, ENTREE_STOCK, SORTIE_STOCK
P103 acheté 42 € et vendu le 01/02/2004 et le 10/02/2004, pour 75 €.

Question 2 :

Afin de préparer son inventaire de fin d’année, Mme marinière vous demande d'élaborer les
requêtes SQL suivantes :
2.1 - La liste de tous les produits commercialisés et leurs caractéristiques (référence, taille, couleur,
prix de vente) triés par ordre croissant sur le libellé.
SELECT Reference, Taille, Couleur, PrixVente
FROM PRODUIT
ORDER BY Libellé;

2.2 – Combien reste-t-il en stock de "pull marin" bleu en taille 3 (libellé du produit et Quantité en
stock) ?
SELECT Libellé, QuantitéEnStock
FROM PRODUIT .
WHERE Libellé="pull marin" AND Taille="3" AND Couleur="bleu" ; Le champ taille est de type texte

Mme Marinière vous demande également de répondre aux questions ci-dessous :

2.3 - Quel est l'énoncé de cette requête ? Quel en est le résultat (issu des tables) ?

SELECT PRODUIT.Reference, QuantitéEntrée, DateEntrée


FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference Remarque : les dates doivent être
AND PRODUIT.Reference ="P102" placées entre # sous Access.
AND DateEntrée=20/01/2004; ex : DateEntrée= #20/01/2004#

Enoncé : Quelle quantité de produit P102 a été achetée le 20 janvier 2004 ?


Résultat : Quantité = 3

http://www.reseaucerta.org © CERTA - octobre 2019 – v1.0 Page 6/8


2.4 - Afin de proposer un plus grand choix de couleur à ses clients, Mme Marinière désire connaître
les couleurs commercialisées du produit « veste toile ». Chercher la solution à cette requête dans les
tables fournies puis, écrire la requête correspondante (afficher la référence et la couleur du produit).

SOLUTION : Référence P118, couleur jaune.

SELECT Reference , Couleur


FROM PRODUIT
WHERE Libellé = "veste toile";

Question 3 :

Désirant calculer les marges réalisées sur la vente de ses produits, Mme Marinière vous
demande :
3.1 - D'écrire la requête SQL donnant le prix de vente et le(s) prix d'achat du produit P113 ?
SELECT PRODUIT.Reference, PrixVente, PrixEntrée
FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference
AND PRODUIT.Reference = "P113";

3.2 - D'expliquer le résultat donné par cette requête.

SELECT PrixEntrée
FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference
AND Taille = "4"
AND Couleur = "rouge"
AND Libellé = "Polo labuze"
AND DateEntrée = 15/03/2004;

A quel prix avons-nous acheté les "polo labuze" rouge en taille 4 le 15 mars 2004 ?

3.3 - D'étudier la marge dégagée sur la vente de certains produits. Pour cela :
- Donner la requête SQL permettant de savoir à quel prix le produit ci-dessus est vendu.
SELECT Libellé, PrixVente
FROM PRODUIT, SORTIE_STOCK
WHERE PRODUIT.Reference = SORTIE_STOCK.Reference
AND Taille = "4"
AND Couleur = "rouge"
AND Libellé = "Polo labuze";

- Calculer la marge réalisée sur la vente de ces 2 produits.


P113 : marge = prix de vente – prix d’achat = 43 – 27 = 16 €
P112 : marge = prix de vente – prix d’achat = 32 – 16 = 16 €

- Que représente cette marge en pourcentage du prix d’achat ?


(P113) 16/27 * 100 = 59.25 %
(P112) 16/16 * 100 = 100%

- Analyse des résultats obtenus.


Mme Marinière réalise une marge plus importante sur la vente du produit P112, elle a donc tout intérêt
à développer la vente de ce produit.

http://www.reseaucerta.org © CERTA - octobre 2019 – v1.0 Page 7/8


Question 4 :

Compléter et/ou corriger les requêtes SQL suivantes :

Mme Marinière voulant minimiser le délai de rotation de ses stocks, et particulièrement du


produit P119 qui encombre les rayons, vous demande de :

4.1 – Calculer le délai entre la date de sortie et la date d’entrée du produit correspondant à l’entrée
numéro 23, en précisant le libellé du produit et la date d’entrée du produit en stock.
SELECT Libellé, (DateSortie - DateEntrée) as Délai, DateEntrée
FROM PRODUIT, ENTREE_STOCK, SORTIE_STOCK
WHERE NuméroEntrée = 23
AND PRODUIT.Reference = ENTREE_STOCK.Reference
AND SORTIE_STOCK.Reference = ENTREE_STOCK.Reference;

Après avoir complété la requête ci-dessus, commenter le résultat obtenu.


Le délai de stockage du produit est important (115 jours).
Ce produit étant un produit d’hiver, la date d’achat tardive du produit n’a pas permis d’écouler le stock
qui pose aujourd’hui un réel problème (en terme de coût de stockage et de manque à gagner) pour
Mme Marinière.

4.2 – Afficher la liste des produits achetés avant avril 2004 et restant en stock, avec leur(s) référence,
libellé, taille, couleur, prix d’achat, prix de vente, date d'achat et quantité en stock. Classer ces
produits du prix d'achat le plus élevé au moins élevé, puis par ordre chronologique d’achat.
SELECT PRODUIT.Reference, Libellé, taille,couleur, PrixEntrée, PrixVente, DateEntrée,
QuantitéEnStock
FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference
And DateEntrée < 01/04/2004 (entourer la date de # sous Access : #04/01/2004#)
And QuantitéEnStock > 0
ORDER BY PrixEntrée DESC, DateEntrée;

Parallèlement, Mme Marinière s’inquiète des éventuelles ruptures de stock et vous demande :

4.3 – La liste des produits achetés entre le 01 Mars et le 01 Août qui ne sont plus disponibles à la
vente.
SELECT Distinct Libellé
FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference
AND DateEntrée >= 01/03/2004 AND DateEntrée <= 01/08/2004
AND QuantitéEnStock = 0 ; Ou DateEntrée
between 01/05/2004
4.4 – Quel est le résultat donné par cette requête ? AND 01/08/2004
SELECT Libellé, QuantitéEnStock
FROM PRODUIT, ENTREE_STOCK
WHERE PRODUIT.Reference = ENTREE_STOCK.Reference
AND DateEntrée > 01/01/2004
AND Saison = " Hiver"
AND QuantitéEnStock > 0;

Cette requête ne donne aucun résultat car l’attribut Saison n’existe pas dans le modèle.

Quelle(s) modification(s) de la structure de la base de données proposez-vous pour que cette requête
puisse fonctionner ?
Il faut ajouter un champ Saison à la table PRODUIT ou Créer une table SAISON et ajouter une clé
étrangère (CodeSaison) à la table PRODUIT.

Quel serait l’intérêt d’une telle modification dans le cadre de la gestion des stocks ?
Ce champ permettrait d’extraire les produits de la saison passée au moment de la préparation des
soldes et de réaliser des statistiques de vente par saison.

http://www.reseaucerta.org © CERTA - octobre 2019 – v1.0 Page 8/8

Vous aimerez peut-être aussi