Skip to content
Snippets Groups Projects
Commit e6cbb680 authored by Emna Latrous's avatar Emna Latrous
Browse files

Merge branch 'develop' into 'master'

Develop

See merge request !8
parents bd954540 84e922de
No related branches found
Tags 0.1.0
1 merge request!8Develop
drop view IF EXISTS vCamionNonSature;
drop table IF EXISTS public.transport; drop table IF EXISTS public.transport;
drop table IF EXISTS public.evenement; drop table IF EXISTS public.evenement;
drop type IF EXISTS type_evenement; drop type IF EXISTS type_evenement;
...@@ -309,6 +309,15 @@ ALTER TABLE public.transport ...@@ -309,6 +309,15 @@ ALTER TABLE public.transport
OWNER TO postgres; OWNER TO postgres;
CREATE VIEW vCamionNonSature AS
SELECT c.fk_noeud, count(*)
FROM public.camion c
LEFT JOIN public.transport t
ON c.fk_noeud=t.fk_camion
GROUP BY c.fk_noeud
HAVING count(*) <= c.capacite_maximale;
insert into public.commune (code_postal ,nom ) values (60200, 'compiegne'); insert into public.commune (code_postal ,nom ) values (60200, 'compiegne');
insert into public.commune (code_postal ,nom ) values (60100, 'creil'); insert into public.commune (code_postal ,nom ) values (60100, 'creil');
insert into public.commune (code_postal ,nom ) values (60300, 'senlis'); insert into public.commune (code_postal ,nom ) values (60300, 'senlis');
...@@ -324,18 +333,21 @@ insert into public.noeud (id, fk_longitude ,fk_latitude )values (2, 2.0833, 49.4 ...@@ -324,18 +333,21 @@ insert into public.noeud (id, fk_longitude ,fk_latitude )values (2, 2.0833, 49.4
insert into public.noeud (id, fk_longitude ,fk_latitude )values (3, 2.4833, 49.2667); insert into public.noeud (id, fk_longitude ,fk_latitude )values (3, 2.4833, 49.2667);
insert into public.noeud (id, fk_longitude ,fk_latitude )values (4, 2.5833, 49.2); insert into public.noeud (id, fk_longitude ,fk_latitude )values (4, 2.5833, 49.2);
insert into public.noeud (id, fk_longitude ,fk_latitude )values (5, 2.5833, 49.2); insert into public.noeud (id, fk_longitude ,fk_latitude )values (5, 2.5833, 49.2);
insert into public.noeud (id, fk_longitude ,fk_latitude )values (6, 2.5833, 49.2);
insert into public.infrastructure (id_i ,fk_noeud ) values (1, 1); insert into public.infrastructure (id_i ,fk_noeud ) values (1, 1);
insert into public.infrastructure (id_i ,fk_noeud ) values (2, 3); insert into public.infrastructure (id_i ,fk_noeud ) values (2, 3);
insert into public.camion (fk_noeud, numero_immatriculation, marque, modele,annee_production, capacite_maximale) insert into public.camion (fk_noeud, numero_immatriculation, marque, modele,annee_production, capacite_maximale)
values (2,10000,'marque a','modele a',1970,3); values (2,10000,'marque a','modele a',1970,1);
insert into public.moto (fk_noeud, numero_immatriculation, marque, modele,annee_production, capacite_motoe) insert into public.moto (fk_noeud, numero_immatriculation, marque, modele,annee_production, capacite_motoe)
values (4,10001,'marque b','modele b',1974,2); values (4,10001,'marque b','modele b',1974,2);
insert into public.voiture (fk_noeud, numero_immatriculation, marque, modele,annee_production, type_voiture) insert into public.voiture (fk_noeud, numero_immatriculation, marque, modele,annee_production, type_voiture)
values (5,10002,'marque c','modele c',1954,'ordinaire'); values (5,10002,'marque c','modele c',1954,'ordinaire');
insert into public.voiture (fk_noeud, numero_immatriculation, marque, modele,annee_production, type_voiture)
values (6,10003,'marque c','modele c',2004,'ordinaire');
insert into public.communication (id_c, fk_noeud_emetteur, fk_noeud_recepteur, stamp, type_communication) insert into public.communication (id_c, fk_noeud_emetteur, fk_noeud_recepteur, stamp, type_communication)
values (1,1,3,'2001-09-28','un'); values (1,1,3,'2001-09-28','un');
...@@ -357,5 +369,6 @@ insert into public.evenement (id_e, stamp, contenu, fk_com, fk_capteur_noeud, fk ...@@ -357,5 +369,6 @@ insert into public.evenement (id_e, stamp, contenu, fk_com, fk_capteur_noeud, fk
values (2,'2001-09-28','accident',2,3,'serie 1',10,2,'ordinaire',null,'accident'); values (2,'2001-09-28','accident',2,3,'serie 1',10,2,'ordinaire',null,'accident');
insert into public.transport (fk_voiture, fk_camion) values (5,2); insert into public.transport (fk_voiture, fk_camion) values (5,2);
insert into public.transport (fk_voiture, fk_camion) values (6,2);
drop table IF EXISTS public.transport;
drop view IF EXISTS vCommunication;
drop table IF EXISTS public.communication;
drop type IF EXISTS type_communication;
drop view IF EXISTS vVehicule;
drop view IF EXISTS vVoiture;
drop table IF EXISTS public.voiture;
drop type IF EXISTS type_voiture_speciale;
drop view IF EXISTS vMoto;
drop table IF EXISTS public.moto;
drop view IF EXISTS vCamion;
drop table IF EXISTS public.camion;
drop table IF EXISTS public.vehicule_info;
drop view IF EXISTS vInfrastructure;
drop table IF EXISTS public.infrastructure;
drop table IF EXISTS public.noeud;
drop table IF EXISTS public.position;
drop table IF EXISTS public.commune;
-- Table: public.commune
-- DROP TABLE public.commune;
CREATE TABLE public.commune
(
code_postal integer NOT NULL,
nom varchar,
PRIMARY KEY (code_postal)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.commune
OWNER TO postgres;
-- Table: public.position
-- DROP TABLE public.position;
CREATE TABLE public.position
(
longitude double precision NOT NULL,
latitude double precision NOT NULL,
fk_code_postal integer,
PRIMARY KEY (longitude, latitude),
FOREIGN KEY (fk_code_postal) REFERENCES public.commune (code_postal) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.position
OWNER TO postgres;
-- Table: public.noeud
-- DROP TABLE public.noeud;
CREATE TABLE public.noeud
(
id integer NOT NULL,
fk_longitude double precision,
fk_latitude double precision,
capteurs JSON NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (fk_longitude, fk_latitude) REFERENCES public.position (longitude, latitude) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.noeud
OWNER TO postgres;
-- Table: public.infrastructure
-- DROP TABLE public.infrastructure;
CREATE TABLE public.infrastructure
(
id_i integer UNIQUE NOT NULL,
fk_noeud integer,
PRIMARY KEY (fk_noeud),
FOREIGN KEY (fk_noeud) REFERENCES public.noeud (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.infrastructure
OWNER TO postgres;
CREATE VIEW vInfrastructure AS
SELECT *
FROM public.infrastructure i
JOIN public.noeud n
ON i.fk_noeud=n.id;
-- Table: public.vehicule_info
-- DROP TABLE public.vehicule_info;
CREATE TABLE public.vehicule_info
(
numero_immatriculation integer UNIQUE PRIMARY KEY,
marque varchar,
modele varchar,
annee_production integer
);
-- Table: public.camion
-- DROP TABLE public.camion;
CREATE TABLE public.camion
(
fk_noeud integer,
numero_immatriculation integer UNIQUE,
capacite_maximale integer,
PRIMARY KEY (Fk_noeud),
FOREIGN KEY (Fk_noeud) REFERENCES public.noeud (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (numero_immatriculation ) REFERENCES public.vehicule_info(numero_immatriculation) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.camion
OWNER TO postgres;
CREATE VIEW vCamion AS
SELECT *
FROM public.camion c
JOIN public.noeud n
ON c.fk_noeud=n.id;
-- Table: public.moto
-- DROP TABLE public.moto;
CREATE TABLE public.moto
(
fk_noeud integer,
numero_immatriculation integer UNIQUE,
capacite_motoe integer,
PRIMARY KEY (fk_noeud),
FOREIGN KEY (fk_noeud) REFERENCES public.noeud (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (numero_immatriculation ) REFERENCES public.vehicule_info(numero_immatriculation) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.moto
OWNER TO postgres;
CREATE VIEW vMoto AS
SELECT *
FROM public.moto m
JOIN public.noeud n
ON m.fk_noeud=n.id;
-- Table: public.voiture
-- DROP TABLE public.voiture
CREATE TYPE type_voiture_speciale AS enum('ordinaire','voiture_SAMU','voiture_policier','voiture pompier');
CREATE TABLE public.voiture
(
fk_noeud integer,
numero_immatriculation integer UNIQUE,
type_voiture type_voiture_speciale NOT NULL,
PRIMARY KEY (fk_noeud),
FOREIGN KEY (fk_noeud) REFERENCES public.noeud (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (numero_immatriculation ) REFERENCES public.vehicule_info(numero_immatriculation) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.voiture
OWNER TO postgres;
CREATE VIEW vVoiture AS
SELECT *
FROM public.voiture v
JOIN public.noeud n
ON v.fk_noeud=n.id;
-- View: vVehicule
CREATE VIEW vVehicule AS
SELECT fk_noeud,numero_immatriculation FROM vVoiture
UNION
SELECT fk_noeud,numero_immatriculation FROM vMoto
UNION
SELECT fk_noeud,numero_immatriculation FROM vCamion;
-- Table: public.communication
-- DROP TABLE public.communication;
CREATE TYPE type_communication AS enum('un', 'plusieur');
CREATE TABLE public.communication
(
id_c integer NOT NULL,
fk_noeud_emetteur integer NOT NULL,
fk_noeud_recepteur integer NOT NULL,
stamp date,
type_communication type_communication NOT NULL,
evenement json NOT NULL,
PRIMARY KEY (id_c),
FOREIGN KEY (fk_noeud_emetteur) REFERENCES public.noeud (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (fk_noeud_recepteur) REFERENCES public.noeud (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT communication_check_diff CHECK (fk_noeud_emetteur <> fk_noeud_recepteur)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.communication
OWNER TO postgres;
CREATE VIEW vCommunication AS
SELECT *,
CASE WHEN fk_noeud_emetteur IN (SELECT fk_noeud FROM vVehicule) THEN 'un'
ELSE 'vrai'
END as "vrai_type"
from public.communication;
-- Table: public.transport
-- DROP TABLE public.transport;
CREATE TABLE public.transport
(
fk_voiture integer,
fk_camion integer,
PRIMARY KEY (fk_voiture,fk_camion),
FOREIGN KEY (fk_camion) REFERENCES public.camion (fk_noeud) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (fk_voiture) REFERENCES public.voiture (fk_noeud) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.transport
OWNER TO postgres;
-- Templates for the json
/*
capteurs
[
{
id: ID
serie: string
modele: string
},
{
id: ID
serie: string
modele: string
}
...
]
evenement
{
capteur: ID,
contenu: string,
gravité: int,
nombre_véhicules: int,
types_véhicules: string,
temperature: double,
type: string,
}
insert into public.commune (code_postal ,nom ) values (60200, 'compiegne');
insert into public.commune (code_postal ,nom ) values (60100, 'creil');
insert into public.commune (code_postal ,nom ) values (60300, 'senlis');
insert into public.commune (code_postal ,nom ) values (60000, 'beauvais');
insert into public.position (longitude,latitude,fk_code_postal) values ( 2.8261 , 49.4179,60200);
insert into public.position (longitude,latitude,fk_code_postal) values ( 2.0833, 49.4333,60200);
insert into public.position (longitude,latitude,fk_code_postal) values ( 2.4833, 49.2667,60100);
insert into public.position (longitude,latitude,fk_code_postal) values ( 2.5833, 49.2,60300);
insert into public.position (longitude,latitude,fk_code_postal) values ( 2.7833, 49.4,60200);
insert into public.noeud (id, fk_longitude ,fk_latitude )values (1, 2.8261 , 49.4179);
insert into public.noeud (id, fk_longitude ,fk_latitude )values (2, 2.0833, 49.4333);
insert into public.noeud (id, fk_longitude ,fk_latitude )values (3, 2.4833, 49.2667);
insert into public.noeud (id, fk_longitude ,fk_latitude )values (4, 2.5833, 49.2);
insert into public.noeud (id, fk_longitude ,fk_latitude )values (5, 2.7833, 49.4);
insert into public.infrastructure (id_i ,fk_noeud ) values (1, 1);
insert into public.infrastructure (id_i ,fk_noeud ) values (2, 3);
insert into public.vehicule_info ( numero_immatriculation, marque, modele, annee_production)
VALUES (10000,'marque a','modele a', 1970);
insert into public.vehicule_info (numero_immatriculation, marque, modele, annee_production)
VALUES (10001,'marque b','modele b',1974);
insert into public.vehicule_info ( numero_immatriculation, marque, modele, annee_production)
VALUES (10002,'marque c','modele c',1954);
insert into public.camion (fk_noeud, numero_immatriculation, capacite_maximale)
values (2,10000,3);
insert into public.moto (fk_noeud, numero_immatriculation, capacite_motoe)
values (4,10001,2);
insert into public.voiture (fk_noeud, numero_immatriculation, type_voiture)
values (5,10002,'ordinaire');
insert into public.communication (id_c, fk_noeud_emetteur, fk_noeud_recepteur, stamp, type_communication)
values (1,1,3,'2001-09-28','un');
insert into public.communication (id_c, fk_noeud_emetteur, fk_noeud_recepteur, stamp, type_communication)
values (2,3,1,'2001-09-28','plusieur');
insert into public.communication (id_c, fk_noeud_emetteur, fk_noeud_recepteur, stamp, type_communication)
values (3,3,5,'2001-09-28','plusieur');
insert into public.communication (id_c, fk_noeud_emetteur, fk_noeud_recepteur, stamp, type_communication)
values (4,5,4,'2002-09-28','un');
insert into public.capteur (fk_noeud, numero_serie, modele) values (1,'serie 1','model 1');
insert into public.capteur (fk_noeud, numero_serie, modele) values (3,'serie 3','model 5');
insert into public.capteur (fk_noeud, numero_serie, modele) values (2,'serie 7','model 8');
insert into public.evenement (id_e, stamp, contenu, fk_com, fk_modele, fk_capteur_serie, gravité, nombre_véhicules, types_véhicules, temperature, type)
values (1,'2001-09-28','warning',1,'model 1','serie 1',null,null,null,-20,'alert_meteo');
insert into public.evenement (id_e, stamp, contenu, fk_com, fk_modele, fk_capteur_serie, gravité, nombre_véhicules, types_véhicules, temperature, type)
values (2,'2001-09-28','accident',2,'model 5','serie 3',10,2,'ordinaire',null,'accident');
insert into public.transport (fk_voiture, fk_camion) values (5,2);
*/
...@@ -58,4 +58,15 @@ vTraveau_routiers = PROJECTION ( RESTRICTION ( Évènement , type = 'traveau_rou ...@@ -58,4 +58,15 @@ vTraveau_routiers = PROJECTION ( RESTRICTION ( Évènement , type = 'traveau_rou
Transport (pk_camion , pk_voiture) (pk_camion, pk_voiture) is key Transport (pk_camion , pk_voiture) (pk_camion, pk_voiture) is key
=> Normalisation l'ensemble des table suivent la forme normale BCNF
les tables ne comporte pas de clé qui se rapporte à une dépendance avec un attribut non clé
à l'excéption des tables qui dérivent de la classe véhicule
On a appliqué un algorithme pour normaliser cette table
ayant effecutuer un partitionnement de table , qui a produit la relation suivante:
- véhicule_info ( # numéro_immatriculation:int ,marque:string ,modèle:string ,année_production:date)
version JSON : init_json.sql
--Lister tous les véhicules dans une région
SELECT n.id id
FROM vVehicule v
JOIN public.noeud n
ON v.fk_noeud=n.id
JOIN public.position p
ON n.fk_longitude=p.longitude AND n.fk_latitude=p.latitude
JOIN public.commune c
ON p.fk_code_postal=c.code_postal
WHERE c.nom='compiegne';
--Lister toutes les communications liées à une véhicule ou à une station de base
-- version 1
SELECT *
FROM vCommunication;
--version 2
SELECT *
FROM vCommunication
WHERE fk_noeud_emetteur=3 OR fk_noeud_recepteur=3; --put an id here
--Trouver le véhicule le plus proche d'un certain type, par exemple, un camion de pompiers, véhicule SAMU, etc. ou un certain modèle : toutes les Citroën C5, ...
SELECT v.fk_noeud,POWER(n.fk_longitude - t.tlong,2) + POWER(n.fk_latitude - t.tlat,2) distance
FROM vVehicule v
JOIN public.noeud n
ON v.fk_noeud=n.id
CROSS JOIN (
SELECT n.fk_longitude tlong,n.fk_latitude tlat
FROM vVehicule v
JOIN public.noeud n
ON v.fk_noeud=n.id
JOIN public.vehicule_info i
ON v.numero_immatriculation=i.numero_immatriculation
WHERE i.modele='modele a' --put a modele
) t
WHERE POWER(n.fk_longitude - t.tlong,2) + POWER(n.fk_latitude - t.tlat,2) <> 0 --Change the distance formula if you want, make sure the
ORDER BY distance --difference isn't 0.
LIMIT 1;
--Only voiture got type so you can't test on vehicule
SELECT v.fk_noeud,POWER(n.fk_longitude - t.tlong,2) + POWER(n.fk_latitude - t.tlat,2) distance
FROM vVehicule v
JOIN public.noeud n
ON v.fk_noeud=n.id
CROSS JOIN (
SELECT n.fk_longitude tlong,n.fk_latitude tlat
FROM vVoiture v
JOIN public.noeud n
ON v.fk_noeud=n.id
WHERE v.type_voiture='ordinaire' --put a type
) t
WHERE POWER(n.fk_longitude - t.tlong,2) + POWER(n.fk_latitude - t.tlat,2) <> 0 --Change the distance formula if you want, make sure the
ORDER BY distance --difference isn't 0.
LIMIT 1;
--Calculer les statistiques de passage de véhicules : par zone, par type, ...
SELECT c.nom region, COUNT(*) nombre
FROM vVehicule v
JOIN public.noeud n
ON v.fk_noeud=n.id
JOIN public.position p
ON n.fk_longitude=p.longitude AND n.fk_latitude=p.latitude
JOIN public.commune c
ON p.fk_code_postal=c.code_postal
GROUP BY c.nom;
--Supprimer de la base toutes les communications qui concernent un certain modèle du capteur (par exemple, dont le mal-fonctionnement a été démontré).
DELETE FROM public.communication com
USING
public.noeud AS n,
public.capteur AS c
WHERE
com.fk_noeud_emetteur=n.id AND
n.id=c.fk_noeud AND
c.modele='model 1';
--Supprimer de la base toutes les communications qui concernent une station de base particulière (modèle défaillant).
DELETE FROM public.communication com
WHERE com.fk_noeud_emetteur=3 OR com.fk_noeud_recepteur=3 ;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment