Commit a38b922b authored by Tom HENRION's avatar Tom HENRION

Implementation SQL

parent 3cbb2fd2
--- Suppression des Tables ---
DROP TABLE IF EXISTS Parcelle CASCADE;
DROP TABLE IF EXISTS Cépage CASCADE;
DROP TABLE IF EXISTS Type_de_sol CASCADE;
DROP TABLE IF EXISTS Traitement CASCADE;
DROP TABLE IF EXISTS Mode_de_culture CASCADE;
DROP TABLE IF EXISTS Méthode_de_récolte CASCADE;
DROP TABLE IF EXISTS Mode_de_taille CASCADE;
DROP TABLE IF EXISTS Critère_Qualitatif CASCADE;
DROP TABLE IF EXISTS Circuit_Vente CASCADE;
DROP TABLE IF EXISTS Conditionnement CASCADE;
DROP TABLE IF EXISTS Vin CASCADE;
DROP TABLE IF EXISTS Climat CASCADE;
DROP TABLE IF EXISTS Type_évènement CASCADE;
DROP TABLE IF EXISTS Traite CASCADE;
DROP TABLE IF EXISTS parcelle_compose_vin CASCADE;
DROP TABLE IF EXISTS Impacte CASCADE;
DROP TABLE IF EXISTS Possède_évènement CASCADE;
--- Suppression des Types ---
DROP TYPE IF EXISTS etat_parcelle;
DROP TYPE IF EXISTS type_culture;
DROP TYPE IF EXISTS type_recolte;
DROP TYPE IF EXISTS couleur_fruit;
DROP SEQUENCE IF EXISTS num_parcelle;
DROP SEQUENCE IF EXISTS mode_taille;
DROP SEQUENCE IF EXISTS Critère;
DROP SEQUENCE IF EXISTS vente;
DROP SEQUENCE IF EXISTS conditionnement_vin;
DROP SEQUENCE IF EXISTS id_vin;
DROP SEQUENCE IF EXISTS id_climat;
--- Creation d'un Type ---
CREATE TYPE etat_parcelle as enum('Plantation','Arrachage');
CREATE TYPE type_culture as enum ('Désherbées en plein','enherbées et tondues', 'Cultivées');
CREATE TYPE type_recolte as enum ('Manuel','Mecanique');
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TYPE couleur_fruit as enum('Rouge','Blanc');
CREATE TABLE Cépage (
Nom VARCHAR(45) PRIMARY KEY,
Couleur_fruit couleur_fruit NOT NULL,
Duree_germinaison INTEGER NOT NULL CHECK (Duree_germinaison > 0)
);
--- Insertion des données de test pour la table ---
INSERT INTO Cépage VALUES ('Chardonnay', 'Blanc', 100),
('Sauvignon', 'Blanc', 86),
('Chenin', 'Blanc', 90),
('Marsanne', 'Blanc', 70),
('Merlot', 'Rouge', 81),
('Tannat', 'Rouge', 78),
('Gamay', 'Rouge', 69);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Type_de_sol (
Nom VARCHAR(45) PRIMARY KEY,
Irrigation VARCHAR NOT NULL
);
INSERT INTO Type_de_sol VALUES ('Sablonneux', 'Importante'),
('Boueux', 'Importante'),
('Sec', 'Très faible'),
('Argileux', 'Moyenne');
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Traitement (
Nom VARCHAR(45) PRIMARY KEY,
Description VARCHAR NOT NULL,
Cible VARCHAR NOT NULL,
Prix FLOAT NOT NULL CHECK (Prix > 0),
Duree_traitement INTEGER NOT NULL CHECK (Duree_traitement > 0)
);
INSERT INTO Traitement VALUES ('Vitamine', 'Permet à la plante de pousser plus vite', 'Plante entière', 16.50, 20),
('Antie-fourmie', 'Repousse les fourmies', 'fourmies', 40.00, 35),
('Antie-sautrelles', 'Repousse les sautrelles', 'sautrelles', 25.60, 60);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Mode_de_culture (
Type type_culture PRIMARY KEY,
Description VARCHAR NOT NULL
);
INSERT INTO Mode_de_culture VALUES ('enherbées et tondues', 'Attente pour agriculture biologique'),
('Désherbées en plein', 'Attente pour refaire une plantation'),
('Cultivées', 'Culture Intensive');
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Méthode_de_récolte (
Methode_de_recolte type_recolte PRIMARY KEY,
Prix FLOAT NOT NULL CHECK (Prix > 0)
);
INSERT INTO Méthode_de_récolte VALUES ('Manuel', 20.30),
('Mecanique', 13.60);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
--- Creation des Tables ---
CREATE TABLE Parcelle (
Numero INTEGER PRIMARY KEY,
Surface INTEGER NOT NULL CHECK (Surface > 0),
Exposition INTEGER NOT NULL CHECK ( Exposition > 0 AND Exposition <= 10),
Etat etat_parcelle NOT NULL,
cépage VARCHAR(45),
type_de_sol VARCHAR(45) NOT NULL,
culture type_culture,
recolte type_recolte,
FOREIGN KEY (cépage) REFERENCES Cépage(Nom),
FOREIGN KEY (type_de_sol) REFERENCES Type_de_sol(Nom),
FOREIGN KEY (recolte) REFERENCES Méthode_de_récolte(Methode_de_recolte)
);
--- Création de la séquence pour la table ---
CREATE SEQUENCE num_parcelle START 1;
--- Insertion des données de test pour la table ---
INSERT INTO Parcelle VALUES (nextval('num_parcelle'), 260, 3, 'Plantation', 'Chardonnay', 'Sablonneux', 'Cultivées', 'Manuel'),
(nextval('num_parcelle'), 320, 6, 'Plantation', 'Chardonnay', 'Sablonneux', 'Cultivées', 'Manuel'),
(nextval('num_parcelle'), 128, 2, 'Plantation', 'Chardonnay', 'Sablonneux', 'Cultivées', 'Manuel'),
(nextval('num_parcelle'), 652, 8, 'Plantation', 'Chenin', 'Boueux', 'Cultivées', 'Mecanique'),
(nextval('num_parcelle'), 136, 9, 'Plantation', 'Tannat', 'Argileux', 'Cultivées', 'Mecanique'),
(nextval('num_parcelle'), 290, 10, 'Plantation', 'Merlot', 'Sec', 'Cultivées', 'Mecanique'),
(nextval('num_parcelle'), 297, 4, 'Arrachage', 'Gamay', 'Boueux', 'Désherbées en plein', 'Mecanique'),
(nextval('num_parcelle'), 510, 5, 'Plantation', 'Sauvignon', 'Sablonneux', 'Cultivées', 'Manuel'),
(nextval('num_parcelle'), 267, 3, 'Arrachage', 'Tannat', 'Boueux', 'Désherbées en plein', 'Mecanique'),
(nextval('num_parcelle'), 402, 6, 'Plantation', 'Marsanne', 'Sec', 'Cultivées', 'Manuel');
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Mode_de_taille (
Id INTEGER PRIMARY KEY,
Nom VARCHAR NOT NULL,
parcelle INTEGER NOT NULL,
FOREIGN KEY (parcelle) REFERENCES Parcelle(Numero)
);
CREATE SEQUENCE mode_taille START 1;
INSERT INTO Mode_de_taille VALUES (nextval('mode_taille'), 'Coupe des brins', 1),
(nextval('mode_taille'), 'Laisse pousser', 2),
(nextval('mode_taille'), 'Taillage excessif', 6);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Critère_Qualitatif (
Id INTEGER PRIMARY KEY,
couleur_robe VARCHAR NOT NULL,
Decription_saveur VARCHAR NOT NULL,
Decription_texture VARCHAR NOT NULL,
Decription_global VARCHAR NOT NULL,
Notation INTEGER NOT NULL CHECK (Notation > 0 AND Notation <= 10),
alcool FLOAT NOT NULL CHECK (alcool > 0),
Annee_mise_en_bouteille DATE NOT NULL,
Lieu VARCHAR NOT NULL
);
CREATE SEQUENCE Critère START 1;
INSERT INTO Critère_Qualitatif VALUES (nextval('Critère'), 'Couleur rose pale', 'Saveur âpre', 'Texture aqueuse', 'Vin moyen', 5, 12.2, '12-11-1998', 'Bordeaux'),
(nextval('Critère'), 'Couleur blanc translucide', 'Saveur sucré', 'Texture aqueuse', 'Vin très bon', 9, 12.2, '03-06-2001', 'Marmande');
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Circuit_Vente (
Id INTEGER PRIMARY KEY,
Nom VARCHAR(45) NOT NULL,
Nombre_bouteille_vendue INTEGER NOT NULL CHECK (Nombre_bouteille_vendue > 0)
);
CREATE SEQUENCE vente START 1;
INSERT INTO Circuit_Vente VALUES (nextval('vente'), 'Particulier', 30),
(nextval('vente'), 'Auchan', 1120);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Conditionnement (
Id INTEGER PRIMARY KEY,
Nom VARCHAR(45) NOT NULL,
Contenant FLOAT NOT NULL CHECK (Contenant > 0)
);
CREATE SEQUENCE conditionnement_vin START 1;
INSERT INTO Conditionnement VALUES (nextval('conditionnement_vin'), 'Bouteille', 1.50),
(nextval('conditionnement_vin'), 'Bouteille', 0.75),
(nextval('conditionnement_vin'), 'Bidon', 4.0);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Vin (
Id INTEGER PRIMARY KEY,
Nom VARCHAR NOT NULL,
Prix FLOAT NOT NULL CHECK (Prix > 0),
conditionnement INTEGER NOT NULL,
critère INTEGER NOT NULL,
circuit INTEGER NOT NULL,
FOREIGN KEY (conditionnement) REFERENCES Conditionnement(Id),
FOREIGN KEY (critère) REFERENCES Critère_Qualitatif(Id),
FOREIGN KEY (circuit) REFERENCES Circuit_Vente(Id)
);
CREATE SEQUENCE id_vin START 1;
INSERT INTO Vin VALUES (nextval('id_vin'), 'Bordeaux', 6.52, 1, 1, 1),
(nextval('id_vin'), 'Sauvignon', 8.20, 1, 2, 2),
(nextval('id_vin'), 'Monbazillac', 7.60, 1, 2, 1);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Climat (
Id INTEGER PRIMARY KEY,
Date_début DATE NOT NULL,
Date_fin DATE NOT NULL,
Intensité INTEGER NOT NULL CHECK (Intensité > 0 AND Intensité <= 10)
);
CREATE SEQUENCE id_climat START 1;
INSERT INTO Climat VALUES (nextval('id_climat'), '22-11-2016', '22-12-2016', 3),
(nextval('id_climat'), '06-08-2017', '27-09-2017', 6),
(nextval('id_climat'), '15-02-2019', '20-02-2019', 7);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Type_évènement (
Nom VARCHAR(25) PRIMARY KEY,
Description VARCHAR NOT NULL
);
INSERT INTO Type_évènement VALUES ('Orage', 'Tres grosse précipitation'),
('Pluie', 'Précipitation'),
('Innondation', 'Vignes noyé'),
('secheresse', 'Manque d eau');
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Traite (
parcelle INTEGER,
traitement VARCHAR(45),
PRIMARY KEY (parcelle, traitement),
FOREIGN KEY (parcelle) REFERENCES Parcelle(Numero),
FOREIGN KEY (traitement) REFERENCES Traitement(Nom)
);
INSERT INTO Traite VALUES (1, 'Vitamine'),
(2, 'Vitamine'),
(1, 'Antie-fourmie'),
(3, 'Antie-sautrelles');
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE parcelle_compose_vin (
parcelle INTEGER,
vin INTEGER,
PRIMARY KEY (parcelle, vin),
FOREIGN KEY (parcelle) REFERENCES Parcelle(Numero),
FOREIGN KEY (vin) REFERENCES Vin(Id)
);
INSERT INTO parcelle_compose_vin VALUES (5, 1),
(4, 2),
(6, 1),
(1, 1),
(3, 2);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Impacte (
parcelle INTEGER,
climat INTEGER,
PRIMARY KEY (parcelle, climat),
FOREIGN KEY (climat) REFERENCES Climat(Id),
FOREIGN KEY (parcelle) REFERENCES Parcelle(Numero)
);
INSERT INTO Impacte VALUES (5, 2),
(1, 1),
(3, 2);
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
CREATE TABLE Possède_évènement (
type VARCHAR(25),
événement INTEGER,
PRIMARY KEY (type, événement),
FOREIGN KEY (type) REFERENCES Type_évènement(Nom),
FOREIGN KEY (événement) REFERENCES Climat(Id)
);
INSERT INTO Possède_évènement VALUES ('Orage', 1),
('Orage', 2),
('Pluie', 1);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment