Vous êtes sur la page 1sur 4

Contexte AMAP – AP2 : SQL LID v 1.

Vous travaillez, en tant que développeur – stagiaire, au sein de l’organisation de services du numérique :
2lo (logiciel libre pour les organisations).

1. Présentation du contexte
Les amapiens du réseau aimeraient pouvoir gérer le système d’informations (SI) des contrats entre les
paysans et les mangeurs. Un stagiaire chevronné a commencé à travailler sur la base de données du SI.
Pour cela, il s’est appuyé sur le SGBDR PostgreSQL.
La base de données Amap repose sur les tables personnes, paysans et contrats. Le schéma logique
obtenu à l’aide de l’application « Visual Paradigm », est le suivant :

Vous disposez chacun d’une base de données implémentant ce schéma sur la ferme de serveur. Elle est
accessible via le client « PgAdmin » sous le nom bd_amap_X (où X représente votre patronyme en
minuscule). Vous pouvez vous connecter avec l'utilisateur X (où X représente toujours votre patronyme) et
le mot de passe secret.
Les distributions ont lieu une fois par semaine. L’attribut prix_panier, de la table contrats représente le
prix du panier hebdomadaire. L’attribut nb_semaines représente la durée du contrat entre un paysan et
un mangeur (personne), c’est-à-dire la durée de l’engagement.
Le stagiaire est parti sans laisser de notes. Votre chef de projet vous demande de rédiger une note de
synthèse (au format markdown) sur les points suivants, afin de mieux comprendre les choix du stagiaire.
Il vous demande d’enregistrer vos requêtes dans un fichier texte nommé analyse.md que vous trouverez
sur vos dépôts db_amap respectifs, disponibles sur vos espaces dédiés sur la forge logicielle Framagit.

Travail à faire
1..1 À partir du schéma logique présenté ci-dessus, établir le schéma relationnel en notation
textuelle.
1..2 Quel est le type de données retenu pour les identifiants des paysans et des mangeurs ?
Essayez de trouver une explication au format retenu.
1..3 Comment peut-on calculer le chiffre d’affaires pour un contrat donné entre un mangeur
et un paysan partenaire.
1..4 Expliquez en termes de dépendances fonctionnelles l’intérêt et les limites du choix de la
relation contrats. Expliquez notamment pourquoi la dépendance fonctionnelle (DF)
id_paysan → (debut, prix_panier, nb_semaines) n’est pas exacte et pourquoi le DF
id_mangeur → (debut, prix_panier, nb_semaines) n’est pas non plus exacte.

BTS SIO – Cité Scolaire Albert Londres CC by-sa – moulinux Page 1 / 4


Contexte AMAP – AP2 : SQL LID v 1.3

2. Requêtes SQL
Afin de valider le schéma de cette base de données, votre chef de projet vous demande de tester un certain
nombre de requêtes SQL, à partir du jeu d’essai qu’il a constitué pour vous. Il vous demande d’enregistrer
vos requêtes dans un fichier texte nommé AP_SQL-LID.sql dont vous trouverez le squelette sur vos
dépôts db_amap respectifs, disponibles sur vos espaces dédiés sur la forge logicielle Framagit.

Note : un mangeur est une personne qui n’est pas paysan.

Travail à faire : écrivez les requêtes donnant


2..5 Les nom et prénom des paysans responsables de la culture 'maraîcher' ;

2..6 Le nombre de contrats du paysan 'Champrux' ;

2..7 Le chiffre d’affaires du paysan 'Champrux' ;

2..8 Le chiffre d’affaires de chaque paysan : vous projetterez le nom et le chiffre d’affaires
du paysan dans le tableau résultat ; Les résultats seront triés par nom de paysans ;

2..9 Le chiffre d’affaires de tous les paysans ;

2..10 Le chiffre d’affaires des paysans dont le chiffre d’affaires est supérieur à 150 € : les ré-
sultats seront triés par nom de paysans ;

2..11 Quel est le nom du paysan qui dégage le plus grand chiffre d’affaires (vous pourrez par
exemple utiliser la clause limit) ?

2..12 Toutes les informations concernant les mangeurs habitant dans l’allier ;

BTS SIO – Cité Scolaire Albert Londres CC by-sa – moulinux Page 2 / 4


Contexte AMAP – AP2 : SQL LID v 1.3

2..13 Toutes les informations concernant le paysan 'Champrux' ;

Votre chef de projet vous demande d’étudier la requête suivante :


SELECT id, nom, prenom, COUNT(id_paysan) AS "nbContrats" FROM paysans
LEFT OUTER JOIN contrats ON contrats.id_paysan = paysans.id_p
INNER JOIN personnes ON personnes.id = paysans.id_p
GROUP BY id, nom
ORDER BY nom, prenom

Travail à Faire
Exécutez cette requête et comparez les résultats à la requête où LEFT OUTER est remplacé par INNER :
SELECT id, nom, prenom, COUNT(id_paysan) As "nbContrats" FROM paysans
INNER JOIN contrats ON contrats.id_paysan = paysans.id_p
INNER JOIN personnes ON personnes.id = paysans.id_p
GROUP BY id, nom
ORDER BY nom, prenom

Exercice
2..14 Analysez les différences entre les résultats et rédigez une description de chacune des
deux requêtes précédentes (avec ou sans LEFT OUTER). Vous pourrez notamment vous
appuyer sur ce tutoriel en ligne,
Vous devez également programmer les requêtes suivantes…

Exercices : écrivez les requêtes donnant


2..15 Le nombre de contrats pour le mangeur 'Moulinux' ;

2..16 Le nom des mangeurs qui ne sont pas en contrat avec le paysan 'Brerux' ; (n’hésitez
pas à décomposer les difficultés)

2..17 La liste des mangeurs (nom du mangeur, identifiant, date du contrat, prix du panier,
nombre de semaines et identifiant du paysan partenaire) qui ont des contrats en cours :
les résultats seront triés par paysan (identifiant) et nom de mangeur ;

2..18 Le nombre de paysans proposant des paniers ;

2..19 La liste des paysans (nom et prénom) qui n’ont pas encore de contrats ; les résultats se-
ront triés par nom et prénom de paysan ;

BTS SIO – Cité Scolaire Albert Londres CC by-sa – moulinux Page 3 / 4


Contexte AMAP – AP2 : SQL LID v 1.3

2..20 La liste des paysans (nom et prénom, nombre de paniers et nombre de contrats en
cours) proposant des paniers : on souhaite même lister ceux qui n’ont pas encore de
contrats ;

BTS SIO – Cité Scolaire Albert Londres CC by-sa – moulinux Page 4 / 4

Vous aimerez peut-être aussi