commit
fb33961007
Binary file not shown.
Binary file not shown.
@ -0,0 +1,33 @@
|
||||
# Présentation entreprise : Skiklö
|
||||
```Elèves``` : MARTINS DA SILVA GOMES Rui / CALATAYUD Yvan / TUAILLON Léo / HERSAN Mathéo
|
||||
|
||||
Groupe : 10
|
||||
|
||||
Le directeur de ```Skiklö```, qui désire informatiser la gestion de son établissement, nous a chargé de modéliser le système d'information.
|
||||
L'entreprise ```Skiklö``` est une entreprise de location d'équipement de sports d'hiver. Elle est implantée aux stations des Deux Alpes, Courchevel et Villard de Lans.
|
||||
Chaque client est identifié par un numéro unique à x chiffres qui lui est attribué lorsqu'il réserve ou loue un produit.
|
||||
A l'arrivée d'un nouveau client nous enregistrons ses informations personnelles afin de le retrouver en cas de vol ou de casse.
|
||||
On connaît son nom, prénom, date de naissance, adresse, ville, pays, Code Postal, Téléphone, son email et aussi son type c'est à dire si c'est un particulier ou une entreprise.
|
||||
|
||||
Chaque type de produit est identifié par un numéro unique, un nom, une marque, une taille et un prix par jour. Les équipements de sports d'hiver que nous louons dans nos boutiques respectives sont classés dans différentes catégories identifié un numéro unique et un nom.(ski de piste, ski de fond, luge, protections...).
|
||||
|
||||
Tous les produits que nous recevons sont enregistrés afin que nous puissions connaître la quantité, la date d'approvisionnement et les informations concernant le fournisseur tel que son nom, son adresse, ses informations de contact. Les produits sont ensuite stockés dans nos magasins, ceux-ci sont repartis dans différentes villes de France, chaque magasins est doté d'un nom, d'une adresse et d'un numéro de téléphone pour pouvoir contacter le gérant en cas, par exemple, de rupture de stocks.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## MCD et MLD de Skiklö
|
||||
MCD :
|
||||
|
||||

|
||||
|
||||
Nous avons décidé de mettre l'attribut quantité dans la relation stocker et à la base nous pensions rajouter un attribut quantité totale dans la table Produit. Mais dans le cadre de notre entreprise la quantité totale ne sera utile que dans le cadre d'un inventaire, ce qui nous arrive qu'une seule fois par an. Nous avons donc pas jugé utile de rajouter un élément dans la table produit puisque en faisant une requête qui additionne la quantité de chacun de nos magasins pour un produit donné nous aurions le même résultat. Certe la requête est plus complexe mais le magasin ne la fera pas souvent (une fois par ans), donc celà permet de ne pas surcharger inutilement la table Produits de données.
|
||||
|
||||
Au départ nous avions pensé lister chaque produit dans la table produit avec un attribut "Statut" pour chaque produit qui contiendrait la valeur char "Réservé, Louée ou bien disponible". Nous nous sommes assez vite rendu compte que ce n'était pas très optimisé car si nous avons 150 fois la même paire de ski par exemple, cela impliquerait 150 lignes identiques dans la table produit à l'exception de l'idProduit qui changerait. Nous avons donc décidé de lister dans la table produit une référence de produit par ligne, puis de mettre une relation 'stocker' entre les produits et les magasins afin de savoir combien de produit d'un type donné est stocké dans quel magasin. Cela permet que, lorsqu'on éffectue une réservation pour un client, on peut vérifier pour une date donnée combien de produits sont disponible ou non.
|
||||
MLD :
|
||||
|
||||

