• Aucun résultat trouvé

Bases de données– LI341 Partiel du 29 novembre 2005 2 heures Documents autorisés.

N/A
N/A
Protected

Academic year: 2022

Partager "Bases de données– LI341 Partiel du 29 novembre 2005 2 heures Documents autorisés."

Copied!
7
0
0

Texte intégral

(1)

Partiel du 29 novembre 2005 2 heures

Documents autorisés.

Les calculatrices, baladeurs et autres appareils électroniques sont interdits. Les téléphones mobiles doivent être eteints et rangés dans les sacs. Le barème sur 20 points (15 questions) n’a qu’une valeur indicative.

, fournisseur, prix_achat, prix_vente) Stock (num_prod, num_mag, quantite)

Vente (num_prod, num_mag, mois, quantite)

Question 1 (1 point)

Définir un schéma entités/associations (E/A) représentant ce schéma.

Solution:

num_prod fournisseur

Produit Magasin

num_mag

stock vente

mois quantite

0,n 0,n

quantite prix_achat

prix_vente

1,n 1,n

(2)

Question 2 (3 points)

Modifier et étendre le schema E/A précédent afin de tenir compte des faits suivants : – Un magasin est situé dans une ville, a un certain nombre d’employés et une taille en m2.

– Un fournisseur est identifié par son nom. Il est localisé dans une rue d’une ville et a un numéro de téléphone.

– Un transporteur est identifié par son nom. Il est localisé dans une rue d’une ville et a un numéro de téléphone. Un transporteur possède un certain nombre de camions.

– Un même produit peut etre fourni par plusieurs fournisseurs, le prix d’achat du produit dépend donc du fournisseur qui le fournit.

– Le prix de transport unitaire d’un produit dépend du transporteur mais aussi de la géographie puisqu’il faut transporter les produits du fournisseur jusqu’au magasin.

– Enfin, les produits peuvent être en promotion certains mois. Pendant ce ou ces mois, un pourcentage de réduction est appliqué au produit dans tous les magasins.

Solution:

Entreprise nom

no_tel

rue

ville

Transporteur nb_camions

fournit prix_achat

Produit

Promotion mois

pourc

transporte prix_transport

surface nb_emp

ville Magasin

no_mag no_prod

Les associations vente et stock ne sont pas modifiées.

est_un est_un

Fournisseur

NB : on a ainsi de l’héritage (entreprise se spécialise en fournisseur et transporteur), une association quaternaire pour le prix de transport, une entité faible pour les promotion avec mois pour identificateur partiel)

Question 3 (2 points)

Déduire du schéma E/A précédent le schéma relationnel de la nouvelle base de données de la chaîne d’hypermarché. Souligner pour chaque relation le ou les attributs de la clé primaire.

(3)

Solution:

Entreprise(NOM, ville, rue, tel) Transporteur(NOM, nb_camions)

Magasin(NUM_MAG, taille, ville, nb_employés) Produit(NUM_PROD, prix_vente)

Stock(NUM_PROD, NUM_MAG, quantite)

Vente(NUM_PROD, NUM_MAG, MOIS, quantite) Achat(NUM_PROD, NOM_FOUR, prix_achat)

Transport(NUM_PROD, NOM_FOUR, NOM_TRANSP, NUM_MAG, prix_unitaire_transp)

Promo(NUM_PRODUIT, MOIS, %reduc)

2 Langages de requêtes (8 points)

Soit un schéma relationnel qui permet de gérer les données d’une chaîne d’hypermarchés (attention, le schéma est légèrement différent de celui de la première page) :

Produit (num_prod, nom_prod, prix_vente) Stock (num_prod, num_mag, mois, quantite)

Livraison (num_prod, num_f our, num_mag, mois, quantite, prix_achat) Vente (num_prod, num_mag, mois, quantite)

Magasin (num_mag, nom_mag)

Chaque produit est identifié par un numéro et peut être fourni par différents fournisseurs à différents prix. On suppose que la base de données stocke les informations des douze derniers mois. Les mois sont représentés sous forme d’entiers dans l’intervalle [1,12]. Exprimer (quand c’est possible) les requêtes suivantes dans les langages indiqués.

Question 4 (1 point)

Les numéros de produits dont le prix de vente est compris entre 100 Euros et 150 Euros. algèbre et SQL Solution:

πnum_prodprix_vente>=100∧prix_vente<=150(P roduit)) select num_prod

