/*
Copyright "Conservatoire des Esapces Naturels du Languedoc-Roussillon"
(Contributeur : Mathieu Bossaert), 2006,2007,2008
cen-lr@wanadoo.fr, mathieu.bossaert@laposte.net

Ce logiciel est un programme informatique servant à structurer dans une base 
de données relationelle et spatiale (postgresql/postgis) les données produites 
et nécessaires au structure oeuvrant pour la protection, la gestion et la mise 
en valeur du patrimoine naturel. Cette base de données permet la gestion de 
données relatives à la faune, à la flore et aux habitats naturels, ainsi que les 
données générales relatives aux territoires.

Ce logiciel est régi par la licence CeCILL soumise au droit français et
respectant les principes de diffusion des logiciels libres. Vous pouvez
utiliser, modifier et/ou redistribuer ce programme sous les conditions
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA 
sur le site "http://www.cecill.info".

En contrepartie de l'accessibilité au code source et des droits de copie,
de modification et de redistribution accordés par cette licence, il n'est
offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,
seule une responsabilité restreinte pèse sur l'auteur du programme,  le
titulaire des droits patrimoniaux et les concédants successifs.

A cet égard  l'attention de l'utilisateur est attirée sur les risques
associés au chargement,  à l'utilisation,  à la modification et/ou au
développement et à la reproduction du logiciel par l'utilisateur étant 
donné sa spécificité de logiciel libre, qui peut le rendre complexe à 
manipuler et qui le réserve donc à des développeurs et des professionnels
avertis possédant  des  connaissances  informatiques approfondies.  Les
utilisateurs sont donc invités à charger  et  tester  l'adéquation  du
logiciel à leurs besoins dans des conditions permettant d'assurer la
sécurité de leurs systèmes et ou de leurs données et, plus généralement, 
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. 

Le fait que vous puissiez accéder à cet en-tête signifie que vous avez 
pris connaissance de la licence CeCILL, et que vous en avez accepté les
termes.
*/

/* Notes de version 
2088/10/28 : 
	-	correction de l'absence des tables taxon_animal_est_protege et taxon_vegetal_est_protege 
	-	suppression de la vue cen_export_ligne_flore_selon_format (les vues seront prioposées sur le site, comme les fonctions plpgsql
	-	suppression des commandes d'attribution de propriétaire
*/

/***************************************/
/* Création des tables et commentaires */
/***************************************/

CREATE TABLE entite_spatiale_ecologique (
    id_entite integer NOT NULL,
    id_protocole integer DEFAULT 1 NOT NULL,
    validateur_id_structure integer,
    id_lot integer,
    type_entite character varying(17) NOT NULL,
    validateur_code_personne character varying(10),
    date_creation date
);

COMMENT ON TABLE entite_spatiale_ecologique IS 'Cette table contient les informations communes à toutes les données naturalistes stockées dans cette base de données (les 9 tables de points, lignes et polygones relatives à la flore, à la faune et aux habitats naturels qui font référence à cette table).
Quand les CIR seront mieux gérées dans l''héritage par Postgresql, cette table sera la table parente dont hériteront 9 tables filles.';

CREATE TABLE ligne_flore (
    id_entite integer NOT NULL,
    effectif character varying(3),
    effectif_min integer,
    effectif_max integer,
    type_effectif character varying(30),
    phenologie character varying(40),
    id_taxon character varying(10) NOT NULL,
    structure_population integer NOT NULL,
    descriptif_milieu character varying(255),
    "precision" character varying(40),
    remarque character varying(254),
    date_obs date,
    date_textuelle character varying(40),
    date_debut_obs date,
    date_fin_obs date,
    date_ventilation date,
    taxon_mentionne character varying(254),
    transmis_cbnmp character varying(20)
);
SELECT AddGeometryColumn( 'ligne_flore', 'geometrie', 27572, 'MULTILINESTRING', 2);

COMMENT ON TABLE ligne_flore IS 'Stocke les entités spatiales écologiques relatives à la flore ayant une géométrie de type linéaire.
Cette table constitue une "spécialisation" de la table entite_spatiale_ecologique".';