|
||||
|
||||
##
|
|
|
|
|
|
|
@ -0,0 +1,92 @@
|
||||
DROP TABLE IF EXISTS APPROVISIONNER;
|
||||
DROP TABLE IF EXISTS STOCKER;
|
||||
DROP TABLE IF EXISTS RESERVER;
|
||||
DROP TABLE IF EXISTS PRODUIT;
|
||||
DROP TABLE IF EXISTS MAGASIN;
|
||||
DROP TABLE IF EXISTS FOURNISSEUR;
|
||||
DROP TABLE IF EXISTS CLIENT;
|
||||
DROP TABLE IF EXISTS CATEGORIE;
|
||||
|
||||
CREATE TABLE CATEGORIE (
|
||||
idcategorie char(5) NOT NULL UNIQUE,
|
||||
nom varchar(30) NOT NULL,
|
||||
PRIMARY KEY (idcategorie)
|
||||
);
|
||||
|
||||
CREATE TABLE CLIENT (
|
||||
idclient char(5) NOT NULL UNIQUE,
|
||||
nom varchar(30) NOT NULL,
|
||||
prenom varchar(20) NOT NULL,
|
||||
date_de_naissance date,
|
||||
adresse varchar(42),
|
||||
ville varchar(30),
|
||||
pays char(2),
|
||||
code_postal char(5),
|
||||
telephone char(10),
|
||||
email varchar(40) NOT NULL,
|
||||
type varchar CHECK(type IN ('particulier','entreprise','ecole','centre de loisir')),
|
||||
PRIMARY KEY (idclient)
|
||||
);
|
||||
|
||||
CREATE TABLE FOURNISSEUR (
|
||||
idfournisseur char(5) NOT NULL UNIQUE,
|
||||
nom varchar(30) NOT NULL,
|
||||
adresse varchar(40) NOT NULL,
|
||||
ville varchar(30) NOT NULL,
|
||||
code_postal char(5) NOT NULL,
|
||||
telephone char(10) NOT NULL,
|
||||
email varchar(40) NOT NULL,
|
||||
PRIMARY KEY (idfournisseur)
|
||||
);
|
||||
|
||||
CREATE TABLE MAGASIN (
|
||||
idmagasin char(5) NOT NULL UNIQUE,
|
||||
nom varchar(30) NOT NULL,
|
||||
adresse varchar(40) NOT NULL,
|
||||
ville varchar(30) NOT NULL,
|
||||
code_postal char(5) NOT NULL,
|
||||
telephone char(10) NOT NULL,
|
||||
email varchar(42) NOT NULL,
|
||||
PRIMARY KEY (idmagasin)
|
||||
);
|
||||
|
||||
CREATE TABLE PRODUIT (
|
||||
idproduit char(5) NOT NULL UNIQUE,
|
||||
nom varchar(40) NOT NULL,
|
||||
marque varchar(30) NOT NULL,
|
||||
taille varchar(20) NOT NULL,
|
||||
prix numeric NOT NULL,
|
||||
idcategorie char(5) NOT NULL,
|
||||
FOREIGN KEY (idcategorie) REFERENCES CATEGORIE (idcategorie),
|
||||
PRIMARY KEY (idproduit)
|
||||
);
|
||||
|
||||
CREATE TABLE RESERVER (
|
||||
idclient char(5) NOT NULL,
|
||||
idproduit char(5) NOT NULL,
|
||||
quantite numeric NOT NULL,
|
||||
date_debut date NOT NULL,
|
||||
date_fin date NOT NULL,
|
||||
FOREIGN KEY (idproduit) REFERENCES PRODUIT (idproduit),
|
||||
FOREIGN KEY (idclient) REFERENCES CLIENT (idclient),
|
||||
PRIMARY KEY (idclient, idproduit)
|
||||
);
|
||||
|
||||
CREATE TABLE STOCKER (
|
||||
idmagasin char(5) NOT NULL,
|
||||
idproduit char(5) NOT NULL,
|
||||
quantite numeric NOT NULL,
|
||||
FOREIGN KEY (idproduit) REFERENCES PRODUIT (idproduit),
|
||||
FOREIGN KEY (idmagasin) REFERENCES MAGASIN (idmagasin),
|
||||
PRIMARY KEY (idmagasin, idproduit)
|
||||
);
|
||||
|
||||
CREATE TABLE APPROVISIONNER (
|
||||
idfournisseur char(5) NOT NULL,
|
||||
idproduit char(5) NOT NULL,
|
||||
quantite numeric NOT NULL,
|
||||
date_approvisionnement date,
|
||||
FOREIGN KEY (idproduit) REFERENCES PRODUIT (idproduit),
|
||||
FOREIGN KEY (idfournisseur) REFERENCES FOURNISSEUR (idfournisseur),
|
||||
PRIMARY KEY (idfournisseur, idproduit)
|
||||
);
|
|
@ -0,0 +1,34 @@
|
||||
--Question 1
|
||||
SELECT *
|
||||
FROM Produit
|
||||
WHERE idProduit NOT IN (SELECT idProduit FROM RESERVER);
|
||||
-- Cette requête sélectionne les noms des produits dont l'identifiant n'apparaît pas dans la table Location,
|
||||
--ce qui signifie qu'ils n'ont jamais été loués.
|
||||
|
||||
|
||||
--Question 2 incomprehension de la question : cette requête ci-dessous renvoi le chiffre d'affaire fais pendant les 7 derniers jours par les clients de types entreprise.
|
||||
-- Calculer le montant des locations en fonction des types de clients
|
||||
SELECT c.type, SUM(p.prix*(CURRENT_DATE-r.date_debut)) AS Total
|
||||
-- Sélectionner les informations des clients et des locations
|
||||
FROM Client c, Produit p, RESERVER r
|
||||
WHERE c.type = 'entreprise' and c.idclient = r.idclient and r.idproduit = p.idproduit and (r.date_debut <= (CURRENT_DATE)
|
||||
and r.date_debut >= (CURRENT_DATE-7))
|
||||
-- Regrouper les résultats par type de client
|
||||
GROUP BY c.type;
|
||||
|
||||
--Question 3
|
||||
SELECT *
|
||||
FROM Produit
|
||||
WHERE idProduit NOT IN (SELECT idProduit FROM RESERVER);
|
||||
--Même question que la 1 formulé autrement. Donc même requête.
|
||||
|
||||
|
||||
--Question 4
|
||||
-- Calculer le montant des locations en fonction des types de clients et du nombre de jours loues
|
||||
SELECT c.type, SUM(p.prix*(CURRENT_DATE-r.date_debut)) AS Total
|
||||
-- Sélectionner les tables client produit et reserver
|
||||
FROM Client c, Produit p, RESERVER r
|
||||
WHERE c.idclient = r.idclient and r.idproduit = p.idproduit and (r.date_debut <= (CURRENT_DATE) and r.date_debut >= (CURRENT_DATE-30))
|
||||
-- Selectionne les reservations qui sont datÉs d'il y a moins de 30 jours et qui ne depasse pas la date du jour.
|
||||
GROUP BY c.type;
|
||||
-- Regrouper les résultats par type de client
|
@ -0,0 +1,103 @@
|
||||
import pandas as pd
|
||||
import psycopg2 as psy
|
||||
|
||||
client = pd.read_csv(r'Client.csv')
|
||||
df = pd.DataFrame(client)
|
||||
df2 = df.drop_duplicates()
|
||||
df3 = df2.dropna()
|
||||
print(df3)
|
||||
|
||||
co = None
|
||||
try:
|
||||
co = psy.connect(host='londres',
|
||||
database='dbletuaillon',
|
||||
user='letuaillon',
|
||||
password='03Ninja&*')
|
||||
|
||||
curs=co.cursor()
|
||||
|
||||
|
||||
for row in df3.itertuples():
|
||||
curs.execute('''INSERT INTO CLIENT VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);''',
|
||||
(row.idClient, row.nom, row.prenom, row.date_naissance, row.adresse, row.ville, row.pays, row.code_postal, row.telephone, row.email, row.type))
|
||||
|
||||
categorie = pd.read_csv(r'Categorie.csv')
|
||||
df = pd.DataFrame(categorie)
|
||||
df2 = df.drop_duplicates()
|
||||
df3 = df2.dropna()
|
||||
print(df3)
|
||||
|
||||
for row in df3.itertuples():
|
||||
curs.execute('''INSERT INTO CATEGORIE VALUES (%s,%s);''',
|
||||
(row.idCategorie, row.nom))
|
||||
|
||||
fournisseur = pd.read_csv(r'Fournisseur.csv')
|
||||
df = pd.DataFrame(fournisseur)
|
||||
df2 = df.drop_duplicates()
|
||||
df3 = df2.dropna()
|
||||
print(df3)
|
||||
|
||||
for row in df3.itertuples():
|
||||
curs.execute('''INSERT INTO FOURNISSEUR VALUES (%s,%s,%s,%s,%s,%s,%s);''',
|
||||
(row.idFournisseur,row.nom,row.adresse,row.ville,row.code_postal,row.telephone,row.email))
|
||||
|
||||
produit = pd.read_csv(r'produit.csv')
|
||||
df = pd.DataFrame(produit)
|
||||
df2 = df.drop_duplicates()
|
||||
df3 = df2.dropna()
|
||||
print(df3)
|
||||
|
||||
for row in df3.itertuples():
|
||||
curs.execute('''INSERT INTO PRODUIT VALUES (%s,%s,%s,%s,%s,%s);''',
|
||||
(row.idproduit,row.nom,row.marque,row.taille,row.prix,row.idcategorie))
|
||||
|
||||
magasin = pd.read_csv(r'Magasin.csv')
|
||||
df = pd.DataFrame(magasin)
|
||||
df2 = df.drop_duplicates()
|
||||
df3 = df2.dropna()
|
||||
print(df3)
|
||||
|
||||
for row in df3.itertuples():
|
||||
curs.execute('''INSERT INTO MAGASIN VALUES (%s,%s,%s,%s,%s,%s,%s);''',
|
||||
(row.idmagasin,row.nom,row.adresse,row.ville,row.code_postal,row.telephone,row.email))
|
||||
|
||||
reserver = pd.read_csv(r'Reserver.csv')
|
||||
df = pd.DataFrame(reserver)
|
||||
df2 = df.drop_duplicates()
|
||||
df3 = df2.dropna()
|
||||
print(df3)
|
||||
|
||||
for row in df3.itertuples():
|
||||
curs.execute('''INSERT INTO RESERVER VALUES (%s,%s,%s,%s,%s);''',
|
||||
(row.idclient,row.idproduit,row.quantite,row.date_debut,row.date_fin))
|
||||
|
||||
stocker = pd.read_csv(r'stocker.csv')
|
||||
df = pd.DataFrame(stocker)
|
||||
df2 = df.drop_duplicates()
|
||||
df3 = df2.dropna()
|
||||
print(df3)
|
||||
|
||||
for row in df3.itertuples():
|
||||
curs.execute('''INSERT INTO STOCKER VALUES (%s,%s,%s);''',
|
||||
(row.idmagasin,row.idproduit,row.quantite))
|
||||
|
||||
appro = pd.read_csv(r'Appro.csv')
|
||||
df = pd.DataFrame(appro)
|
||||
df2 = df.drop_duplicates()
|
||||
df3 = df2.dropna()
|
||||
print(df3)
|
||||
|
||||
for row in df3.itertuples():
|
||||
curs.execute('''INSERT INTO APPROVISIONNER VALUES (%s,%s,%s,%s);''',
|
||||
(row.idfournisseur,row.idproduit,row.quantite,row.date_approvisionement))
|
||||
|
||||
|
||||
co.commit()
|
||||
curs.close()
|
||||
|
||||
except (Exception , psy. DatabaseError ) as error :
|
||||
print (error)
|
||||
|
||||
finally:
|
||||
if co is not None:
|
||||
co.close()
|
|
Loading…
Reference in new issue