from Produit

where prix_vente >= 100 and prix_vente <= 150 Question 5 (1 point)

Les numéros de fournisseurs de produits vendus pendant le mois d’août. algèbre et SQL Solution:

πnum_f our(Livraison1Livraison.num_prod=V ente.num_prodmois=8V ente)) select distinct num_four

from Livraison, Vente

where Livraison.num_prod = Vente.num_prod and Vente.mois = 8

(4)

Question 6 (1 point)

Les numéros de fournisseurs de produits qui n’ont pas été vendus pendant le mois d’août (on suppose qu’un produit non vendu n’apparaît pas dans la table Vente). algèbre et SQL

Solution:

πnum_f our(Livraison1(πnum_prod(Livraison)−πnum_prodmois=8V ente))) select distinct num_four

from Livraison

where num_prod not in (select num_prod from Vente where mois = 8) Question 7 (1 point)

Les numéros de produits disponibles en stock dans tous les magasins au mois d’août. algèbre et SQL Solution: Division :

πnum_prod,num_magmois=8∧quantite>0Stock)÷πnummagM agasin select num_prod

from Produit P and not exists

(select * from Magasin M and not exists

(select * from Stock S

where mois = 8 and quant > 0 and P.num_prod = S.num_prod and M.num_mag = S.num_mag))

Toutes les solutions où la requête extérieure fait le test pour tous les produits sont correctes. Par exemple :

select num_prod from Stock S where not exists

(select * from Magasin M and not exists

(select * from Stock S

where mois = 8 and quantite > 0 and P.num_prod = S.num_prod and M.num_mag = S.num_mag)) Question 8 (1 point)

Les noms des produits livrés par au moins deux fournisseurs différents. calcul n-uplet et SQL Solution:

select nom_prod

from Produit P, Livraison F1, Livraison F2 where F1.num_prod = P.num_prod

(5)

and F2.num_prod = P.num_prod and F1.num_four <> F2.num_four

{P.nom_prod | ∃F1, F2(P roduit(P)∧Livraison(F1)∧Livraison(F2)

∧F1.num_prod=P.num_prod∧F2.num_prod=P.num_prod

∧F1.num_f our <> F2.num_f our)}

Question 9 (1 point)

Pour chaque magasin et chaque produit, on affiche le numéro du magasin, le numéro du produit et la quantité totale du produit livrée au magasin entre le mois de janvier et le mois de mars. SQL

Solution:

select num_mag, num_prod, sum(quantite) from Livraison

where mois>=1 and mois <=3 group by num_mag, num_prod Question 10 (1 point)

Les noms des produits les plus chers (prix de vente). SQL Solution:

select nom_prod from Produit PC

where not exists (select *

from Produit P2

where PC.prix_vente < P2.prix_vente) ou

select nom_prod from Produit

where prix_vente >= (select max(prix_vente) from Produit);

Question 11 (1 point)

Pour chaque produit, on affiche son nom et le numéro du magasin qui en a vendu le plus entre le mois de janvier et le mois de juin. SQL

Solution:

select nom_prod, num_mag from Produit P, Vente VM

where P.num_prod = V.num_prod and mois>=1 and mois<=6

group by nom_prod, num_mag

having sum(quantite) >= all (select sum(quantite) from Vente V2

where mois>=1 and mois<=6

(6)

and VM.num_prod = V2.num_prod group by num_mag)

3 Création de tables, contraintes et triggers (6 points)

3.1 Create table

On reprend le schéma relationnel de la deuxième section Produit (num_prod, nom_prod, prix_vente)

Stock (num_prod, num_mag, mois, quantite)

Livraison (num_prod, num_f our, num_mag, mois, quantite, prix_achat) Vente (num_prod, num_mag, mois, quantite)

Magasin (num_mag, nom_mag) et on suppose que

– les identificateursnum_prod,num_four,num_magsont des entiers de petite taille,

– les prix sont des rééls positifs inférieurs à 20 000 euros et exprimés en euros et centimes d’euros, – le nom d’un produit ou d’un magasin est une chaîne de taille variable de 64 caractères,

– la quantité est un entier positif,

– le mois est une valeur dans l’intervalle [1,12]

Question 12 (2 points)

Donnez les instructionsCREATE TABLEqui créent les schémas de relation pour les tablesP roduitet Stock avec les contraintes de clés, de clés étrangères et de domaine.

Solution:

