1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
-- ************************************************************************
-- FUSEAUX HORAIRES ET PASSAGE AUX HORAIRES D'ÉTÉ ET D'HIVER
-- ************************************************************************
/**************************************************************************
* IMPORTANT : le stockage de la donnée d'information du fuseau horaire doit
* être porté sur le capteur. En effet imaginons que nous surveillons les
* crues d'un cours d'eau faisant frontière (exemple, le Rio Guadiana
* faisant frontière entre le Portugal et l'espagne) alors, il se peut que
* les capteurs d'un pays soient réglés sur un fuseau donné qui n'est pas
* le même que celui de son voisin...
**************************************************************************/
-- ************************************************************************
-- ATTENTION :
-- 1) ces tables n'ont pas encore de schéma SQL associés, il s'agit
-- d'une maquette
-- 2) il conviendra de placer ces tables sur un espace de stockage en
-- lecture seule
-- ************************************************************************
-- création de la table des décalages horaire par rapport au fuseau
CREATE TABLE T_FUSEAU_FSO
(FSO_CODE CHAR(2) NOT NULL PRIMARY KEY,
FSO_NOM_AERO CHAR(8) NOT NULL UNIQUE,
FSO_DESIGNATION_CODE_US CHAR(4) NOT NULL UNIQUE,
FSO_DESIGNATION_LIBELLE_US VARCHAR(64),
FSO_DESIGNATION_CODE_FR CHAR(4) ,
FSO_DESIGNATION_LIBELLE_FR VARCHAR(64),
FSO_DECALAGE_UTC SMALLINT NOT NULL
CHECK (FSO_DECALAGE_UTC BETWEEN -12
AND 12));
GO
-- insertion des fuseaux européens
INSERT INTO T_FUSEAU_FSO
VALUES ('Z', 'Zoulou', 'WET', 'Western European Time', NULL, NULL, 0);
INSERT INTO T_FUSEAU_FSO
VALUES ('A', 'Alpha', 'CET', 'Central European Time', 'HNEC',
'heure normale de l''Europe centrale', 1);
-- table des zones de changement d'horaires
CREATE TABLE T_ZONE_CHANGE_HEURE_ZCH
(ZCH_ID SMALLINT IDENTITY NOT NULL PRIMARY KEY,
ZCH_REGION VARCHAR(64) NOT NULL);
GO
-- insertion des données de changement d'horaire
SET IDENTITY_INSERT T_ZONE_CHANGE_HEURE_ZCH ON;
INSERT INTO T_ZONE_CHANGE_HEURE_ZCH (ZCH_ID, ZCH_REGION)
VALUES (1, 'CEE : Communauté Économique Européenne');
SET IDENTITY_INSERT T_ZONE_CHANGE_HEURE_ZCH OFF;
-- table des dates des changements d'horaire
CREATE TABLE T_CHANGE_HEURE_DATE_AN_CHD
(CHD_AN SMALLINT NOT NULL,
ZCH_ID SMALLINT NOT NULL
FOREIGN KEY
REFERENCES T_ZONE_CHANGE_HEURE_ZCH (ZCH_ID),
CHD_DATEHEURE_CHANGE_ETE DATETIME,
CHD_DATEHEURE_CHANGE_HIVER DATETIME,
CHD_DECALAGE_ETE SMALLINT);
GO
-- insertion des données des changements d'horaire pour
-- la zone europe de 2001 jusqu'en 2020
DECLARE @AN SMALLINT, @DD DATETIME, @DF DATETIME;
SET @AN = 2001;
SET DATEFIRST 1;
WHILE @AN < 2020
BEGIN
-- passage à l'heure d'été, le dernier dimanche de mars à 1h
SET @DD = CAST(CAST(@AN AS CHAR(4)) + '0331 00:01' AS DATETIME);
WHILE DATEPART(weekday, @DD) <> 7
SET @DD = DATEADD(day, -1, @DD);
-- passage à l'heure d'hiver, le dernier dimanche d'octobre à 1h
SET @DF = CAST(CAST(@AN AS CHAR(4)) + '1031 00:01' AS DATETIME);
WHILE DATEPART(weekday, @DF) <> 7
SET @DF = DATEADD(day, -1, @DF);
INSERT INTO T_CHANGE_HEURE_DATE_AN_CHD VALUES (@AN, 1, @DD, @DF, 1);
SET @AN = @AN + 1;
END
GO
-- création de la table des zones des fuseaux horaires
CREATE TABLE T_ZONE_FUSEAU_ZFS
(ZFS_ID INT NOT NULL IDENTITY PRIMARY KEY,
ZFS_NOM VARCHAR(128) NOT NULL,
FSO_CODE CHAR(2) NOT NULL
FOREIGN KEY REFERENCES T_FUSEAU_FSO (FSO_CODE),
ZCH_ID SMALLINT NOT NULL
FOREIGN KEY REFERENCES T_ZONE_CHANGE_HEURE_ZCH (ZCH_ID));
GO
SET IDENTITY_INSERT T_ZONE_FUSEAU_ZFS ON;
-- insertion des zones géographiques et leur dépendance au fuseau horaire
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (1, 'Royaume-Uni', 'Z', 1);
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (2, 'Irlande', 'Z', 1);
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (3, 'Portugal', 'Z', 1);
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (4, 'Allemagne', 'A', 1);
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (5, 'Autriche', 'A', 1);
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (6, 'Belgique', 'A', 1);
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (7, 'Espagne', 'A', 1);
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (8, 'Italie', 'A', 1);
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (9, 'Pays-Bas', 'A', 1);
INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID)
VALUES (10, 'Suisse', 'A', 1);
--...
SET IDENTITY_INSERT T_ZONE_FUSEAU_ZFS OFF;
GO |
Partager