CREATE TABLE perimetre_faune (
    id_entite integer NOT NULL,
    effectif integer,
    effectif_min integer,
    effectif_max integer,
    type_effectif character varying(30),
    surface_sig_ha double precision,
    id_taxon character varying(10) NOT NULL,
    "precision" character varying(40),
    remarque character varying(254),
    date_obs date,
    date_textuelle character varying(40),
    date_debut_obs date,
    date_fin_obs date,
    phenologie character varying(40),
    lieu_dit character varying(150),
    date_ventilation date,
    taxon_mentionne character varying(254)
);
SELECT AddGeometryColumn( 'perimetre_faune', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE perimetre_faune IS 'Stocke les entités spatiales écologiques relatives à la faune ayant une géométrie de type surfacique.
Cette table constitue une "spécialisation" de la table entite_spatiale_ecologique".';

CREATE TABLE perimetre_flore (
    id_entite integer NOT NULL,
    surface_sig_ha double precision,
    "precision" character varying(40),
    remarque character varying(254),
    date_obs date,
    date_textuelle character varying(40),
    date_debut_obs date,
    date_fin_obs date,
    phenologie character varying(40),
    effectif character varying(3),
    effectif_min integer,
    effectif_max integer,
    type_effectif character varying(30),
    id_taxon character varying(10),
    lieu_dit character varying(150),
    date_ventilation date,
    taxon_mentionne character varying(254)
);
SELECT AddGeometryColumn( 'perimetre_flore', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE perimetre_flore IS 'Stocke les entités spatiales écologiques relatives à la flore ayant une géométrie de type surfacique.
Cette table constitue une "spécialisation" de la table entite_spatiale_ecologique".';

CREATE TABLE perimetre_habitat (
    id_entite integer NOT NULL,
    surface_sig_ha double precision,
    nature_observation integer,
    commentaire_nature character varying(255),
    type_unite_vegetation integer,
    commentaire_type character varying(255),
    "precision" character varying(40),
    remarque character varying(254),
    date_obs date,
    date_debut_obs date,
    date_fin_obs date,
    date_textuelle character varying(40),
    complexe_habitat character varying(45),
    complexe_recouvrement character varying(25),
    etat_conservation character varying(15),
    lieu_dit character varying(150),
    transmis_cbnmp character varying(20),
    date_ventilation date
);
SELECT AddGeometryColumn( 'perimetre_habitat', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE perimetre_habitat IS 'Stocke les entités spatiales écologiques relatives aux habitats naturels ayant une géométrie de type surfacique.
Cette table constitue une "spécialisation" de la table entite_spatiale_ecologique".';

CREATE TABLE point_faune (
    id_entite integer NOT NULL,
    date_obs date,
    date_textuelle character varying(40),
    phenologie character varying(40),
    effectif integer,
    effectif_min integer,
    effectif_max integer,
    type_effectif character varying(30),
    coord_x double precision,
    coord_y double precision,
    coord_z double precision,
    systeme_coordonnees character varying(20),
    id_taxon character varying(10) NOT NULL,
    "precision" character varying(40),
    remarque character varying(254),
    unite character varying(15),
    lieu_dit character varying(150),
    date_debut_obs date,
    date_fin_obs date,
    taxon_mentionne character varying(254),
    date_ventilation date
);
SELECT AddGeometryColumn( 'point_faune', 'geometrie', 27572, 'POINT', 2);

COMMENT ON TABLE point_faune IS 'Stocke les entités spatiales écologiques relatives à la faune ayant une géométrie de type ponctuel.
Cette table constitue une "spécialisation" de la table entite_spatiale_ecologique".';

CREATE TABLE point_flore (
    id_entite integer NOT NULL,
    strate character varying(3),
    effectif character varying(3),
    type_effectif character varying(30),
    coord_x double precision,
    coord_y double precision,
    coord_z double precision,
    systeme_coordonnees character varying(20),
    id_taxon character varying(10) NOT NULL,
    id_releve integer,
    descriptif_milieu character varying(255),
    "precision" character varying(40),
    remarque character varying(254),
    transmis_cbnmp character varying(20),
    taxon_mentionne character varying(254),
    date_obs date,
    date_textuelle character varying(40),
    phenologie character varying(40),
    date_debut_obs date,
    date_fin_obs date,
    unite character varying(15),
    effectif_min integer,
    effectif_max integer,
    date_ventilation date
);
SELECT AddGeometryColumn( 'point_flore', 'geometrie', 27572, 'POINT', 2);

COMMENT ON TABLE point_flore IS 'Stocke les entités spatiales écologiques relatives à la flore ayant une géométrie de type ponctuel.
Cette table constitue une "spécialisation" de la table entite_spatiale_ecologique".';

CREATE TABLE point_habitat (
    id_entite integer NOT NULL,
    date_obs date,
    date_textuelle character varying(40),
    coord_x double precision,
    coord_y double precision,
    coord_z double precision,
    systeme_coordonnees character varying(20),
    "precision" character varying(40),
    remarque character varying(254),
    date_debut_obs date,
    date_fin_obs date,
    transmis_cbnmp character(20),
    complexe_habitat character varying(45),
    complexe_recouvrement character varying(25),
    etat_conservation character varying(15),
    date_ventilation date,
    unite character varying(15)
);
SELECT AddGeometryColumn( 'point_habitat', 'geometrie', 27572, 'POINT', 2);

COMMENT ON TABLE point_habitat IS 'Stocke les entités spatiales écologiques relatives aux habitats naturels ayant une géométrie de type ponctuel.
Cette table constitue une "spécialisation" de la table entite_spatiale_ecologique".';

CREATE TABLE donnees_bota_terrain (
    coordonnee_x numeric,
    coordeonnee_y numeric,
    systeme_coordonnee character varying(30),
    site character varying(60),
    nom_vernaculaire character varying(150),
    nom_complet character varying(150),
    referentiel_taxonomique character varying(30),
    date_obs date,
    date_debut_obs date,
    date_fin_obs date,
    date_textuelle character varying(30),
    effectif character varying(30),
    effectif_min character varying(10),
    effectif_max character varying(10),
    type_effcetif character varying(30),
    phenologie character varying(30),
    "precision" character varying(30),
    altitude integer,
    personne character varying(30),
    structure character varying(30),
    identificateur character varying(50),
    protocole character varying(30),
    biblio character varying(30),
    remarque text,
    ese_id_entite integer,
    data_id integer NOT NULL
);

COMMENT ON TABLE donnees_bota_terrain IS 'Table prévue pour la saisie des données de terrain relatives à la flore.';

CREATE TABLE ligne_faune (
    id_entite integer NOT NULL,
    date_obs date,
    date_textuelle character varying(40),
    phenologie character varying(40),
    effectif integer,
    effectif_min integer,
    effectif_max integer,
    type_effectif character varying(30),
    id_taxon character varying(10) NOT NULL,
    "precision" character varying(40),
    remarque character varying(254),
    date_debut_obs date,
    date_fin_obs date,
    lieu_dit character varying(150),
    date_ventilation date,
    taxon_mentionne character varying(254)
);
SELECT AddGeometryColumn( 'ligne_faune', 'geometrie', 27572, 'MULTILINESTRING', 2);

COMMENT ON TABLE ligne_faune IS 'Stocke les entités spatiales écologiques relatives à la faune ayant une géométrie de type linéaire.
Cette table constitue une "spécialisation" de la table entite_spatiale_ecologique".';

CREATE TABLE ligne_faune_a_importer (
    gid serial NOT NULL,
    id_entite bigint,
    nom_vernaculaire character varying(50),
    nom_scientifique character varying(150),
    id_taxon character varying(10),
    referentiel_taxonomique character varying(150),
    date_obs date,
    date_debut_obs date,
    date_fin_obs date,
    date_textuelle character varying(30),
    effectif integer,
    effectif_min integer,
    effectif_max integer,
    type_effectif character varying(15),
    phenologie character varying(30),
    "precision" character varying(30),
    lieu_dit character varying(17),
    altitude numeric,
    observateur character varying(35),
    structure character varying(50),
    numerisateur character varying(35),
    identificateur character varying(35),
    commanditaire character varying(50),
    id_lot_donnee character varying(40),
    id_releve integer,
    protocole integer,
    biblio character varying(10),
    remarque text,
    id_ese_znieff integer,
    date_ventilation date
);
SELECT AddGeometryColumn( 'ligne_faune_a_importer', 'geometrie', 27572, 'MULTILINESTRING', 2);

COMMENT ON TABLE ligne_faune_a_importer IS 'Table intermédaire entre les données extérieures au SI et les tables de la base de données.
Les données contenues dans cette table sont ventilées aprés vérification dans les tables "entite_spatiale_ecologique", "ligne_faune", "personne_est_auteur_donnee", "structure_est_auteur_donnee" et "structure_a_rendu_ese".';
CREATE TABLE ligne_habitat (
    id_entite integer NOT NULL,
    date_obs date,
    date_textuelle character varying(40),
    longueur_sig_km character varying(254),
    code_habitat character varying(10) NOT NULL,
    "precision" character varying(40),
    remarque character varying(254),
    date_debut_obs date,
    date_fin_obs date,
    date_ventilation date
);
SELECT AddGeometryColumn( 'ligne_habitat', 'geometrie', 27572, 'MULTILINESTRING', 2);

COMMENT ON TABLE ligne_habitat IS 'Stocke les entités spatiales écologiques relatives aux habitats naturels ayant une géométrie de type linéaire.
Cette table constitue une "spécialisation" de la table entite_spatiale_ecologique".';

CREATE TABLE ligne_habitat_presente_habitat (
    id_entite integer NOT NULL,
    code_habitat character varying(10) NOT NULL,
    recouvrement integer,
    etat_conservation integer,
    valeur_patrimoniale integer
);

COMMENT ON TABLE ligne_habitat_presente_habitat IS 'Lie une ese de type "ligne_habitats" aux habitats naturels élémentaires qui la constituent.';

CREATE TABLE perimetre_faune_a_importer (
    gid serial NOT NULL,
    id_entite bigint,
    nom_vernaculaire character varying(50),
    nom_scientifique character varying(150),
    date_obs date,
    date_debut_obs date,
    date_fin_obs date,
    date_textuelle character varying(30),
    protocole character varying(1),
    phenologie character varying(30),
    effectif bigint,
    effectif_min bigint,
    effectif_max bigint,
    type_effectif character varying(30),
    "precision" character varying(30),
    lieu_dit character varying(17),
    personne character varying(35),
    numerisateur character varying(35),
    structure character varying(6),
    commanditaire character varying(5),
    id_lot_donnee character varying(40),
    remarque text,
    id_releve numeric,
    biblio character varying(10),
    id_taxon character varying(10),
    referentiel_taxonomique character varying(150),
    id_ese_znieff integer,
    date_ventilation date
);
SELECT AddGeometryColumn( 'perimetre_faune_a_importer', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE perimetre_faune_a_importer IS 'Table intermédaire entre les données extérieures au SI et les tables de la base de données.
Les données contenues dans cette table sont ventilées aprés vérification dans les tables "entite_spatiale_ecologique", "perimetre_faune", "personne_est_auteur_donnee", "structure_est_auteur_donnee" et "structure_a_rendu_ese".';

CREATE TABLE perimetre_flore_a_importer (
    gid integer NOT NULL,
    id_entite bigint,
    taxon_mentionne character varying(50),
    nom_complet character varying(150),
    date_obs date,
    date_debut_obs date,
    date_fin_obs date,
    date_textuelle character varying(30),
    protocole character varying(1),
    phenologie character varying(30),
    effectif bigint,
    effectif_min bigint,
    effectif_max bigint,
    type_effectif character varying(30),
    "precision" character varying(30),
    lieu_dit character varying(17),
    personne character varying(35),
    numerisateur character varying(35),
    structure character varying(6),
    commanditaire character varying(5),
    id_lot_donnee character varying(40),
    remarque text,
    id_releve numeric,
    biblio character varying(10),
    id_taxon character varying(10),
    referentiel_taxonomique character varying(150),
    date_ventilation date
);
SELECT AddGeometryColumn( 'perimetre_flore_a_importer', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE perimetre_flore_a_importer IS 'Table intermédaire entre les données extérieures au SI et les tables de la base de données.
Les données contenues dans cette table sont ventilées aprés vérification dans les tables "entite_spatiale_ecologique", "perimetre_flore", "personne_est_auteur_donnee", "structure_est_auteur_donnee" et "structure_a_rendu_ese".';

CREATE TABLE perimetre_flore_presente_taxon (
    id_entite integer NOT NULL,
    id_taxon character varying(10) NOT NULL,
    effectif character varying(3),
    type_effectif character varying(30),
    structure_population integer,
    descriptif_milieu character varying(255)
);

COMMENT ON TABLE perimetre_flore_presente_taxon IS 'Lie une ese de type "perimetre_flore" aux taxons végétaux qui sont présents dans l''ese. Si le couvert végétal est monospécifique, on mentionne un seul taxon.';

CREATE TABLE perimetre_habitat_a_importer (
    gid integer NOT NULL,
    id_entite bigint,
    code_corine_1 character varying(15),
    recouvrement_hab_1 integer,
    surface_hab_1_ha double precision,
    code_corine_2 character varying(15),
    recouvrement_hab_2 integer,
    surface_hab_2_ha double precision,
    code_corine_3 character varying(15),
    recouvrement_hab_3 integer,
    surface_hab_3_ha double precision,
    nb_habitat bigint,
    espece_envahissante character varying(10),
    date_obs date,
    textuelle character varying(40),
    lot character varying(50),
    observateur character varying(35),
    numerisateur character varying(50),
    structure character varying(10),
    commanditaire character varying(10),
    protocole integer,
    complexe_habitat character varying(50),
    complexe_recouvrement character varying(30),
    etat_conservation character varying(15),
    biblio character varying(10),
    remarque character varying(254),
    "precision" character varying(40),
    lieu_dit character varying(150),
    date_ventilation date
);
SELECT AddGeometryColumn( 'perimetre_habitat_a_importer', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE perimetre_habitat_a_importer IS 'Table intermédaire entre les données extérieures au SI et les tables de la base de données.
Les données contenues dans cette table sont ventilées aprés vérification dans les tables "entite_spatiale_ecologique", "perimetre_habitat", "perimetre_habitat_presente_habitat", "personne_est_auteur_donnee", "structure_est_auteur_donnee" et "structure_a_rendu_ese".';

CREATE TABLE perimetre_habitat_presente_habitat (
    id_entite integer NOT NULL,
    code_habitat character varying(10) NOT NULL,
    surface_relative integer,
    recouvrement integer,
    etat_conservation integer,
    valeur_patrimoniale integer,
    ordre integer
);

COMMENT ON TABLE perimetre_habitat_presente_habitat IS 'Lie une ese de type "perimetre_habitats" aux habitats naturels élémentaires qui la constituent.';

CREATE TABLE point_faune_a_importer (
    gid integer NOT NULL,
    id_entite bigint,
    nom_vernaculaire character varying(50),
    nom_scientifique character varying(150),
    date_obs date,
    date_debut_obs date,
    date_fin_obs date,
    date_textuelle character varying(30),
    protocole character varying(1),
    phenologie character varying(30),
    effectif bigint,
    effectif_min bigint,
    effectif_max bigint,
    type_effectif character varying(15),
    "precision" character varying(30),
    systeme_coordonnees character varying(20),
    coord_x double precision,
    coord_y double precision,
    unite character varying(1),
    lieu_dit character varying(50),
    altitude double precision,
    observateur character varying(35),
    numerisateur character varying(35),
    structure character varying(6),
    commanditaire character varying(5),
    id_lot_donnee character varying(40),
    remarque text,
    id_releve integer,
    biblio character varying(10),
    id_taxon character varying(10),
    referentiel_taxonomique character varying(150),
    id_ese_znieff integer,
    date_ventilation date
);
SELECT AddGeometryColumn( 'point_faune_a_importer', 'geometrie', 27572, 'MULTIPOINT', 2);

COMMENT ON TABLE point_faune_a_importer IS 'Table intermédaire entre les données extérieures au SI et les tables de la base de données.
Les données contenues dans cette table sont ventilées aprés vérification dans les tables "entite_spatiale_ecologique", "point_faune", "personne_est_auteur_donnee", "structure_est_auteur_donnee" et "structure_a_rendu_ese".';

CREATE TABLE point_faune_terrain (
    gid integer NOT NULL,
    nom_vernaculaire character varying(50),
    nom_scientifique character varying(150),
    referentiel_taxonomique character varying(150) DEFAULT 'INPN'::character varying,
    date_obs date,
    date_debut_obs date,
    date_fin_obs date,
    date_textuelle character varying(30),
    protocole character varying(1),
    phenologie character varying(30),
    effectif bigint,
    effectif_min bigint,
    effectif_max bigint,
    type_effectif character varying(15),
    "precision" character varying(30),
    observateur character varying(35),
    numerisateur character varying(35),
    structure character varying(6) DEFAULT 'CENLR'::character varying,
    commanditaire character varying(5),
    id_lot_donnee character varying(40),
    remarque text,
    id_releve integer,
    id_taxon character varying(10),
    id_ese_znieff integer
);
SELECT AddGeometryColumn( 'point_faune_terrain', 'geometrie', 27572, 'MULTIPOINT', 2);

COMMENT ON TABLE point_faune_terrain IS 'Table de saisie des données faune, issues des observation de terrain.';

CREATE TABLE point_flore_a_importer (
    gid integer NOT NULL,
    id_entite integer,
    taxon_mentionne character varying(150),
    id_taxon_ref character varying(160),
    date_obs date,
    debut_obs date,
    fin_obs date,
    date_textuelle character varying(30),
    protocole bigint,
    effectif character varying(10),
    type_effectif character varying(50),
    "precision" character varying(15),
    syst_coord character varying(50),
    coord_x numeric,
    coord_y numeric,
    unite character varying(20),
    commune character varying(50),
    lieu_dit character varying(100),
    altitude bigint,
    observateur character varying(60),
    numerisateur_id_personne character varying(30),
    auteur_id_structure character varying(60),
    commanditaire_id_structure character varying(30),
    id_lot character varying(50),
    remarque character varying(254),
    numero_point_gps character varying(10),
    id_releve bigint,
    phenologie character varying(50),
    transmis_cbnmp character varying(20),
    strate character varying(3),
    descriptif_milieu character varying(254),
    effectif_min integer,
    effectif_max integer,
    date_ventilation date
);
SELECT AddGeometryColumn( 'point_flore_a_importer', 'geometrie', 27572, 'MULTIPOINT', 2);

COMMENT ON TABLE point_flore_a_importer IS 'Table intermédaire entre les données extérieures au SI et les tables de la base de données.
Les données contenues dans cette table sont ventilées aprés vérification dans les tables "entite_spatiale_ecologique", "point_flore", "personne_est_auteur_donnee", "structure_est_auteur_donnee" et "structure_a_rendu_ese".';

CREATE TABLE point_habitat_a_importer (
    gid integer NOT NULL,
    id_entite bigint,
    "precision" character varying(3),
    coord_x numeric,
    coord_y numeric,
    coord_z integer,
    unite character varying(10),
    systeme_coordonnees character varying(20),
    date_obs date,
    date_debut_obs date,
    date_fin_obs date,
    date_textuelle character varying(40),
    observateur character varying(30),
    numerisateur character varying(5),
    structure character varying(20),
    commanditaire character varying(20),
    id_lot_donnee character varying(50),
    protocole integer DEFAULT 1,
    remarque character varying(254),
    complexe_habitat character varying(45),
    complexe_recouvrement character varying(25),
    date_ventilation date,
    numero_point_gps character varying(10)
);
SELECT AddGeometryColumn( 'point_habitat_a_importer', 'geometrie', 27572, 'MULTIPOINT', 2);

COMMENT ON TABLE point_habitat_a_importer IS 'Table intermédaire entre les données extérieures au SI et les tables de la base de données.
Les données contenues dans cette table sont ventilées aprés vérification dans les tables "entite_spatiale_ecologique", "point_habitat", "point_habitat_présente_habitat", "personne_est_auteur_donnee", "structure_est_auteur_donnee" et "structure_a_rendu_ese".';

CREATE TABLE point_habitat_presente_habitat (
    id_entite integer NOT NULL,
    code_habitat character varying(10) NOT NULL,
    recouvrement integer,
    etat_conservation integer,
    valeur_patrimoniale integer,
    ordre integer
);

COMMENT ON TABLE point_habitat_presente_habitat IS 'Lie une ese de type "point_habitats" aux habitats naturels élémentaires qui la constituent.';

CREATE TABLE point_habitat_terrain (
    gid integer NOT NULL,
    objet_sig integer,
    coord_x numeric,
    coord_y numeric,
    coordonnee character varying(14),
    site character varying(24),
    complexe_habitat character varying(27),
    vegetation character varying(15),
    type character varying(20),
    relative character varying(1),
    complexe_recouvrement character varying(7),
    debut_obs character varying(1),
    fin_obs character varying(1),
    textuelle character varying(1),
    "precision" character varying(3),
    altitude character varying(6),
    personne character varying(25),
    structure character varying(7),
    identifica character varying(23),
    protocole character varying(6),
    biblio character varying(5),
    remarque character varying(71),
    lot_donnee character varying(26),
    date_obs date
);
SELECT AddGeometryColumn( 'point_habitat_terrain', 'geometrie', 27572, 'MULTIPOINT', 2);


CREATE TABLE releve_vegetation (
    id_releve integer NOT NULL,
    date_releve date NOT NULL,
    nature_du_releve double precision,
    coord_x double precision,
    coord_y double precision,
    coord_z double precision,
    systeme_coordonnees character varying(20),
    habitat_code_habitat character varying(10),
    syntaxon character varying(50),
    code_syntaxon character varying(20),
    roche_mere character varying(20),
    sol character varying(20),
    exposition character varying(4),
    pente integer,
    surface double precision,
    rec_strate_arboree integer NOT NULL,
    rec_strate_arbustive integer NOT NULL,
    rec_strate_herbacee integer NOT NULL,
    rec_strate_cryptogame integer NOT NULL,
    rec_litiere integer NOT NULL,
    rec_sol_nu integer NOT NULL,
    rec_rocher integer NOT NULL,
    hauteur_max_strate_arboree integer,
    hauteur_max_strate_arbustive integer,
    hauteur_max_strate_herbacee integer,
    mousse_identifiee boolean,
    lichen_identifie boolean,
    auteur_code_personne character varying(10),
    id_placette integer
);
SELECT AddGeometryColumn( 'releve_vegetation', 'geometrie', 27572, 'MULTIPOINT', 2);

COMMENT ON TABLE releve_vegetation IS 'Décrit les caratctéristques d''un relevé de vegetation. Il est ensuite associé à des "point_flore".';

CREATE TABLE placette (
    id_placette integer NOT NULL,
    coord_x numeric,
    coord_y double precision,
    coord_z double precision,
    systeme_coordonnee character varying(20),
    vegetation_initiale character varying(50),
    gestion character varying(50)
);


COMMENT ON TABLE placette IS 'Localisation et description des placettes de suivi de vegetation.';

CREATE TABLE biblio_concerne_ese (
    id_biblio integer NOT NULL,
    id_entite integer NOT NULL
);

COMMENT ON TABLE biblio_concerne_ese IS 'Associe chaque "entite_spatiale_ecologique" à la biblio qui la mentionne.';
COMMENT ON COLUMN biblio_concerne_ese.id_biblio IS 'l''identifiant de la ressource bibliographique concernée qui mentionne cette donnée ou de laquelle cette donnée est issue';

CREATE TABLE biblio_concerne_site (
    id_biblio integer NOT NULL,
    id_site integer NOT NULL
);

COMMENT ON TABLE biblio_concerne_site IS 'Associe à chaque site les références bilbiographique qui le concerne.';

CREATE TABLE carte_ign (
    code_carte character varying(10) NOT NULL,
    titre character varying(100),
    echelle character varying(12),
    source character varying(10),
    type_carte character varying(10)
);
SELECT AddGeometryColumn( 'carte_ign', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE carte_ign IS 'Contient la dalle des cartes IGN papier disponibles à l''échelle du territoire français.
Catalogue des cartes IGN papier détenues au CEN.';

CREATE TABLE commune (
    num_insee character varying(5) NOT NULL,
    departement_num_insee character varying(3) NOT NULL,
    toponyme character varying(50),
    surface_sig_ha double precision,
    geom_id serial NOT NULL
);
SELECT AddGeometryColumn( 'commune', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE commune IS 'Stocke pour chaque commune son numéro insee, son toponyme et sa composante géographique (limite).
La colonne departement_num_insee permet de faire la filiation entre département et commune (une extraction des deux premier ccaractères du numéro INSEE de la commune ferait l''affaire)..
La colonne "surface_sig_ha" peut être supprimée, la surface de chaque objet pouvant être calculée.
La colonne geom_id est nécessaire car de nombreuses applications sig se connectrant à postgis ont besoin que chaque objet soit identifié par une colonne numérique unique. Le code INSEE des communes pouvant contenir des lettres, il est de type "character varying(5)".';

CREATE TABLE lot_donnee (
    id_lot integer NOT NULL,
    libelle character varying(254),
    id_etude integer
);

COMMENT ON TABLE lot_donnee IS 'Décrit les lots de données produits ou utilisé au CEN.';

CREATE TABLE protocole (
    id_protocole integer NOT NULL,
    libelle character varying(255),
    auteurs text,
    id_biblio integer
);

COMMENT ON TABLE protocole IS 'Liste les protocoles utilisés pour la récolte des donéees stockées dans le système d''information.';

CREATE TABLE referentiel_taxon_vegetal (
    id_taxon character varying(10) NOT NULL,
    id_genre character varying(10),
    cd_taxsup_ge character varying(10),
    cd_taxsup_supra character varying(10),
    id_taxon_ref character varying(10) NOT NULL,
    rang character varying(4),
    nom_scientifique character varying(150),
    genre character varying(25),
    espece character varying(30),
    auteur_espece character varying(70),
    type_subsp character varying(15),
    sous_espece character varying(30),
    auteur_sous_espece character varying(60),
    type_infra_2 character varying(10),
    infra_2 character varying(60),
    auteur_infra_2 character varying(50),
    type_infra_3 character varying(255),
    infra_3 character varying(20),
    auteur_infra_3 character varying(25),
    biblio character varying(255),
    groupe character varying(5),
    cd_ciff character varying(10),
    envahissante boolean
);

COMMENT ON TABLE referentiel_taxon_vegetal IS 'Contient le référentiel des espèces végétales mis à disposition par le MNHN de Paris sur le site de l''''INPN (http://inpn.mnhn.fr).
Pour chaque taxon est mentionné le taxon parent, permettant une naviguation hiérarchique du référentiel.';

CREATE TABLE structure (
    id_structure integer NOT NULL,
    nom_structure character varying(100),
    detail_nom_structure character varying(255),
    statut character varying(20),
    adresse_1 character varying(60),
    adresse_2 character varying(60),
    adresse_3 character varying(60),
    code_postal character varying(5),
    ville character varying(40),
    pays character varying(20),
    tel character varying(14),
    fax character varying(14),
    courriel_1 character varying(60),
    courriel_2 character varying(60),
    site_web character varying(60),
    remarque character varying(255),
    date_maj character varying(10)
);

COMMENT ON TABLE structure IS 'Stocke les informations sur les structures partenaires du CEN, ou ayant produit des informations stockée ou ayant commandé des études...';

CREATE TABLE structure_est_auteur_donnee (
    id_entite integer NOT NULL,
    id_structure integer NOT NULL,
    ordre integer
);

COMMENT ON TABLE structure_est_auteur_donnee IS 'Associe la ou les structure auteur d''une ese donnée. La liste de ces structure est ordonnée.';

CREATE TABLE referentiel_taxon_animal (
    id_taxon character varying(10) NOT NULL,
    id_taxon_ref character varying(10),
    nom_scientifique character varying(60),
    nom_vernaculaire character varying(40),
    niveau character varying(20),
    auteur character varying(70),
    nom_complet character varying(90),
    presence_france character varying(18),
    id_taxon_parent character varying(10),
    validite character varying(10),
    envahissante boolean
);

COMMENT ON TABLE referentiel_taxon_animal IS 'Contient le référentiel des espèces animales mis à disposition par le MNHN de Paris sur le site de l''''INPN (http://inpn.mnhn.fr).
Pour chaque taxon est mentionné le taxon parent, permettant une naviguation hiérarchique du référentiel.';

CREATE TABLE clc (
    id_entite_clc integer NOT NULL,
    id_poste character varying(3)
);
SELECT AddGeometryColumn( 'clc', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE clc IS 'Cette table contient la couche "Corine land Cover", constituée d''un découpage surfacique du territoire selon l''occupation du sol.';

CREATE TABLE contact (
    id_contact integer NOT NULL,
    id_personne integer,
    code_programme character varying(20),
    id_structure integer,
    service character varying(75),
    fonction character varying(100),
    telephone character varying(14),
    portable character varying(14),
    fax character varying(14),
    courriel character varying(60),
    remarque character varying(255),
    date_maj character varying(10)
);

COMMENT ON TABLE contact IS 'Cette relation stocke les contacts du CEN.
Un contact, dans ce SI est l''association entre une personne et une structure. Par exemple, Monsieur X travail à la SAFER, c''est un contact du CEN au sein de cette structure. On peut auusi connaitre Monsieur X par son activité bénévole au sein d''une structure naturaliste. Il s''agit alors d''un nouveau contact.
Monsieur X est un contact du CEN au sein de la SAFEr et de la strcuture naturaliste.';

CREATE TABLE departement (
    num_insee character varying(3) NOT NULL,
    region_num_insee character varying(2) NOT NULL,
    toponyme character varying(30),
    geom_id serial NOT NULL
);
SELECT AddGeometryColumn( 'departement', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE departement IS 'Contient pour chaque département son numéro, son nom et le numéro de la région dont il est une composante.
La colonne geom_id est nécessaire car de nombreuses applications sig se connectant à postgis ont besoin que chaque objet soit identifié par une colonne numérique unique. Les code INSEE des départements pouvant contenir des lettres, il est de type "character varying(2)".';

CREATE TABLE description_habitat (
    code_habitat character varying(10) NOT NULL,
    description text,
    ecologie text,
    frequence_lr character varying(255),
    particularite text,
    interet text,
    etat_conservation_national text
);

COMMENT ON TABLE description_habitat IS 'Table permettant l''élaboration de fiches habitat, elle contient les informations générales relatives à l''habitat.';

CREATE TABLE description_habitat_sur_site (
    code_habitat character varying(10) NOT NULL,
    id_site integer NOT NULL,
    frequence character varying(255),
    etat_de_conservation text,
    localisation text,
    preconisation_de_gestion text,
    superficie double precision,
    importance_du_site_pour_habitat text,
    ordre integer
);

COMMENT ON TABLE description_habitat_sur_site IS 'Permet d''affiner la fiche habitat pour un site d''étude donné, en tenant compte du contexte local.';

CREATE TABLE elt_evolution_zone (
    id_elt character varying(4) NOT NULL,
    libelle_elt character varying(130),
    id_elt_pere character varying(4)
);

COMMENT ON TABLE elt_evolution_zone IS 'Table décrivant l''ensemble des facteurs susceptible de faire évoluer une zone donnée.
Elle est issu du guide méthodologie pour la modernisation des ZNIEFF.';

CREATE TABLE emprise_structure (
    id_structure integer NOT NULL
);
SELECT AddGeometryColumn( 'emprise_structure', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE emprise_structure IS 'Cette table permet de stocker l''emprise du territoire de compétence des structures partenaires. Elle est utile pour exporter les données produites au CEN régulièrement vers cette structure.';
COMMENT ON COLUMN emprise_structure.id_structure IS 'L''identifiant de la structure.';

CREATE TABLE ese_repose_sur_ese (
    composant_id_entite integer NOT NULL,
    composite_id_entite integer NOT NULL
);

COMMENT ON TABLE ese_repose_sur_ese IS 'Certaines entités spatiales écologiques reposent sur les entités plus petites. Cette table permet de faire le lien entre l''ese "composite" et les ese composant "sous-jacentes".
Cette notion permet d''apréhender par exemple les réseau de mare ou les noyaox de population. Elle n''a pas été utilisée pour l''instant.';

CREATE TABLE etude (
    id_etude integer NOT NULL,
    nom_etude character varying(254),
    annee_debut integer NOT NULL,
    annee_fin integer,
    cahier_des_charges character varying(254)
);

COMMENT ON TABLE etude IS 'Cette table est nécesaire pour associer les données produites ou stockée dans la bdd aux études qui les ont mobilisé ou qui ont nécessité leur production. C''est un élément important de description de la donnée.';

CREATE TABLE etude_concerne_site (
    id_etude integer NOT NULL,
    id_site integer NOT NULL
);

COMMENT ON TABLE etude_concerne_site IS 'Chaque étude peut ainsi porter sur un ou plusieurs sites (de la table site).';

CREATE TABLE eur_15 (
    code_eur_15 character varying(10) NOT NULL,
    intitule_eur_15 text,
    prioritaire boolean,
    interet_communautaire boolean
);

COMMENT ON TABLE eur_15 IS 'Contient la typologie d''habitats naturels EUR 15.';

CREATE TABLE facteur_evolution_ese (
    id_entite integer NOT NULL,
    id_elt character varying(4) NOT NULL,
    ordre integer,
    description character varying(150)
);

COMMENT ON TABLE facteur_evolution_ese IS 'Liste pour chaque ese considérée les facteurs potentiels d''évolution (référence à la table elt_evolution_zone).';

CREATE TABLE facteur_evolution_habitat (
    id_entite integer NOT NULL,
    code_habitat character varying(6) NOT NULL,
    id_elt character varying(4) NOT NULL,
    ordre integer,
    description character varying(150)
);

COMMENT ON TABLE facteur_evolution_habitat IS 'Liste pour chaque habitat considéré les facteurs potentiels d''évolution (référence à la table elt_evolution_zone).';

CREATE TABLE fiche_habitat (
    ese_id_entite integer NOT NULL,
    url character varying(255) NOT NULL
);

COMMENT ON TABLE fiche_habitat IS 'Lie une ese à la fiche habitat qui lui correspond.';

CREATE TABLE fichier_image (
    url_fichier_image character varying(30) NOT NULL,
    chemin_complet_repertoire character varying(255) NOT NULL
);

COMMENT ON TABLE fichier_image IS 'Stocke le chemin vers les fichiers image (toutes thématiques confondues).';

CREATE TABLE fichier_sig (
    url_fichier_sig character varying(30) NOT NULL,
    chemin_complet_repertoire character varying(255) NOT NULL
);

COMMENT ON TABLE fichier_sig IS 'Cette table est un vestige d''une implémentation de la base de données sur un couple logiciel "SGBD / SIG Outil". Elle n''est plus utile au fonctionnement du SI.';

CREATE TABLE genre_famille_taxon_vegetal (
    id_genre character varying(10) NOT NULL,
    libelle_genre character varying(25),
    libelle_famille character varying(25),
    auteur character varying(50),
    groupe character varying(5)
);

COMMENT ON TABLE genre_famille_taxon_vegetal IS 'Cette table stocke les taxons végétaux de rang supérieur à l''espèce, elle permet de définir l''arborescence du référentile taxonomique des espèces végétales. 
Les données contenues sont issue du référentiel du MNHN.';

CREATE TABLE groupe (
    code_groupe character varying(40) NOT NULL,
    libelle_groupe character varying(60) NOT NULL
);

COMMENT ON TABLE groupe IS 'Déclinaison des principaux groupes taxonomiques. Ces groupes correspondent aux listes d''espèces déterminantes ZNIEFF.';

CREATE TABLE habitat_est_eur_15 (
    code_habitat character varying(10) NOT NULL,
    code_eur_15 character varying(10) NOT NULL
);

COMMENT ON TABLE habitat_est_eur_15 IS 'Correspondance entre code corine et typologie EUR 15 des habitats naturels.';

CREATE TABLE habitat_est_note (
    finalite character varying(10) NOT NULL,
    code_habitat character varying(10) NOT NULL,
    note integer NOT NULL,
    classe character varying(2)
);

COMMENT ON TABLE habitat_est_note IS 'Permet d''établir des grilles de notation pour les habitats naturels. autant de notation d''un même habitat que de projets sont possibles.';

CREATE TABLE habitat_est_protege (
    code_habitat character varying(10) NOT NULL,
    code_protection character varying(10) NOT NULL
);

COMMENT ON TABLE habitat_est_protege IS 'Associe chaques habitat naturels à un ou plusieurs codes de protection même si cette notion n''est pas juste pour les habitats naturels.';

CREATE TABLE habitat_est_sur_site (
    id_site integer NOT NULL,
    code_habitat character varying(10) NOT NULL,
    ordre integer,
    description character varying(150)
);

COMMENT ON TABLE habitat_est_sur_site IS 'Table permettant d''associer un habitat à un site et de constituer ainsi des listes d''habitat par site même si nous ne disposns pas des donénes brutes dans le SI, rendant toute intersection entre les couches site et habitat non exhaustive.';

CREATE TABLE liste_espece_animale_determinante (
    id_taxon character varying(10),
    nom_scientifique character varying(50) NOT NULL,
    nom_vernaculaire character varying(60),
    cortege character varying(25),
    determinance character varying(15) NOT NULL,
    critere character varying(120),
    statut_considere character varying(30),
    note integer,
    code_groupe character varying(40) NOT NULL,
    url_fichier_image character varying(30),
    remarque character varying(255)
);

COMMENT ON TABLE liste_espece_animale_determinante IS 'Contient la liste des espèces animales déterminantes utilisée pour la modernisation des ZNIEFF. Cette liste constitue au delà des ZNIEFF une base de travail pour la hiérarchisation des taxons à l''échelle régionale.';

CREATE TABLE liste_espece_vegetale_determinante (
    id_taxon character varying(10) NOT NULL,
    nom_scientifique character varying(60) NOT NULL,
    nom_vernaculaire character varying(60),
    statut_france character varying(25),
    code_groupe character varying(40),
    url_fichier_image character varying(30),
    note integer,
    determinance character varying(20),
    remarque text
);

COMMENT ON TABLE liste_espece_vegetale_determinante IS 'Contient la liste des espèces végétales déterminantes utilisée pour la modernisation des ZNIEFF. Cette liste constitue au delà des ZNIEFF une base de travail pour la hiérarchisation des taxons à l''échelle régionale.';

CREATE TABLE liste_habitat_determinant (
    code_habitat character varying(10) NOT NULL,
    url_fichier_image character varying(30)
);

COMMENT ON TABLE liste_habitat_determinant IS 'Contient la liste des habitats naturels déterminants utilisée pour la modernisation des ZNIEFF. Cette liste constitue au delà des ZNIEFF une base de travail pour la hiérarchisation des habitats naturels à l''échelle régionale.';

CREATE TABLE parcellaire (
    id_parcelle integer NOT NULL,
    proprietaire character varying(255),
    date_validite date,
    source character varying(20),
    remarques character varying(120),
    num_parcelle character varying(16),
    surface_cadastrale double precision
);
SELECT AddGeometryColumn( 'parcellaire', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE parcellaire IS 'Contient le parcellaire. Pour chaque parcelle sont mentionnés la source, la date de validité du fichier original et le comte de propriété de la parcelle.
Ce dernier attribut permet de stocker les informations relatives au domaines du CEL RL, des CG et du CEN.
La colonne surface_cadastrale mentionne la surface "fiscale", différente d''une surface calculée par les fonctions géographiques.
Cette table sera modifiée pour intégrer la bd parcellaire.';

CREATE TABLE perimetre (
    id_perimetre character varying(15) NOT NULL,
    type_perimetre character varying(15),
    intitule character varying(100),
    code_perimetre character varying(15) NOT NULL,
    echelle_digitalisation character varying(15),
    date_validite date,
    geom_id serial NOT NULL,
    url_fichier_sig character varying(255),
    id_objet_sig character varying(10),
    remarque character varying(255)
);
SELECT AddGeometryColumn( 'perimetre', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE perimetre IS 'Cette table stocke l''ensemble des périmètres d''inventaire et des périmètres réglementaires de la région.
Chaque périmètre est typé (attribut "type_perimetre"), ce qui permet l''affichage sélectif des périmètres selon leur type à travers des vues.';

CREATE TABLE personne (
    id_personne integer NOT NULL,
    date_maj character varying(10),
    remarque character varying(255),
    courriel_2 character varying(60),
    courriel_1 character varying(60),
    fax character varying(14),
    portable character varying(14),
    tel_pro character varying(14),
    tel_perso character varying(14),
    pays character varying(20),
    ville character varying(40),
    code_postal character varying(6),
    adresse_3 character varying(60),
    adresse_2 character varying(60),
    adresse_1 character varying(60),
    prenom character varying(20),
    nom character varying(50),
    titre character varying(13),
    code_personne character varying(10)
);

COMMENT ON TABLE personne IS 'Contient les informations relatives aux personnes ayant par exemple fourni des données au CEN LR ou ayant produit des données dans le cadre d''activité salariée ou de stage.';

CREATE TABLE personne_est_auteur_donnee (
    id_entite integer NOT NULL,
    code_personne character varying(10) NOT NULL,
    ordre integer
);

COMMENT ON TABLE personne_est_auteur_donnee IS 'Cette table permet d''associer à chaque ese un nombre non limité de personne ayant contribué à la création de cette donnée. La liste de ces personnes est ordonnée.';

CREATE TABLE personne_realise_etude (
    id_personne integer NOT NULL,
    id_etude integer NOT NULL,
    role character varying(255)
);

COMMENT ON TABLE personne_realise_etude IS 'Permet de mentionner quels sont les salariés et stagiaires de la structure qui ont participé aux études et quel a été le rôle de chacun.';

CREATE TABLE poste_clc (
    id_poste character varying(3) NOT NULL,
    id_poste_parent character varying(3),
    libelle character varying(100)
);

COMMENT ON TABLE poste_clc IS 'Contient l''integralité de la typologie Corine Land Cover.';

CREATE TABLE protection (
    code_protection character varying(10) NOT NULL,
    article character varying(60),
    intitule character varying(100),
    arrete character varying(255),
    niveau character varying(15),
    arrete_code_arrete character varying(10),
    url character varying(150),
    date_arrete integer,
    libelle_article text
);

COMMENT ON TABLE protection IS 'Contient les différents type de protection. Ces données sont issues du site de l''INPN.';

CREATE TABLE referentiel_cartographique (
    libelle_referentiel character varying(15) NOT NULL,
    date_version integer NOT NULL,
    echelle character varying(10),
    auteur_referentiel character varying(25),
    description character varying(150)
);

CREATE TABLE referentiel_habitat (
    code_habitat character varying(10) NOT NULL,
    nom_vernaculaire character varying(100),
    commentaire text,
    nom_scientifique character varying(255),
    espece text,
    bibliographie text,
    code_natura character varying(4),
    officiel boolean DEFAULT false,
    prioritaire_eur_15 boolean,
    interet_eur_15 boolean
);

COMMENT ON TABLE referentiel_habitat IS 'Contient la typologie corine biotope.';

CREATE TABLE region (
    num_insee character varying(2) NOT NULL,
    toponyme character varying(40) NOT NULL
);

COMMENT ON TABLE region IS 'Contient le code insee et le toponyme de la région. On peut y stocker plus d''une région.';

CREATE TABLE repertoire (
    chemin_complet_repertoire character varying(255) NOT NULL,
    pere_chemin_comp_repertoire character varying(255)
);

COMMENT ON TABLE repertoire IS 'Permet de reconstituer le système de fichier, depuis la racine jusqu''au feuilles de l''arborescence.';

CREATE TABLE ressource_bibliographique (
    id_biblio integer NOT NULL,
    type_de_document character varying(255),
    titre text,
    auteur_physique text,
    editeur character varying(255),
    annee integer,
    date_doc character varying(20),
    resume text,
    mot_clef text,
    descripteur_geographique text,
    nb_page character varying(30),
    page_debut integer,
    page_fin integer,
    titre_revue_livre character varying(255),
    num_revue character varying(8),
    volume character varying(8),
    isbn_code_barre character varying(20),
    diplome character varying(255),
    universite character varying(255),
    directeur character varying(50),
    echelle_carte character varying(20),
    nom_colloque character varying(255),
    date_colloque character varying(30),
    ville_colloque character varying(255),
    confidentialite character varying(50),
    auteur_moral text,
    langue character varying(20),
    version character varying(10),
    reference text,
    cote_interne character varying(20)
);

COMMENT ON TABLE ressource_bibliographique IS 'Listes les références bibliographiques mentionnées dans la bdd, soit parce que des données stockée dans le système d''information y sont décrites, soit parce que ces références sont produites lors des études réalisées par la structures. ';
COMMENT ON COLUMN ressource_bibliographique.reference IS 'la référence compléte du document, a dispatcher dans les champs de la table';

CREATE TABLE site (
    id_site integer NOT NULL,
    toponyme character varying(254),
    altitude_min integer,
    altitude_max integer,
    altitude_moy integer,
    type_site character varying(20)
);
SELECT AddGeometryColumn( 'site', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE site IS 'Permet de décrire et définir la notion de site, trés subjective et d''y associer une extension spatiales.';

CREATE TABLE site_est_dans_site (
    contenu_id_site integer NOT NULL,
    contenant_id_site integer NOT NULL
);

COMMENT ON TABLE site_est_dans_site IS 'Les sites peuvent être imbriqués. par exemple, le site dit de "l''estagnol" va inclure le site dit "digue de péchiney".';

CREATE TABLE structure_a_transmis_ese (
    id_entite integer NOT NULL,
    id_structure integer NOT NULL
);

COMMENT ON TABLE structure_a_transmis_ese IS 'Associe à chaque ese la structure qui l''a trnasmise au CEN.';

CREATE TABLE structure_corealise_etude (
    id_structure integer NOT NULL,
    id_etude integer NOT NULL,
    ordre integer NOT NULL
);

COMMENT ON TABLE structure_corealise_etude IS 'Liste l''ensmbel des structures participant à la réalisation d''une étude donnée.';

CREATE TABLE structure_finance_etude (
    id_etude integer NOT NULL,
    id_structure integer NOT NULL,
    montant bigint
);

CREATE TABLE structure_vegetation (
    id_entite_vegetation integer NOT NULL,
    code_vegetation character varying(10) NOT NULL,
    annee integer,
    referentiel_libelle_referentiel character varying(15),
    referentiel_date_version integer
);

SELECT AddGeometryColumn( 'structure_vegetation', 'geometrie', 27572, 'MULTIPOLYGON', 2);

COMMENT ON TABLE structure_vegetation IS 'Contient la structure de la végétaion de divers sites à une date donnée réalisées par photointerprétation et/iou par campgne de terrain. L''année correspond à l''année du cliché utilisé ou à l''année de la campagne.';

CREATE TABLE suivi_placette (
    id_placette integer NOT NULL,
    date date NOT NULL,
    id_taxon character varying(10),
    abondance_dominance character varying(1),
    strate character varying(2) NOT NULL,
    remarque text,
    nom_scientifique character varying(100) NOT NULL
);

COMMENT ON TABLE suivi_placette IS 'Cette table permet de réaliser le suivi des placette de suivi d''évolution de la végétation. A travers à la vue "gardon_suivi_placette_evolution_annuelle" , elle permet pour chaque taxon et pour chaque strate de végétation de suivre son évolution d''une année n à l''année n+1.';

CREATE TABLE taxon_animal_est_note (
    finalite character varying(10) NOT NULL,
    id_taxon character varying(10) NOT NULL,
    note integer NOT NULL,
    classe character varying(2),
    code_groupe character varying(40)
);

COMMENT ON TABLE taxon_animal_est_note IS 'Permet d''établir des grilles de notation pour la faune. autant de notation d''un même taxon que de projets sont possibles.';

CREATE TABLE taxon_animal_est_protege
(
  id_taxon character varying(10) NOT NULL,
  code_protection character varying(10) NOT NULL
)
;

COMMENT ON TABLE taxon_animal_est_protege IS 'Associe chaque taxon animal au(x) code(s) de protection qui le concerne.';

CREATE TABLE taxon_animal_est_sur_site (
    id_taxon character varying(10) NOT NULL,
    id_site integer NOT NULL,
    date_derniere_mention character varying(30)
);

COMMENT ON TABLE taxon_animal_est_sur_site IS 'Table permettant d''associer un taxon animal à un site et de constituer ainsi des listes d''espèces par site même si nous ne disposns pas des données brutes dans le SI, rendant toute intersection entre les couches "site" et "faune" non exhaustive.
L''utilisation de cette table peut aussi être envisagée pour la constitution d''espèces à dire d''expert.';

CREATE TABLE taxon_vegetal_est_note (
    finalite character varying(10) NOT NULL,
    id_taxon character varying(10) NOT NULL,
    note integer NOT NULL,
    classe character varying(2)
);

COMMENT ON TABLE taxon_vegetal_est_note IS 'Permet d''établir des grilles de notation pour la faune. autant de notation d''un même taxon que de projets sont possibles.';

CREATE TABLE taxon_vegetal_est_protege
(
  id_taxon character varying(10) NOT NULL,
  code_protection character varying(10) NOT NULL
);

COMMENT ON TABLE taxon_vegetal_est_protege IS 'Associe chaque taxon vegetal au(x) code(s) de protection qui le concerne.';

CREATE TABLE taxon_vegetal_est_sur_site (
    id_taxon character varying(10) NOT NULL,
    id_site integer NOT NULL,
    date_derniere_mention character varying(30)
);

COMMENT ON TABLE taxon_vegetal_est_sur_site IS 'Table permettant d''associer un taxon végétal à un site et de constituer ainsi des listes d''espèces par site même si nous ne disposns pas des données brutes dans le SI, rendant toute intersection entre les couches "site" et "flore" non exhaustive.
L''utilisation de cette table peut aussi être envisagée pour la constitution d''espèces à dire d''expert.';

CREATE TABLE taxon_vegetal_indique_habitat (
    id_taxon character varying(10) NOT NULL,
    code_habitat character varying(10) NOT NULL
);

COMMENT ON TABLE taxon_vegetal_indique_habitat IS 'Certains habitats naturels sont cartactérisés par une espèce végétale. Cette table permet de tenir compte des données d''espèces végétales lors de requêtes sur les habitats naturels, grace à l''emploi de la vue "bota_point_habitat_selon_point_flore".';

CREATE SEQUENCE entite_spatiale_ecologique_id_entite_seq
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

/*************************************/
/* Création des contraintes et index */
/*************************************/

ALTER TABLE ONLY biblio_concerne_ese
    ADD CONSTRAINT biblio_concerne_ese_pk PRIMARY KEY (id_biblio, id_entite);

ALTER TABLE ONLY commune
    ADD CONSTRAINT commune_geom_id_key UNIQUE (geom_id);

ALTER TABLE ONLY departement
    ADD CONSTRAINT departement_geom_id_key UNIQUE (geom_id);

ALTER TABLE ONLY donnees_bota_terrain
    ADD CONSTRAINT donnees_bota_terrain_pkey PRIMARY KEY (data_id);

ALTER TABLE ONLY emprise_structure
    ADD CONSTRAINT emprise_structure_pk PRIMARY KEY (id_structure);

ALTER TABLE ONLY habitat_est_note
    ADD CONSTRAINT hbitat_est_note_pk PRIMARY KEY (finalite, code_habitat, note);

ALTER TABLE ONLY ligne_faune_a_importer
    ADD CONSTRAINT ligne_faune_a_importer_pkey PRIMARY KEY (gid);

ALTER TABLE ONLY parcellaire
    ADD CONSTRAINT parcellaire_pkey PRIMARY KEY (id_parcelle);

ALTER TABLE ONLY perimetre_faune_a_importer
    ADD CONSTRAINT perimetre_faune_a_importer_pkey PRIMARY KEY (gid);

ALTER TABLE ONLY perimetre_flore_a_importer
    ADD CONSTRAINT perimetre_fflore_a_importer_pkey PRIMARY KEY (gid);

ALTER TABLE ONLY perimetre_habitat_a_importer
    ADD CONSTRAINT perimetre_habitat_littoral_pkey PRIMARY KEY (gid);

ALTER TABLE ONLY biblio_concerne_site
    ADD CONSTRAINT pk_biblio_concerne_site PRIMARY KEY (id_biblio, id_site);

ALTER TABLE ONLY carte_ign
    ADD CONSTRAINT pk_carte_ign PRIMARY KEY (code_carte);

ALTER TABLE ONLY clc
    ADD CONSTRAINT pk_clc PRIMARY KEY (id_entite_clc);

ALTER TABLE ONLY commune
    ADD CONSTRAINT pk_commune PRIMARY KEY (num_insee);

ALTER TABLE ONLY contact

    ADD CONSTRAINT pk_contact PRIMARY KEY (id_contact);

ALTER TABLE ONLY departement
    ADD CONSTRAINT pk_departement PRIMARY KEY (num_insee);

ALTER TABLE ONLY description_habitat
    ADD CONSTRAINT pk_description_habitat PRIMARY KEY (code_habitat);

ALTER TABLE ONLY description_habitat_sur_site
    ADD CONSTRAINT pk_descroption_habitat_sur_site PRIMARY KEY (code_habitat, id_site);

ALTER TABLE ONLY elt_evolution_zone
    ADD CONSTRAINT pk_elt_evolution_zone PRIMARY KEY (id_elt);

ALTER TABLE ONLY entite_spatiale_ecologique
    ADD CONSTRAINT pk_entite_spatiale_ecologique PRIMARY KEY (id_entite);

ALTER TABLE ONLY ese_repose_sur_ese
    ADD CONSTRAINT pk_ese_repose_sur_ese PRIMARY KEY (composant_id_entite, composite_id_entite);

ALTER TABLE ONLY liste_espece_animale_determinante
    ADD CONSTRAINT pk_espece_animale PRIMARY KEY (code_groupe, nom_scientifique);

ALTER TABLE ONLY liste_espece_vegetale_determinante
    ADD CONSTRAINT pk_espece_vegetale PRIMARY KEY (id_taxon);

ALTER TABLE ONLY etude
    ADD CONSTRAINT pk_etude PRIMARY KEY (id_etude);

ALTER TABLE ONLY etude_concerne_site
    ADD CONSTRAINT pk_etude_concerne_site PRIMARY KEY (id_etude, id_site);

ALTER TABLE ONLY eur_15
    ADD CONSTRAINT pk_eur_15 PRIMARY KEY (code_eur_15);

ALTER TABLE ONLY facteur_evolution_ese
    ADD CONSTRAINT pk_facteur_evolution_ese PRIMARY KEY (id_entite, id_elt);

ALTER TABLE ONLY facteur_evolution_habitat
    ADD CONSTRAINT pk_facteur_evolution_habitat PRIMARY KEY (id_entite, code_habitat, id_elt);

ALTER TABLE ONLY fiche_habitat
    ADD CONSTRAINT pk_fiche_habitat PRIMARY KEY (ese_id_entite, url);

ALTER TABLE ONLY fichier_image
    ADD CONSTRAINT pk_fichier_image PRIMARY KEY (url_fichier_image);

ALTER TABLE ONLY fichier_sig
    ADD CONSTRAINT pk_fichier_sig PRIMARY KEY (url_fichier_sig);

ALTER TABLE ONLY genre_famille_taxon_vegetal
    ADD CONSTRAINT pk_gen_gam PRIMARY KEY (id_genre);

ALTER TABLE ONLY groupe
    ADD CONSTRAINT pk_groupe PRIMARY KEY (code_groupe);

ALTER TABLE ONLY referentiel_habitat
    ADD CONSTRAINT pk_habitat PRIMARY KEY (code_habitat);

ALTER TABLE ONLY liste_habitat_determinant
    ADD CONSTRAINT pk_habitat_determinant PRIMARY KEY (code_habitat);

ALTER TABLE ONLY habitat_est_eur_15
    ADD CONSTRAINT pk_habitat_est_eur_15 PRIMARY KEY (code_habitat, code_eur_15);

ALTER TABLE ONLY habitat_est_protege
    ADD CONSTRAINT pk_habitat_est_protege PRIMARY KEY (code_protection, code_habitat);

ALTER TABLE ONLY habitat_est_sur_site
    ADD CONSTRAINT pk_habitat_est_sur_site PRIMARY KEY (code_habitat, id_site);

ALTER TABLE ONLY ligne_faune
    ADD CONSTRAINT pk_ligne_faune PRIMARY KEY (id_entite);

ALTER TABLE ONLY ligne_flore
    ADD CONSTRAINT pk_ligne_flore PRIMARY KEY (id_entite);

ALTER TABLE ONLY ligne_habitat
    ADD CONSTRAINT pk_ligne_habitat PRIMARY KEY (id_entite);

ALTER TABLE ONLY ligne_habitat_presente_habitat
    ADD CONSTRAINT pk_ligne_habitat_concerne_habitat PRIMARY KEY (id_entite, code_habitat);

ALTER TABLE ONLY lot_donnee
    ADD CONSTRAINT pk_lot_donnee PRIMARY KEY (id_lot);

ALTER TABLE ONLY perimetre_flore_presente_taxon
    ADD CONSTRAINT pk_perim_flore_pres_taxon PRIMARY KEY (id_entite, id_taxon);

ALTER TABLE ONLY perimetre
    ADD CONSTRAINT pk_perimetre PRIMARY KEY (id_perimetre);

ALTER TABLE ONLY perimetre_faune
    ADD CONSTRAINT pk_perimetre_faune PRIMARY KEY (id_entite);

ALTER TABLE ONLY perimetre_flore
    ADD CONSTRAINT pk_perimetre_flore PRIMARY KEY (id_entite);

ALTER TABLE ONLY perimetre_habitat
    ADD CONSTRAINT pk_perimetre_habitat PRIMARY KEY (id_entite);

ALTER TABLE ONLY perimetre_habitat_presente_habitat
    ADD CONSTRAINT pk_perimetre_habitat_concerne_habitat PRIMARY KEY (id_entite, code_habitat);

ALTER TABLE ONLY personne
    ADD CONSTRAINT pk_personne PRIMARY KEY (id_personne);

ALTER TABLE ONLY personne_est_auteur_donnee
    ADD CONSTRAINT pk_personne_est_auteur_donnee PRIMARY KEY (code_personne, id_entite);

ALTER TABLE ONLY personne_realise_etude
    ADD CONSTRAINT pk_personne_realise_etude PRIMARY KEY (id_personne, id_etude);

ALTER TABLE ONLY placette
    ADD CONSTRAINT pk_placette_suivi PRIMARY KEY (id_placette);

ALTER TABLE ONLY point_faune
    ADD CONSTRAINT pk_point_faune PRIMARY KEY (id_entite);

ALTER TABLE ONLY point_flore
    ADD CONSTRAINT pk_point_flore PRIMARY KEY (id_entite);

ALTER TABLE ONLY point_habitat
    ADD CONSTRAINT pk_point_habitat PRIMARY KEY (id_entite);

ALTER TABLE ONLY point_habitat_presente_habitat
    ADD CONSTRAINT pk_point_habitat_concerne_habitat PRIMARY KEY (id_entite, code_habitat);

ALTER TABLE ONLY poste_clc
    ADD CONSTRAINT pk_poste_clc PRIMARY KEY (id_poste);

ALTER TABLE ONLY protocole
    ADD CONSTRAINT pk_prorocole PRIMARY KEY (id_protocole);

ALTER TABLE ONLY protection
    ADD CONSTRAINT pk_protection PRIMARY KEY (code_protection);

ALTER TABLE ONLY referentiel_cartographique
    ADD CONSTRAINT pk_referentiel PRIMARY KEY (libelle_referentiel, date_version);

ALTER TABLE ONLY referentiel_taxon_animal
    ADD CONSTRAINT pk_referentiel_espece_animal PRIMARY KEY (id_taxon);

ALTER TABLE ONLY referentiel_taxon_vegetal
    ADD CONSTRAINT pk_referentiel_taxon_vegetal PRIMARY KEY (id_taxon);

ALTER TABLE ONLY region
    ADD CONSTRAINT pk_region PRIMARY KEY (num_insee);

ALTER TABLE ONLY releve_vegetation
    ADD CONSTRAINT pk_releve_vegetation PRIMARY KEY (id_releve);

ALTER TABLE ONLY repertoire
    ADD CONSTRAINT pk_repertoire PRIMARY KEY (chemin_complet_repertoire);

ALTER TABLE ONLY ressource_bibliographique
    ADD CONSTRAINT pk_ressource_biblio PRIMARY KEY (id_biblio);

ALTER TABLE ONLY site
    ADD CONSTRAINT pk_site PRIMARY KEY (id_site);

ALTER TABLE ONLY site_est_dans_site
    ADD CONSTRAINT pk_site_est_dans_site PRIMARY KEY (contenu_id_site, contenant_id_site);

ALTER TABLE ONLY structure
    ADD CONSTRAINT pk_structure PRIMARY KEY (id_structure);

ALTER TABLE ONLY structure_a_transmis_ese
    ADD CONSTRAINT pk_structure_a_transmis_donnee PRIMARY KEY (id_structure, id_entite);

ALTER TABLE ONLY structure_corealise_etude
    ADD CONSTRAINT pk_structure_corealise_etude PRIMARY KEY (id_structure, id_etude, ordre);

ALTER TABLE ONLY structure_est_auteur_donnee
    ADD CONSTRAINT pk_structure_est_auteur_donnee PRIMARY KEY (id_structure, id_entite);

ALTER TABLE ONLY structure_finance_etude
    ADD CONSTRAINT pk_structure_finance_etude PRIMARY KEY (id_structure, id_etude);

ALTER TABLE ONLY structure_vegetation
    ADD CONSTRAINT pk_structure_vegetation PRIMARY KEY (id_entite_vegetation);

ALTER TABLE ONLY suivi_placette
    ADD CONSTRAINT pk_suivi_placette PRIMARY KEY (id_placette, strate, date, nom_scientifique);

ALTER TABLE ONLY taxon_animal_est_sur_site
    ADD CONSTRAINT pk_taxon_animal_est_sur_site PRIMARY KEY (id_taxon, id_site);

ALTER TABLE ONLY taxon_vegetal_est_sur_site
    ADD CONSTRAINT pk_taxon_vegetal_est_sur_site PRIMARY KEY (id_taxon, id_site);

ALTER TABLE ONLY point_flore_a_importer
    ADD CONSTRAINT point_flore_a_importer_pkey PRIMARY KEY (gid);

ALTER TABLE ONLY point_habitat_a_importer
    ADD CONSTRAINT point_habitat_a_importer_pk PRIMARY KEY (gid);

ALTER TABLE ONLY point_faune_a_importer
    ADD CONSTRAINT points_faune_cel_rl_pkey PRIMARY KEY (gid);

ALTER TABLE ONLY point_faune_terrain
    ADD CONSTRAINT points_faune_terrain_pkey PRIMARY KEY (gid);

ALTER TABLE ONLY point_habitat_terrain
    ADD CONSTRAINT sicendevel_pkey PRIMARY KEY (gid);

ALTER TABLE ONLY taxon_animal_est_note
    ADD CONSTRAINT taxon_animal_est_note_pk PRIMARY KEY (finalite, id_taxon, note);

ALTER TABLE ONLY taxon_animal_est_protege
   ADD CONSTRAINT pk_taxon_animal_protege PRIMARY KEY (code_protection, id_taxon);

ALTER TABLE ONLY taxon_vegetal_est_note
    ADD CONSTRAINT taxon_vegetal_est_note_pk PRIMARY KEY (finalite, id_taxon, note);

ALTER TABLE ONLY taxon_vegetal_est_protege
   ADD CONSTRAINT pk_taxon_vegetal_protege PRIMARY KEY (code_protection, id_taxon);

ALTER TABLE ONLY taxon_vegetal_indique_habitat
    ADD CONSTRAINT taxon_vegetal_indique_habitat_pk PRIMARY KEY (id_taxon, code_habitat);

ALTER TABLE ONLY lot_donnee
    ADD CONSTRAINT "unique nom lot" UNIQUE (id_lot);

ALTER TABLE ONLY personne
    ADD CONSTRAINT unique_code_personne UNIQUE (code_personne);

ALTER TABLE ONLY perimetre
    ADD CONSTRAINT unique_geom_id UNIQUE (geom_id);

ALTER TABLE ONLY point_flore_a_importer
    ADD CONSTRAINT unique_id_entite UNIQUE (id_entite);

ALTER TABLE ONLY point_flore_a_importer
    ADD CONSTRAINT unique_sp_date_coord_x_y UNIQUE (taxon_mentionne, id_taxon_ref, date_obs, debut_obs, fin_obs, date_textuelle, coord_x, coord_y);

CREATE INDEX clc_geometrie_gist ON clc USING gist (geometrie);

CREATE INDEX commune_geometrie_gist ON commune USING gist (geometrie);

CREATE INDEX departement_geometrie_gist ON departement USING gist (geometrie);

CREATE INDEX emprise_geometrie_gist ON emprise_structure USING gist (geometrie);

CREATE INDEX fki_ese_refernces_lot_donnee ON entite_spatiale_ecologique USING btree (id_lot);

CREATE INDEX id_parcelle ON parcellaire USING btree (num_parcelle);

CREATE INDEX in_code_programme ON contact USING btree (code_programme);

CREATE UNIQUE INDEX in_commune_geom_id ON commune USING btree (geom_id);

CREATE UNIQUE INDEX in_dept_geom_id ON departement USING btree (geom_id);

CREATE INDEX in_groupe_pk ON groupe USING btree (libelle_groupe);

CREATE INDEX in_id_personne ON contact USING btree (id_personne);

CREATE INDEX in_id_structure ON contact USING btree (id_structure);

CREATE INDEX in_id_taxon_animal_parent ON referentiel_taxon_animal USING btree (id_taxon_parent);

CREATE INDEX in_nom_sp_animale ON liste_espece_animale_determinante USING btree (nom_scientifique);

CREATE UNIQUE INDEX in_nom_sp_vegetale ON liste_espece_vegetale_determinante USING btree (nom_scientifique);

CREATE UNIQUE INDEX in_perimetre_faune_pk ON perimetre_faune USING btree (id_entite);

CREATE INDEX in_personne_contact ON contact USING btree (id_personne);

CREATE UNIQUE INDEX in_pk_biblio_concerne_site ON biblio_concerne_site USING btree (id_biblio, id_site);

CREATE UNIQUE INDEX in_pk_carte_ign ON carte_ign USING btree (code_carte);

CREATE UNIQUE INDEX in_pk_commune ON commune USING btree (num_insee);

CREATE UNIQUE INDEX in_pk_contact ON contact USING btree (id_contact);

CREATE UNIQUE INDEX in_pk_departement ON departement USING btree (num_insee);

CREATE UNIQUE INDEX in_pk_elt_evolution_zone ON elt_evolution_zone USING btree (id_elt);

CREATE UNIQUE INDEX in_pk_entite_spatiale_ecologique ON entite_spatiale_ecologique USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_ese_repose_sur_ese ON ese_repose_sur_ese USING btree (composant_id_entite, composite_id_entite);

CREATE UNIQUE INDEX in_pk_espece_animale ON liste_espece_animale_determinante USING btree (nom_scientifique, code_groupe);

CREATE UNIQUE INDEX in_pk_espece_vegetale ON liste_espece_vegetale_determinante USING btree (id_taxon);

CREATE UNIQUE INDEX in_pk_facteur_evolution_ese ON facteur_evolution_ese USING btree (id_entite, id_elt);

CREATE UNIQUE INDEX in_pk_facteur_evolution_habitat ON facteur_evolution_habitat USING btree (id_entite, code_habitat, id_elt);

CREATE UNIQUE INDEX in_pk_fichier_image ON fichier_image USING btree (url_fichier_image);

CREATE UNIQUE INDEX in_pk_fichier_sig ON fichier_sig USING btree (url_fichier_sig);

CREATE UNIQUE INDEX in_pk_gen_fam ON genre_famille_taxon_vegetal USING btree (id_genre);

CREATE UNIQUE INDEX in_pk_groupe ON groupe USING btree (code_groupe);

CREATE UNIQUE INDEX in_pk_habitat ON referentiel_habitat USING btree (code_habitat);

CREATE UNIQUE INDEX in_pk_habitat_determinant ON liste_habitat_determinant USING btree (code_habitat);

CREATE UNIQUE INDEX in_pk_habitat_est_sur_site ON habitat_est_sur_site USING btree (id_site, code_habitat);

CREATE UNIQUE INDEX in_pk_ligne_faune ON ligne_faune USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_ligne_flore ON ligne_flore USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_ligne_habitat ON ligne_habitat USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_ligne_habitat_concerne_habitat ON ligne_habitat_presente_habitat USING btree (id_entite, code_habitat);

CREATE UNIQUE INDEX in_pk_perim_flore_pres_taxon ON perimetre_flore_presente_taxon USING btree (id_entite, id_taxon);

CREATE UNIQUE INDEX in_pk_perimetre ON perimetre USING btree (id_perimetre);

CREATE UNIQUE INDEX in_pk_perimetre_faune ON perimetre_faune USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_perimetre_flore ON perimetre_flore USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_perimetre_habitat ON perimetre_habitat USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_perimetre_habitat_concerne_habitat ON perimetre_habitat_presente_habitat USING btree (id_entite, code_habitat);

CREATE UNIQUE INDEX in_pk_personne ON personne USING btree (id_personne);

CREATE UNIQUE INDEX in_pk_personne_est_auteur_donnee ON personne_est_auteur_donnee USING btree (code_personne, id_entite);

CREATE UNIQUE INDEX in_pk_point_faune ON point_faune USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_point_flore ON point_flore USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_point_habitat ON point_habitat USING btree (id_entite);

CREATE UNIQUE INDEX in_pk_point_habitat_concerne_habitat ON point_habitat_presente_habitat USING btree (id_entite, code_habitat);

CREATE UNIQUE INDEX in_pk_prorocole ON protocole USING btree (id_protocole);

CREATE UNIQUE INDEX in_pk_protection ON protection USING btree (code_protection);

CREATE UNIQUE INDEX in_pk_referentiel ON referentiel_cartographique USING btree (libelle_referentiel, date_version);

CREATE UNIQUE INDEX in_pk_referentiel_espece_animal ON referentiel_taxon_animal USING btree (id_taxon);

CREATE UNIQUE INDEX in_pk_referentiel_taxon_vegetal ON referentiel_taxon_vegetal USING btree (id_taxon);

CREATE UNIQUE INDEX in_pk_region ON region USING btree (num_insee);

CREATE UNIQUE INDEX in_pk_releve_vegetation ON releve_vegetation USING btree (id_releve);

CREATE UNIQUE INDEX in_pk_repertoire ON repertoire USING btree (chemin_complet_repertoire);

CREATE UNIQUE INDEX in_pk_ressource_biblio ON ressource_bibliographique USING btree (id_biblio);

CREATE UNIQUE INDEX in_pk_site ON site USING btree (id_site);

CREATE UNIQUE INDEX in_pk_site_est_dans_site ON site_est_dans_site USING btree (contenu_id_site, contenant_id_site);

CREATE UNIQUE INDEX in_pk_structure ON structure USING btree (id_structure);

CREATE UNIQUE INDEX in_pk_structure_est_auteur_donnee ON structure_est_auteur_donnee USING btree (id_entite, id_structure);

CREATE UNIQUE INDEX in_pk_structure_vegetation ON structure_vegetation USING btree (id_entite_vegetation);

CREATE UNIQUE INDEX in_pk_taxon_animal_protege ON taxon_animal_est_protege USING btree (id_taxon, code_protection);

CREATE UNIQUE INDEX in_pk_taxon_vegetal_protege ON taxon_vegetal_est_protege USING btree (id_taxon, code_protection);

CREATE INDEX in_structure_contact ON contact USING btree (id_structure);

CREATE INDEX ligne_faune_geometrie_gist ON ligne_faune USING gist (geometrie);

CREATE INDEX ligne_flore_geometrie_gist ON ligne_flore USING gist (geometrie);

CREATE INDEX ligne_habitat_geometrie_gist ON ligne_habitat USING gist (geometrie);

CREATE INDEX parcellaire_geometrie_gist ON parcellaire USING gist (geometrie);

CREATE INDEX perimetre_faune_geometrie_gist ON perimetre_faune USING gist (geometrie);

CREATE INDEX perimetre_flore_geometrie_gist ON perimetre_flore USING gist (geometrie);

CREATE INDEX perimetre_geometrie_gist ON perimetre USING gist (geometrie);

CREATE INDEX perimetre_habitat_geometrie_gist ON perimetre_habitat USING gist (geometrie);

CREATE INDEX point_faune_geometrie_gist ON point_faune USING gist (geometrie);

CREATE INDEX point_flore_geometrie_gist ON point_flore USING gist (geometrie);

CREATE INDEX point_habitat_geometrie_gist ON point_habitat USING gist (geometrie);

CREATE INDEX point_habitat_terrain_geometrie_gist ON point_habitat_terrain USING gist (geometrie);

CREATE INDEX site_geometrie_gist ON site USING gist (geometrie);

CREATE INDEX structure_vegetation_geometrie_gist ON structure_vegetation USING gist (geometrie);

ALTER TABLE ONLY habitat_est_note
    ADD CONSTRAINT code_habitat_ref_habitat FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY emprise_structure
    ADD CONSTRAINT emprise_structure_id_structure_ref_structure FOREIGN KEY (id_structure) REFERENCES structure(id_structure);

ALTER TABLE ONLY releve_vegetation
    ADD CONSTRAINT fk_auteur_est_personne FOREIGN KEY (auteur_code_personne) REFERENCES personne(code_personne);

ALTER TABLE ONLY biblio_concerne_ese
    ADD CONSTRAINT fk_biblio_c_biblio_co_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY biblio_concerne_ese
    ADD CONSTRAINT fk_biblio_c_biblio_co_ressourc FOREIGN KEY (id_biblio) REFERENCES ressource_bibliographique(id_biblio);

ALTER TABLE ONLY biblio_concerne_site
    ADD CONSTRAINT fk_biblio_c_reference_site FOREIGN KEY (id_site) REFERENCES site(id_site);

ALTER TABLE ONLY biblio_concerne_site
    ADD CONSTRAINT fk_biblio_conc_site_ref_res_bi FOREIGN KEY (id_biblio) REFERENCES ressource_bibliographique(id_biblio);

ALTER TABLE ONLY commune
    ADD CONSTRAINT fk_commune_dans_dept FOREIGN KEY (departement_num_insee) REFERENCES departement(num_insee);

ALTER TABLE ONLY contact
    ADD CONSTRAINT fk_contact_reference_personne FOREIGN KEY (id_personne) REFERENCES personne(id_personne);

ALTER TABLE ONLY contact
    ADD CONSTRAINT fk_contact_reference_structur FOREIGN KEY (id_structure) REFERENCES structure(id_structure);

ALTER TABLE ONLY site_est_dans_site
    ADD CONSTRAINT fk_contenant_reference_site FOREIGN KEY (contenant_id_site) REFERENCES site(id_site);

ALTER TABLE ONLY site_est_dans_site
    ADD CONSTRAINT fk_contenu_reference_site FOREIGN KEY (contenu_id_site) REFERENCES site(id_site);

ALTER TABLE ONLY departement
    ADD CONSTRAINT fk_departem_appartien_region FOREIGN KEY (region_num_insee) REFERENCES region(num_insee);

ALTER TABLE ONLY facteur_evolution_habitat
    ADD CONSTRAINT fk_elt2_est_elt_evolution FOREIGN KEY (id_elt) REFERENCES elt_evolution_zone(id_elt);

ALTER TABLE ONLY ese_repose_sur_ese
    ADD CONSTRAINT fk_elt_det_elt_det_r_entite_2 FOREIGN KEY (composant_id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY facteur_evolution_ese
    ADD CONSTRAINT fk_elt_est_elt_evolution FOREIGN KEY (id_elt) REFERENCES elt_evolution_zone(id_elt);

ALTER TABLE ONLY elt_evolution_zone
    ADD CONSTRAINT fk_elt_evol_reference_elt_evol FOREIGN KEY (id_elt_pere) REFERENCES elt_evolution_zone(id_elt);

ALTER TABLE ONLY structure_a_transmis_ese
    ADD CONSTRAINT fk_ese_est_entite_spat_eco FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY facteur_evolution_ese
    ADD CONSTRAINT fk_ese_est_ese FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY ligne_habitat_presente_habitat
    ADD CONSTRAINT fk_ese_est_ligne_habitat FOREIGN KEY (id_entite) REFERENCES ligne_habitat(id_entite);

ALTER TABLE ONLY perimetre_habitat_presente_habitat
    ADD CONSTRAINT fk_ese_est_perime_habitat FOREIGN KEY (id_entite) REFERENCES perimetre_habitat(id_entite);

ALTER TABLE ONLY point_habitat_presente_habitat
    ADD CONSTRAINT fk_ese_est_point_habitat FOREIGN KEY (id_entite) REFERENCES point_habitat(id_entite);

ALTER TABLE ONLY entite_spatiale_ecologique
    ADD CONSTRAINT fk_ese_refernces_lot_donnee FOREIGN KEY (id_lot) REFERENCES lot_donnee(id_lot);

ALTER TABLE ONLY ese_repose_sur_ese
    ADD CONSTRAINT fk_ese_repo_elt_det_r_entite_s FOREIGN KEY (composite_id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY liste_espece_animale_determinante
    ADD CONSTRAINT fk_espece_a_espece_an_referent FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_animal(id_taxon);

ALTER TABLE ONLY liste_espece_animale_determinante
    ADD CONSTRAINT fk_espece_a_reference_fichier_ FOREIGN KEY (url_fichier_image) REFERENCES fichier_image(url_fichier_image);

ALTER TABLE ONLY liste_espece_animale_determinante
    ADD CONSTRAINT fk_espece_a_reference_groupe FOREIGN KEY (code_groupe) REFERENCES groupe(code_groupe);

ALTER TABLE ONLY liste_espece_vegetale_determinante
    ADD CONSTRAINT fk_espece_v_reference_fichier_ FOREIGN KEY (url_fichier_image) REFERENCES fichier_image(url_fichier_image);

ALTER TABLE ONLY liste_espece_vegetale_determinante
    ADD CONSTRAINT fk_espece_v_reference_groupe FOREIGN KEY (code_groupe) REFERENCES groupe(code_groupe);

ALTER TABLE ONLY etude_concerne_site
    ADD CONSTRAINT fk_etude_conc_site_ref_etude FOREIGN KEY (id_etude) REFERENCES etude(id_etude);

ALTER TABLE ONLY etude_concerne_site
    ADD CONSTRAINT fk_etude_conc_site_ref_site FOREIGN KEY (id_site) REFERENCES site(id_site);

ALTER TABLE ONLY lot_donnee
    ADD CONSTRAINT fk_etude_lot_donnee_reference_etude FOREIGN KEY (id_etude) REFERENCES etude(id_etude) ON UPDATE CASCADE;

ALTER TABLE ONLY fiche_habitat
    ADD CONSTRAINT fk_fiche_habitat_generalis_entite_s FOREIGN KEY (ese_id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY fichier_sig
    ADD CONSTRAINT fk_fichier_fichier_e_repertoi FOREIGN KEY (chemin_complet_repertoire) REFERENCES repertoire(chemin_complet_repertoire);

ALTER TABLE ONLY fichier_image
    ADD CONSTRAINT fk_fichier_image_est_repertoi FOREIGN KEY (chemin_complet_repertoire) REFERENCES repertoire(chemin_complet_repertoire);

ALTER TABLE ONLY ligne_habitat_presente_habitat
    ADD CONSTRAINT fk_hab_ligne_concerne_habitat FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY point_habitat_presente_habitat
    ADD CONSTRAINT fk_hab_point_concerne_habitat FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY habitat_est_eur_15
    ADD CONSTRAINT fk_habitat_corine_est_dans_referentiel FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY liste_habitat_determinant
    ADD CONSTRAINT fk_habitat_det_fichier FOREIGN KEY (url_fichier_image) REFERENCES fichier_image(url_fichier_image);

ALTER TABLE ONLY description_habitat
    ADD CONSTRAINT fk_habitat_est_dans_code_corine FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY description_habitat_sur_site
    ADD CONSTRAINT fk_habitat_est_decrit FOREIGN KEY (code_habitat) REFERENCES description_habitat(code_habitat);

ALTER TABLE ONLY liste_habitat_determinant
    ADD CONSTRAINT fk_habitat_est_deter_habitat FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY habitat_est_protege
    ADD CONSTRAINT fk_habitat_est_habitat FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY facteur_evolution_habitat
    ADD CONSTRAINT fk_habitat_est_perimetre_habitat FOREIGN KEY (id_entite, code_habitat) REFERENCES perimetre_habitat_presente_habitat(id_entite, code_habitat);

ALTER TABLE ONLY habitat_est_eur_15
    ADD CONSTRAINT fk_habitat_eur_15_est_dans_eur_15 FOREIGN KEY (code_eur_15) REFERENCES eur_15(code_eur_15);

ALTER TABLE ONLY perimetre_habitat_presente_habitat
    ADD CONSTRAINT fk_habitat_perim_est_habitat FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat) ON UPDATE CASCADE;

ALTER TABLE ONLY habitat_est_sur_site
    ADD CONSTRAINT fk_habitat_reference_site FOREIGN KEY (id_site) REFERENCES site(id_site);

ALTER TABLE ONLY habitat_est_sur_site
    ADD CONSTRAINT fk_habitat_site_pres_habitat FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY referentiel_taxon_vegetal
    ADD CONSTRAINT fk_id_genre_ref_gen_fam FOREIGN KEY (id_genre) REFERENCES genre_famille_taxon_vegetal(id_genre);

ALTER TABLE ONLY point_flore
    ADD CONSTRAINT fk_id_releve_ref_releve_veget FOREIGN KEY (id_releve) REFERENCES releve_vegetation(id_releve);

ALTER TABLE ONLY referentiel_taxon_animal
    ADD CONSTRAINT fk_id_tax_ref_anim_est_taxon FOREIGN KEY (id_taxon_ref) REFERENCES referentiel_taxon_animal(id_taxon);

ALTER TABLE ONLY referentiel_taxon_vegetal
    ADD CONSTRAINT fk_id_tax_ref_veget_est_taxon FOREIGN KEY (id_taxon_ref) REFERENCES referentiel_taxon_vegetal(id_taxon);

ALTER TABLE ONLY ligne_faune
    ADD CONSTRAINT fk_ligne_fa_generalis_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY ligne_flore
    ADD CONSTRAINT fk_ligne_fl_generalis_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY ligne_flore
    ADD CONSTRAINT fk_ligne_fl_sp_vg_ref_ref_sp_vgt FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal(id_taxon);

ALTER TABLE ONLY ligne_habitat
    ADD CONSTRAINT fk_ligne_ha_generalis_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY perimetre_flore_presente_taxon
    ADD CONSTRAINT fk_perim_est_ese FOREIGN KEY (id_entite) REFERENCES perimetre_flore(id_entite);

ALTER TABLE ONLY perimetre_flore_presente_taxon
    ADD CONSTRAINT fk_perim_sp_vg_ref_ref_sp_veg FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal(id_taxon);

ALTER TABLE ONLY perimetre_flore
    ADD CONSTRAINT fk_perimetr_generalis_entite_2 FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY perimetre_habitat
    ADD CONSTRAINT fk_perimetr_generalis_entite_3 FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY perimetre_faune
    ADD CONSTRAINT fk_perimetr_generalis_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY personne_realise_etude
    ADD CONSTRAINT fk_pers_realise_etude_ref_etude FOREIGN KEY (id_etude) REFERENCES etude(id_etude);

ALTER TABLE ONLY personne_realise_etude
    ADD CONSTRAINT fk_pers_realise_etude_ref_personne FOREIGN KEY (id_personne) REFERENCES personne(id_personne);

ALTER TABLE ONLY personne_est_auteur_donnee
    ADD CONSTRAINT fk_personne_personne_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY personne_est_auteur_donnee
    ADD CONSTRAINT fk_personne_personne_personne FOREIGN KEY (code_personne) REFERENCES personne(code_personne) ON UPDATE CASCADE;

ALTER TABLE ONLY releve_vegetation
    ADD CONSTRAINT fk_placette_est_placette_suivi FOREIGN KEY (id_placette) REFERENCES placette(id_placette);

ALTER TABLE ONLY suivi_placette
    ADD CONSTRAINT fk_placette_id_taxon_est_taxon_vegetal FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal(id_taxon);

ALTER TABLE ONLY point_faune
    ADD CONSTRAINT fk_point_fa_generalis_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY point_flore
    ADD CONSTRAINT fk_point_fl_generalis_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY point_habitat
    ADD CONSTRAINT fk_point_ha_generalis_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY habitat_est_protege
    ADD CONSTRAINT fk_prot_habitat_est_prot FOREIGN KEY (code_protection) REFERENCES protection(code_protection);

ALTER TABLE ONLY protocole
    ADD CONSTRAINT fk_protocole_est_biblio FOREIGN KEY (id_biblio) REFERENCES ressource_bibliographique(id_biblio);

ALTER TABLE ONLY entite_spatiale_ecologique
    ADD CONSTRAINT fk_protocole_est_protocole FOREIGN KEY (id_protocole) REFERENCES protocole(id_protocole);

ALTER TABLE ONLY point_flore
    ADD CONSTRAINT fk_pt_fl_sp_vgt_ref_ref_sp_vgt FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal(id_taxon);

ALTER TABLE ONLY referentiel_taxon_animal
    ADD CONSTRAINT fk_referent_reference_referent FOREIGN KEY (id_taxon_parent) REFERENCES referentiel_taxon_animal(id_taxon);

ALTER TABLE ONLY structure_vegetation
    ADD CONSTRAINT fk_referentiel_est_referentiel FOREIGN KEY (referentiel_date_version, referentiel_libelle_referentiel) REFERENCES referentiel_cartographique(date_version, libelle_referentiel);

ALTER TABLE ONLY repertoire
    ADD CONSTRAINT fk_repertoi_repertoie_repertoi FOREIGN KEY (pere_chemin_comp_repertoire) REFERENCES repertoire(chemin_complet_repertoire);

ALTER TABLE ONLY description_habitat_sur_site
    ADD CONSTRAINT fk_site_est_site FOREIGN KEY (id_site) REFERENCES site(id_site);

ALTER TABLE ONLY ligne_faune
    ADD CONSTRAINT fk_sp_ligne_fa_ref_ref_sp_fanimale FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_animal(id_taxon);

ALTER TABLE ONLY perimetre_faune
    ADD CONSTRAINT fk_sp_perim_faune_ref_ref_sp_anim FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_animal(id_taxon);

ALTER TABLE ONLY point_faune
    ADD CONSTRAINT fk_sp_pt_faune_ref_ref_sp FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_animal(id_taxon);

ALTER TABLE ONLY liste_espece_vegetale_determinante
    ADD CONSTRAINT fk_sp_vgt_det_ref_sp_veget FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal(id_taxon);

ALTER TABLE ONLY structure_corealise_etude
    ADD CONSTRAINT fk_str_corealise_etude_ref_etude FOREIGN KEY (id_etude) REFERENCES etude(id_etude);

ALTER TABLE ONLY structure_corealise_etude
    ADD CONSTRAINT fk_str_corealise_etude_ref_structure FOREIGN KEY (id_structure) REFERENCES structure(id_structure);

ALTER TABLE ONLY structure_finance_etude
    ADD CONSTRAINT fk_str_finance_etude_ref_etude FOREIGN KEY (id_etude) REFERENCES etude(id_etude);

ALTER TABLE ONLY structure_finance_etude
    ADD CONSTRAINT fk_str_finance_etude_ref_structure FOREIGN KEY (id_structure) REFERENCES structure(id_structure);

ALTER TABLE ONLY structure_est_auteur_donnee
    ADD CONSTRAINT fk_structur_structure_entite_s FOREIGN KEY (id_entite) REFERENCES entite_spatiale_ecologique(id_entite);

ALTER TABLE ONLY structure_est_auteur_donnee
    ADD CONSTRAINT fk_structur_structure_structur FOREIGN KEY (id_structure) REFERENCES structure(id_structure);

ALTER TABLE ONLY structure_a_transmis_ese
    ADD CONSTRAINT fk_structur_structure_structur FOREIGN KEY (id_structure) REFERENCES structure(id_structure);
    
ALTER TABLE ONLY taxon_animal_est_protege 
    ADD CONSTRAINT fk_prot_ani_est_prot FOREIGN KEY (code_protection) REFERENCES protection (code_protection);

ALTER TABLE ONLY taxon_animal_est_protege 
    ADD CONSTRAINT fk_taxon_ani_prot_est_taxon FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_animal(id_taxon);

ALTER TABLE ONLY taxon_animal_est_sur_site
    ADD CONSTRAINT fk_taxon_animal_est_dans_referentiel FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_animal(id_taxon);

ALTER TABLE ONLY taxon_animal_est_sur_site
    ADD CONSTRAINT fk_taxon_animal_site_est_site FOREIGN KEY (id_site) REFERENCES site(id_site);
    
ALTER TABLE ONLY taxon_vegetal_est_protege 
    ADD CONSTRAINT fk_prot_veg_est_prot FOREIGN KEY (code_protection) REFERENCES protection (code_protection);

ALTER TABLE ONLY taxon_vegetal_est_protege 
    ADD CONSTRAINT fk_taxon_veg_prot_est_taxon FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal (id_taxon);

ALTER TABLE ONLY taxon_vegetal_est_sur_site
    ADD CONSTRAINT fk_taxon_vegetal_est_dans_referentiel FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal(id_taxon);

ALTER TABLE ONLY taxon_vegetal_est_sur_site
    ADD CONSTRAINT fk_taxon_vegetal_site_est_site FOREIGN KEY (id_site) REFERENCES site(id_site);

ALTER TABLE ONLY perimetre_flore
    ADD CONSTRAINT fk_taxon_vegetal_est_dans_referentiel FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal(id_taxon);

ALTER TABLE ONLY entite_spatiale_ecologique
    ADD CONSTRAINT fk_validateur_est_personne FOREIGN KEY (validateur_code_personne) REFERENCES personne(code_personne);

ALTER TABLE ONLY entite_spatiale_ecologique
    ADD CONSTRAINT fk_validation_est_structure FOREIGN KEY (validateur_id_structure) REFERENCES structure(id_structure);

ALTER TABLE ONLY taxon_vegetal_indique_habitat
    ADD CONSTRAINT habitat_indique_est_habitat FOREIGN KEY (code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY clc
    ADD CONSTRAINT id_poste_est_poste_clc FOREIGN KEY (id_poste) REFERENCES poste_clc(id_poste);

ALTER TABLE ONLY taxon_animal_est_note
    ADD CONSTRAINT id_taxon_ref_tax_animal FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_animal(id_taxon);

ALTER TABLE ONLY taxon_animal_est_note
    ADD CONSTRAINT code_groupe_ref_groupe FOREIGN KEY (code_groupe) REFERENCES groupe(code_groupe);

ALTER TABLE ONLY taxon_vegetal_est_note
    ADD CONSTRAINT id_taxon_ref_tax_vegetal FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal(id_taxon);

ALTER TABLE ONLY releve_vegetation
    ADD CONSTRAINT releve_concerne_habitat FOREIGN KEY (habitat_code_habitat) REFERENCES referentiel_habitat(code_habitat);

ALTER TABLE ONLY taxon_vegetal_indique_habitat
    ADD CONSTRAINT taxon_vegetal_indic_est_dans_referentiel FOREIGN KEY (id_taxon) REFERENCES referentiel_taxon_vegetal(id_taxon);
    