CREATE TABLE Produit (

num_prod SMALLINT PRIMARY KEY, nom_four VARCHAR(64),

prix_vente DECIMAL(7,2),

CHECK (prix_vente >= 0 AND prix_vente <= 20000);

CREATE TABLE Stock (

num_prod SMALLINT, num_mag SMALLINT, mois SMALLINT, quantite INT,

PRIMARY KEY (num_prod, num_mag, mois), FOREIGN KEY (num_mag) REFERENCES Magasin, FOREIGN KEY (num_prod) REFERENCES Produit,

CHECK (quantite >= 0 AND mois <= 12 AND mois >= 1));

3.2 Contraintes et triggers

On veut ajouter la contrainte StockCoherentqui vérifie pour chaque magasina, produitpet moism, que le stock du moism correspond à la somme du stock du mois précédentm−1et des livraisons du moism, moins les ventes du moism.

(7)

Donner le type de la contrainte et les tables qui sont impliquées dans sa vérification.

Solution: C’est une contrainte globale (assertion) sur les relations Stock, Vente et Livraison.

Question 14 (1 point)

Exprimez la contrainte StockCoherent comme formule de la logique du premier ordre. On suppose qu’il existe une table binaire M pred(mp, m) qui stocke pour chaque moism le mois précédentmp : (12,1)et(3,4)sont des n-uplets dans cette table.

Solution:

∀p, x, m, mp, f, q1, q2, q3, q4( (Stock(p, x, m, q1)∧Stock(p, x, mp, q2)∧ Livraison(p, f, x, m, q3)∧V ente(p, x, m, q4)∧ M pred(mp, m))→q1 =q2 +q3−q4)

ou

∀s1, s2, l, v, m( (Stock(s1)∧Stock(s2)∧ Livraison(l)∧V ente(v)∧ M pred(m)∧

s1.num_prod=s2.num_prod∧

s2.num_prod=v.num_prod∧s2.num_prod=l.num_prod∧ s1.num_mag =s2.num_mag∧s2.num_mag=v.num_mag∧ s2.num_mag =l.num_mag∧

s1.mois=v.mois∧s.mois=l.mois∧ m.mois=s1.mois∧m.mois_prec=s2.mois

→s1.quantite=s2.quantite+l.quantite−v.quantite)

Question 15 (2 points)

Créer un trigger avec la commande CREATE TRIGGER qui augmente après chaque insertion d’un n- uplet dans la table Livraison le stock du même mois d’une manière cohérente (on suppose que pour chaque produit et chaque mois il existe déjà un n-uplet dans la table Stock au moment de la livraison).

Solution:

CREATE TRIGGER StockCoherent AFTER INSERT INTO Livraison FOR EACH ROW

BEGIN

UPDATE Stock SET quantite := quantite + :NEW.quantite WHERE num_prod = :NEW.num_prod

AND num_mag = :NEW.num_mag AND mois = :NEW.mois

END

Références

Documents relatifs

Ma participation au Main Event de Lorient que je considère comme l’un des meilleurs tournois auquel j’ai participé, belle organisation, lieu sympa et de bons joueurs?. Celui

En cette fin avril nous mettons à l’honneur @Eskimon et son dernier projet, DeckyDecky  .. DeckyDecky, c’est l’interface qu’il a développée afin de lui simplifier la vie quand

Les trois parties du problème sont indépendantes et peuvent être traitées séparément dans l'ordre de votre choix.

INSPECTION D’ACADEMIE DE THIES-PHARES 2017-2018 Page 12 3e semaine d’avril 2018 EVALUATION AU NIVEAU DES CELLULES MIXTES (contenus enseignés). 1ere semaine de mai à la 3e

Découvrez sans plus tarder l'offre Cdiscount Mobile. Franchement avec 200 minutes d’appels, 200 SMS ou MMS et 200Mo de web 4G, le tout pour 2€/mois seulement, que dire de plus

Pour ce qui est de l’ ibuprofène, il n’ est pas recommandé de l’utiliser avant l’ âge de 6 mois, ni pour un enfant plus vieux avec une possibilité de déshydra- tion

Dans les deux cas, n’oubliez pas de mentionner votre Nom, Prénom et votre classe ou votre statut (élève, parent

- Demandeurs d’emploi inscrits à Pôle emploi depuis plus de 24 mois continus ou discontinus durant les 36 derniers mois, à l’exclusion des personnes éligibles à un