IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Base de données botanique


Sujet :

Schéma

  1. #41
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonjour Alex,

    Ça y est, on met enfin les mains dans le cambouis !


    Citation Envoyé par PostgreSQL
    ERROR: ERREUR: il n'existe aucune contrainte unique correspondant aux clés données pour la table « PASSAGE_POINT » référencée
    SQL state: 42830
    PostgreSQL précise que la table PASSAGE_POINT est référencée, donc c’est la table ELEMENT qui a un problème...

    La source de ce problème est dans le code généré par JMerise :
    Citation Envoyé par JMerise
    ALTER TABLE public.ELEMENT ADD CONSTRAINT FK_ELEMENT_id_a_supprimer FOREIGN KEY (id_a_supprimer) REFERENCES public.PASSAGE_POINT (id_a_supprimer);
    En effet, JMerise a généré la contrainte :

    CONSTRAINT FK_ELEMENT_id_a_supprimer FOREIGN KEY (id_a_supprimer) REFERENCES public.PASSAGE_POINT (id_a_supprimer)

    et il a commis l’erreur inqualifiable de ne faire référence qu’à un seul attribut de la clé primaire de la table PASSAGE_POINT, remarque valant pour toutes les références aux tables dont les clés primaires comportent plus d’un attribut. Comme cet attribut est « id_a_supprimer », en toute logique il doit aussi disparaître de la table ELEMENT, laquelle doit par contre être munie des attributs id_transect, id_point, id_passage :

    CREATE TABLE ELEMENT
    (
        id_transect         SMALLINT     NOT NULL    
      , id_point            SMALLINT     NOT NULL 
      , id_passage          SMALLINT     NOT NULL
      , id_element          SERIAL
      , id_espece           SMALLINT     NOT NULL
      , nb_elements         SMALLINT     NOT NULL  
      , geometrie           VARCHAR(32)  NOT NULL 
      , CONSTRAINT ELEMENT_PK PRIMARY KEY (id_transect, id_point, id_passage, id_element)
      , CONSTRAINT ELEMENT_PASSAGE_POINT_FK FOREIGN KEY (id_transect, id_point, id_passage) REFERENCES PASSAGE_POINT (id_transect, id_point, id_passage)
      , CONSTRAINT ELEMENT_ESPECE_FK FOREIGN KEY (id_espece) REFERENCES ESPECE (id_espece)
     )  ;
    
    id_a_supprimer doit mourir !

    Il faut que vous preniez le temps d’analyser le code SQL que j’ai proposé (et testé) dans mon message précédent (un peu plus de 5 minutes cette fois-ci )

    C’est bien à cause du comportement impardonnable de JMerise que j’ai au plus vite recommandé de mettre tous les ALTER TABLE à la poubelle, de remettre les attributs des clés primaires dans le bon ordre : bref de mettre le code généré par JMerise à la poubelle et de recommencer manuellement, comme je l’ai fait dans mon message précédent. Je vous invite à tester ce code (le schéma utilisé est alex, histoire ne ne pas faire de mélanges de tables).
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  2. #42
    Membre averti Avatar de rabDev
    Homme Profil pro
    Ingénieur développement logiciels, Concepteur et développeur de JMerise
    Inscrit en
    Mars 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels, Concepteur et développeur de JMerise

    Informations forums :
    Inscription : Mars 2011
    Messages : 106
    Points : 328
    Points
    328
    Par défaut JMerise .... correction.
    Bonjour à toutes et à tous,

    Permettez moi (et excusez moi ) d'intervenir au milieu de votre discussion, non pas pour apporter ma contribution à ce sujet mais pour vous dire que tous les problèmes concernant JMerise soulignés ici (comme ailleurs, dans d'autre discussions exemple ) sont notés et corrigés (ou seront corrigés) dans la prochaine version.

    Je travaille sans cesse et sans relâche à l'amélioration de JMerise. Il y a une seule personne derrière JMerise : RabDev (pas d'équipe comme DB-Main et PowerAMC, etc)... donc, JMerise ne peut pas rivaliser ni avec DB-Main, ni avec PowerAMC. je fais de mon mieux à vous offrir un bon outil.

    Je finis toujours mes messages par : si vous avez des remarques, des suggestions d'amélioration, des beug ou des erreurs à me signaler, n'hésitez surtout pas à me les envoyer par mail. : jmerise@jfreesoft.com

    Bonne journée ou soirée à toutes à tous,
    RabDev

  3. #43
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir rabdev,

    Vous êtes tout excusé. Certes, je suis sévère quand je parle du code SQL généré par JMerise, mais je ne peux pas faire autrement que mettre en garde mes interlocuteurs (et les lecteurs de passage) quand ce code est faux, comme dans le cas qui est traité ici.

    Evidemment, je travaille dans l’urgence, mais quand j’aurai un peu de temps, je ferai part de mes observations à l’adresse que vos avez indiquée.

    En souhaitant que mes remarques critiques soient de moins en moins fréquentes, je vous adresse mes encouragements pour la mise au point de la version suivante.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  4. #44
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 29
    Points : 43
    Points
    43
    Par défaut
    Bonjour à tous,

    rabDev, merci à vous pour votre gros travail sur JMerise, c'est un outil bien pratique et facile à prendre en main.

    fsmrel, merci pour vos retours. je me suis rendu compte également que j'avais 2 id_element, un qui était dans TYPE_ELEMENT et l'autre dans ELEMENT, c'est une erreur également.

    J'ai également refait le MCD sous pgModeler, voici ce que ça donne:
    Nom : MCD_AppliBota_pgModeler.PNG
Affichages : 1036
Taille : 155,9 Ko
    J'ai remarqué que la cardinalité n'était pas tout à fait similaire entre les jMerise et PgModeler, donc est ce que je faisais une erreur avant? ou bien, peut-être que je choisi mal mes verbres car quand pgmodeler met "many_TECHNICIEN_has_many_PASSAGE" c'est plus parlant que le "EST_AFFECTE"
    Voici le code qui est généré via pgModeler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    -- Database generated with pgModeler (PostgreSQL Database Modeler).
    -- pgModeler  version: 0.9.0
    -- PostgreSQL version: 9.6
    -- Project Site: pgmodeler.com.br
    -- Model Author: ---
    
    
    -- Database creation must be done outside an multicommand file.
    -- These commands were put in this file only for convenience.
    -- -- object: "Appli_Bota_Forest" | type: DATABASE --
    -- -- DROP DATABASE IF EXISTS "Appli_Bota_Forest";
    -- CREATE DATABASE "Appli_Bota_Forest"
    -- ;
    -- -- ddl-end --
    -- 
    
    -- object: db_appli_bota | type: SCHEMA --
    -- DROP SCHEMA IF EXISTS db_appli_bota CASCADE;
    CREATE SCHEMA db_appli_bota;
    -- ddl-end --
    ALTER SCHEMA db_appli_bota OWNER TO postgres;
    -- ddl-end --
    
    SET search_path TO pg_catalog,public,db_appli_bota;
    -- ddl-end --
    
    -- object: db_appli_bota."ELEMENT" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."ELEMENT" CASCADE;
    CREATE TABLE db_appli_bota."ELEMENT"(
    	id_element integer NOT NULL,
    	geometrie geometry(POINT, 2154),
    	"id_espece_ESPECE" integer NOT NULL,
    	"id_passage_PASSAGE_PASSAGE_POINT" integer,
    	CONSTRAINT "ELEMENT_pk" PRIMARY KEY (id_element,"id_passage_PASSAGE_PASSAGE_POINT")
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."ELEMENT" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."ESPECE" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."ESPECE" CASCADE;
    CREATE TABLE db_appli_bota."ESPECE"(
    	id_espece integer NOT NULL,
    	code_espece varchar(32) NOT NULL,
    	CONSTRAINT "ESPECE_pk" PRIMARY KEY (id_espece)
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."ESPECE" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."REF_TAXREF" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."REF_TAXREF" CASCADE;
    CREATE TABLE db_appli_bota."REF_TAXREF"(
    	cd_nom integer NOT NULL,
    	nom_espece varchar NOT NULL,
    	"id_espece_ESPECE" integer,
    	CONSTRAINT "REF_TAXREF_pk" PRIMARY KEY (cd_nom)
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."REF_TAXREF" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."TECHNICIEN" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."TECHNICIEN" CASCADE;
    CREATE TABLE db_appli_bota."TECHNICIEN"(
    	id_technicien integer NOT NULL,
    	code_technicien integer NOT NULL,
    	nom_technicien varchar(50) NOT NULL,
    	prenom_technicien varchar(50) NOT NULL,
    	email varchar(32),
    	cd_poste varchar(50) NOT NULL,
    	actif boolean NOT NULL,
    	CONSTRAINT "TECHNICIEN_pk" PRIMARY KEY (id_technicien)
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."TECHNICIEN" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."PASSAGE" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."PASSAGE" CASCADE;
    CREATE TABLE db_appli_bota."PASSAGE"(
    	id_passage integer NOT NULL,
    	date_passage date NOT NULL,
    	validation boolean,
    	date_validation date,
    	"id_protocole_PROTOCOLE" integer NOT NULL,
    	"id_transect_TRANSECT" integer NOT NULL,
    	CONSTRAINT "PASSAGE_pk" PRIMARY KEY (id_passage)
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."PASSAGE" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."TRANSECT" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."TRANSECT" CASCADE;
    CREATE TABLE db_appli_bota."TRANSECT"(
    	id_transect integer NOT NULL,
    	cd_transect smallint NOT NULL,
    	"id_departement_REF_DEPARTEMENT" integer NOT NULL,
    	CONSTRAINT "TRANSECT_pk" PRIMARY KEY (id_transect)
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."TRANSECT" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."PASSAGE_POINT" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."PASSAGE_POINT" CASCADE;
    CREATE TABLE db_appli_bota."PASSAGE_POINT"(
    	heure_passage time NOT NULL,
    	"id_point_POINT" integer NOT NULL,
    	"id_transect_TRANSECT_POINT" integer NOT NULL,
    	"id_passage_PASSAGE" integer,
    	CONSTRAINT "PASSAGE_POINT_pk" PRIMARY KEY ("id_passage_PASSAGE")
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."PASSAGE_POINT" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."POINT" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."POINT" CASCADE;
    CREATE TABLE db_appli_bota."POINT"(
    	id_point integer NOT NULL,
    	no_point integer NOT NULL,
    	geometrie geometry(POINT, 2154) NOT NULL,
    	"id_transect_TRANSECT" integer,
    	CONSTRAINT "POINT_pk" PRIMARY KEY (id_point,"id_transect_TRANSECT")
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."POINT" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."STRUCTURE" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."STRUCTURE" CASCADE;
    CREATE TABLE db_appli_bota."STRUCTURE"(
    	id_structure integer NOT NULL,
    	nom_structure varchar(100) NOT NULL,
    	abreviation_structure varchar(32),
    	CONSTRAINT "STRUCTURE_pk" PRIMARY KEY (id_structure)
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."STRUCTURE" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."PROTOCOLE" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."PROTOCOLE" CASCADE;
    CREATE TABLE db_appli_bota."PROTOCOLE"(
    	id_protocole integer NOT NULL,
    	libelle varchar(23) NOT NULL,
    	CONSTRAINT "PROTOCOLE_pk" PRIMARY KEY (id_protocole)
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."PROTOCOLE" OWNER TO postgres;
    -- ddl-end --
    
    -- object: db_appli_bota."REF_DEPARTEMENT" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."REF_DEPARTEMENT" CASCADE;
    CREATE TABLE db_appli_bota."REF_DEPARTEMENT"(
    	id_departement integer NOT NULL,
    	cd_departement varchar(5) NOT NULL,
    	libelle_departement varchar(32),
    	insee_departement varchar(32) NOT NULL,
    	CONSTRAINT "REF_DEPARTEMENT_pk" PRIMARY KEY (id_departement)
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."REF_DEPARTEMENT" OWNER TO postgres;
    -- ddl-end --
    
    -- object: "REF_DEPARTEMENT_fk" | type: CONSTRAINT --
    -- ALTER TABLE db_appli_bota."TRANSECT" DROP CONSTRAINT IF EXISTS "REF_DEPARTEMENT_fk" CASCADE;
    ALTER TABLE db_appli_bota."TRANSECT" ADD CONSTRAINT "REF_DEPARTEMENT_fk" FOREIGN KEY ("id_departement_REF_DEPARTEMENT")
    REFERENCES db_appli_bota."REF_DEPARTEMENT" (id_departement) MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "PROTOCOLE_fk" | type: CONSTRAINT --
    -- ALTER TABLE db_appli_bota."PASSAGE" DROP CONSTRAINT IF EXISTS "PROTOCOLE_fk" CASCADE;
    ALTER TABLE db_appli_bota."PASSAGE" ADD CONSTRAINT "PROTOCOLE_fk" FOREIGN KEY ("id_protocole_PROTOCOLE")
    REFERENCES db_appli_bota."PROTOCOLE" (id_protocole) MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: public."many_TECHNICIEN_has_many_STRUCTURE" | type: TABLE --
    -- DROP TABLE IF EXISTS public."many_TECHNICIEN_has_many_STRUCTURE" CASCADE;
    CREATE TABLE public."many_TECHNICIEN_has_many_STRUCTURE"(
    	"id_technicien_TECHNICIEN" integer NOT NULL,
    	"id_structure_STRUCTURE" integer NOT NULL,
    	date_structure date,
    	CONSTRAINT "many_TECHNICIEN_has_many_STRUCTURE_pk" PRIMARY KEY ("id_technicien_TECHNICIEN","id_structure_STRUCTURE")
    
    );
    -- ddl-end --
    
    -- object: "TECHNICIEN_fk" | type: CONSTRAINT --
    -- ALTER TABLE public."many_TECHNICIEN_has_many_STRUCTURE" DROP CONSTRAINT IF EXISTS "TECHNICIEN_fk" CASCADE;
    ALTER TABLE public."many_TECHNICIEN_has_many_STRUCTURE" ADD CONSTRAINT "TECHNICIEN_fk" FOREIGN KEY ("id_technicien_TECHNICIEN")
    REFERENCES db_appli_bota."TECHNICIEN" (id_technicien) MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "STRUCTURE_fk" | type: CONSTRAINT --
    -- ALTER TABLE public."many_TECHNICIEN_has_many_STRUCTURE" DROP CONSTRAINT IF EXISTS "STRUCTURE_fk" CASCADE;
    ALTER TABLE public."many_TECHNICIEN_has_many_STRUCTURE" ADD CONSTRAINT "STRUCTURE_fk" FOREIGN KEY ("id_structure_STRUCTURE")
    REFERENCES db_appli_bota."STRUCTURE" (id_structure) MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: public."many_TECHNICIEN_has_many_PASSAGE" | type: TABLE --
    -- DROP TABLE IF EXISTS public."many_TECHNICIEN_has_many_PASSAGE" CASCADE;
    CREATE TABLE public."many_TECHNICIEN_has_many_PASSAGE"(
    	"id_technicien_TECHNICIEN" integer NOT NULL,
    	"id_passage_PASSAGE" integer NOT NULL,
    	CONSTRAINT "many_TECHNICIEN_has_many_PASSAGE_pk" PRIMARY KEY ("id_technicien_TECHNICIEN","id_passage_PASSAGE")
    
    );
    -- ddl-end --
    
    -- object: "TECHNICIEN_fk" | type: CONSTRAINT --
    -- ALTER TABLE public."many_TECHNICIEN_has_many_PASSAGE" DROP CONSTRAINT IF EXISTS "TECHNICIEN_fk" CASCADE;
    ALTER TABLE public."many_TECHNICIEN_has_many_PASSAGE" ADD CONSTRAINT "TECHNICIEN_fk" FOREIGN KEY ("id_technicien_TECHNICIEN")
    REFERENCES db_appli_bota."TECHNICIEN" (id_technicien) MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "PASSAGE_fk" | type: CONSTRAINT --
    -- ALTER TABLE public."many_TECHNICIEN_has_many_PASSAGE" DROP CONSTRAINT IF EXISTS "PASSAGE_fk" CASCADE;
    ALTER TABLE public."many_TECHNICIEN_has_many_PASSAGE" ADD CONSTRAINT "PASSAGE_fk" FOREIGN KEY ("id_passage_PASSAGE")
    REFERENCES db_appli_bota."PASSAGE" (id_passage) MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: db_appli_bota."TYPE_ELEMENT" | type: TABLE --
    -- DROP TABLE IF EXISTS db_appli_bota."TYPE_ELEMENT" CASCADE;
    CREATE TABLE db_appli_bota."TYPE_ELEMENT"(
    	id_type_element integer NOT NULL,
    	code_element integer NOT NULL,
    	libelle_element varchar(50),
    	CONSTRAINT "TYPE_ELEMENT_pk" PRIMARY KEY (id_type_element)
    
    );
    -- ddl-end --
    ALTER TABLE db_appli_bota."TYPE_ELEMENT" OWNER TO postgres;
    -- ddl-end --
    
    -- object: "ESPECE_fk" | type: CONSTRAINT --
    -- ALTER TABLE db_appli_bota."REF_TAXREF" DROP CONSTRAINT IF EXISTS "ESPECE_fk" CASCADE;
    ALTER TABLE db_appli_bota."REF_TAXREF" ADD CONSTRAINT "ESPECE_fk" FOREIGN KEY ("id_espece_ESPECE")
    REFERENCES db_appli_bota."ESPECE" (id_espece) MATCH FULL
    ON DELETE SET NULL ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "ESPECE_fk" | type: CONSTRAINT --
    -- ALTER TABLE db_appli_bota."ELEMENT" DROP CONSTRAINT IF EXISTS "ESPECE_fk" CASCADE;
    ALTER TABLE db_appli_bota."ELEMENT" ADD CONSTRAINT "ESPECE_fk" FOREIGN KEY ("id_espece_ESPECE")
    REFERENCES db_appli_bota."ESPECE" (id_espece) MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "TRANSECT_fk" | type: CONSTRAINT --
    -- ALTER TABLE db_appli_bota."POINT" DROP CONSTRAINT IF EXISTS "TRANSECT_fk" CASCADE;
    ALTER TABLE db_appli_bota."POINT" ADD CONSTRAINT "TRANSECT_fk" FOREIGN KEY ("id_transect_TRANSECT")
    REFERENCES db_appli_bota."TRANSECT" (id_transect) MATCH FULL
    ON DELETE CASCADE ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "POINT_fk" | type: CONSTRAINT --
    -- ALTER TABLE db_appli_bota."PASSAGE_POINT" DROP CONSTRAINT IF EXISTS "POINT_fk" CASCADE;
    ALTER TABLE db_appli_bota."PASSAGE_POINT" ADD CONSTRAINT "POINT_fk" FOREIGN KEY ("id_point_POINT","id_transect_TRANSECT_POINT")
    REFERENCES db_appli_bota."POINT" (id_point,"id_transect_TRANSECT") MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "PASSAGE_POINT_fk" | type: CONSTRAINT --
    -- ALTER TABLE db_appli_bota."ELEMENT" DROP CONSTRAINT IF EXISTS "PASSAGE_POINT_fk" CASCADE;
    ALTER TABLE db_appli_bota."ELEMENT" ADD CONSTRAINT "PASSAGE_POINT_fk" FOREIGN KEY ("id_passage_PASSAGE_PASSAGE_POINT")
    REFERENCES db_appli_bota."PASSAGE_POINT" ("id_passage_PASSAGE") MATCH FULL
    ON DELETE CASCADE ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "PASSAGE_fk" | type: CONSTRAINT --
    -- ALTER TABLE db_appli_bota."PASSAGE_POINT" DROP CONSTRAINT IF EXISTS "PASSAGE_fk" CASCADE;
    ALTER TABLE db_appli_bota."PASSAGE_POINT" ADD CONSTRAINT "PASSAGE_fk" FOREIGN KEY ("id_passage_PASSAGE")
    REFERENCES db_appli_bota."PASSAGE" (id_passage) MATCH FULL
    ON DELETE CASCADE ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "TRANSECT_fk" | type: CONSTRAINT --
    -- ALTER TABLE db_appli_bota."PASSAGE" DROP CONSTRAINT IF EXISTS "TRANSECT_fk" CASCADE;
    ALTER TABLE db_appli_bota."PASSAGE" ADD CONSTRAINT "TRANSECT_fk" FOREIGN KEY ("id_transect_TRANSECT")
    REFERENCES db_appli_bota."TRANSECT" (id_transect) MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: public."many_TYPE_ELEMENT_has_many_ELEMENT" | type: TABLE --
    -- DROP TABLE IF EXISTS public."many_TYPE_ELEMENT_has_many_ELEMENT" CASCADE;
    CREATE TABLE public."many_TYPE_ELEMENT_has_many_ELEMENT"(
    	"id_type_element_TYPE_ELEMENT" integer NOT NULL,
    	"id_element_ELEMENT" integer NOT NULL,
    	"id_passage_PASSAGE_PASSAGE_POINT_ELEMENT" integer NOT NULL,
    	CONSTRAINT "many_TYPE_ELEMENT_has_many_ELEMENT_pk" PRIMARY KEY ("id_type_element_TYPE_ELEMENT","id_element_ELEMENT","id_passage_PASSAGE_PASSAGE_POINT_ELEMENT")
    
    );
    -- ddl-end --
    
    -- object: "TYPE_ELEMENT_fk" | type: CONSTRAINT --
    -- ALTER TABLE public."many_TYPE_ELEMENT_has_many_ELEMENT" DROP CONSTRAINT IF EXISTS "TYPE_ELEMENT_fk" CASCADE;
    ALTER TABLE public."many_TYPE_ELEMENT_has_many_ELEMENT" ADD CONSTRAINT "TYPE_ELEMENT_fk" FOREIGN KEY ("id_type_element_TYPE_ELEMENT")
    REFERENCES db_appli_bota."TYPE_ELEMENT" (id_type_element) MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    
    -- object: "ELEMENT_fk" | type: CONSTRAINT --
    -- ALTER TABLE public."many_TYPE_ELEMENT_has_many_ELEMENT" DROP CONSTRAINT IF EXISTS "ELEMENT_fk" CASCADE;
    ALTER TABLE public."many_TYPE_ELEMENT_has_many_ELEMENT" ADD CONSTRAINT "ELEMENT_fk" FOREIGN KEY ("id_element_ELEMENT","id_passage_PASSAGE_PASSAGE_POINT_ELEMENT")
    REFERENCES db_appli_bota."ELEMENT" (id_element,"id_passage_PASSAGE_PASSAGE_POINT") MATCH FULL
    ON DELETE RESTRICT ON UPDATE CASCADE;
    -- ddl-end --
    Ce code à l'air de bien correspondre à mon besoin, mais peut-être y a t-il des erreurs?
    Idem, pgmodeler n'oblige pas à avoir une clé primaire dans le PASSAGE_POINT.

    Pouvez vous me donner des retours?

    Merci beaucoup! bon we!
    Images attachées Images attachées  

  5. #45
    Membre averti Avatar de rabDev
    Homme Profil pro
    Ingénieur développement logiciels, Concepteur et développeur de JMerise
    Inscrit en
    Mars 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels, Concepteur et développeur de JMerise

    Informations forums :
    Inscription : Mars 2011
    Messages : 106
    Points : 328
    Points
    328
    Par défaut MCD ... Botanique avec JMerise
    Bonjour à tous
    (Bonjour AlexandreR31, fsmrel),
    Avant tout merci pour vos encouragements, et merci d'avoir utilisé JMerise.
    j'ai eu un peu de temps libre ces jours-ci et j'ai re-modéliser le MCD avec JMerise version 0.5.
    Le MCD est le suivant Nom : botaniqueMCD.png
Affichages : 962
Taille : 75,2 Ko

    le MLD
    Nom : botaniqueMLD.png
Affichages : 996
Taille : 135,1 Ko

    le script postgre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    ------------------------------------------------------------
    --        Script Postgre 
    ------------------------------------------------------------
    
    
    
    ------------------------------------------------------------
    -- Table: TYPE_ELEMENT
    ------------------------------------------------------------
    CREATE TABLE public.TYPE_ELEMENT(
    	id_type_element   SERIAL NOT NULL ,
    	code_element      INT  NOT NULL ,
    	libelle_element   INT  NOT NULL ,
    	CONSTRAINT PK_constraint_TYPE_ELEMENT PRIMARY KEY (id_type_element)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: ELEMENT
    ------------------------------------------------------------
    CREATE TABLE public.ELEMENT(
    	id_element            SERIAL NOT NULL ,
    	id_a_supprimer        INT  NOT NULL ,
    	id_passage            INT  NOT NULL ,
    	id_transect_PASSAGE   INT  NOT NULL ,
    	id_transect_POINT     INT  NOT NULL ,
    	id_point              INT  NOT NULL ,
    	geometrie             VARCHAR (50) NOT NULL ,
    	id_espece             INT  NOT NULL ,
    	CONSTRAINT PK_constraint_ELEMENT PRIMARY KEY (id_element,id_a_supprimer,id_passage,id_transect_PASSAGE,id_transect_POINT,id_point)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: ESPECE
    ------------------------------------------------------------
    CREATE TABLE public.ESPECE(
    	id_espece   SERIAL NOT NULL ,
    	cd_nom      INT   ,
    	CONSTRAINT PK_constraint_ESPECE PRIMARY KEY (id_espece)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: REF_TAXREF
    ------------------------------------------------------------
    CREATE TABLE public.REF_TAXREF(
    	cd_nom       INT  NOT NULL ,
    	nom_espece   VARCHAR (50) NOT NULL ,
    	CONSTRAINT PK_constraint_REF_TAXREF PRIMARY KEY (cd_nom)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: PASSAGE_POINT
    ------------------------------------------------------------
    CREATE TABLE public.PASSAGE_POINT(
    	id_a_supprimer        SERIAL NOT NULL ,
    	id_passage            INT  NOT NULL ,
    	id_transect_PASSAGE   INT  NOT NULL ,
    	id_transect_POINT     INT  NOT NULL ,
    	id_point              INT  NOT NULL ,
    	heure_passage         TIMETZ  NOT NULL ,
    	CONSTRAINT PK_constraint_PASSAGE_POINT PRIMARY KEY (id_a_supprimer,id_passage,id_transect_PASSAGE,id_transect_POINT,id_point)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: POINT
    ------------------------------------------------------------
    CREATE TABLE public.POINT(
    	id_point      SERIAL NOT NULL ,
    	id_transect   INT  NOT NULL ,
    	no_point      INT2  NOT NULL ,
    	geometrie     VARCHAR (50) NOT NULL ,
    	CONSTRAINT PK_constraint_POINT PRIMARY KEY (id_point,id_transect)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: TECHNICIEN
    ------------------------------------------------------------
    CREATE TABLE public.TECHNICIEN(
    	id_technicien       SERIAL NOT NULL ,
    	prenom_technicien   VARCHAR (50) NOT NULL ,
    	email               VARCHAR (50) NOT NULL ,
    	cd_poste            VARCHAR (50) NOT NULL ,
    	actif               BOOL  NOT NULL ,
    	nom_technicien      INT  NOT NULL UNIQUE,
    	CONSTRAINT PK_constraint_TECHNICIEN PRIMARY KEY (id_technicien)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: PASSAGE
    ------------------------------------------------------------
    CREATE TABLE public.PASSAGE(
    	id_passage        SERIAL NOT NULL ,
    	id_transect       INT  NOT NULL ,
    	date_passage      DATE  NOT NULL ,
    	validation        BOOL  NOT NULL ,
    	date_validation   DATE  NOT NULL ,
    	id_protocole      INT   ,
    	CONSTRAINT PK_constraint_PASSAGE PRIMARY KEY (id_passage,id_transect)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: TRANSECT
    ------------------------------------------------------------
    CREATE TABLE public.TRANSECT(
    	id_transect      SERIAL NOT NULL ,
    	cd_transect      INT2  NOT NULL ,
    	id_departement   INT  NOT NULL ,
    	CONSTRAINT PK_constraint_TRANSECT PRIMARY KEY (id_transect)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: STRUCTURE
    ------------------------------------------------------------
    CREATE TABLE public.STRUCTURE(
    	id_structure            SERIAL NOT NULL ,
    	nom_structure           VARCHAR (50) NOT NULL ,
    	abreviation_structure   VARCHAR (50) NOT NULL ,
    	CONSTRAINT PK_constraint_STRUCTURE PRIMARY KEY (id_structure)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: PROTOCOLE
    ------------------------------------------------------------
    CREATE TABLE public.PROTOCOLE(
    	id_protocole   SERIAL NOT NULL ,
    	libelle        VARCHAR (50) NOT NULL UNIQUE,
    	CONSTRAINT PK_constraint_PROTOCOLE PRIMARY KEY (id_protocole)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: REF_DEPARTEMENT
    ------------------------------------------------------------
    CREATE TABLE public.REF_DEPARTEMENT(
    	id_departement   SERIAL NOT NULL ,
    	libelle_dpt      VARCHAR (50) NOT NULL ,
    	cd_departement   VARCHAR (50) NOT NULL UNIQUE,
    	insee_dpt        INT  NOT NULL UNIQUE,
    	CONSTRAINT PK_constraint_REF_DEPARTEMENT PRIMARY KEY (id_departement)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: TYPER
    ------------------------------------------------------------
    CREATE TABLE public.TYPER(
    	id_type_element       INT  NOT NULL ,
    	id_element            INT  NOT NULL ,
    	id_a_supprimer        INT  NOT NULL ,
    	id_passage            INT  NOT NULL ,
    	id_transect_PASSAGE   INT  NOT NULL ,
    	id_transect_POINT     INT  NOT NULL ,
    	id_point              INT  NOT NULL ,
    	CONSTRAINT PK_constraint_TYPER PRIMARY KEY (id_type_element,id_element,id_a_supprimer,id_passage,id_transect_PASSAGE,id_transect_POINT,id_point)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: INVENTORIE
    ------------------------------------------------------------
    CREATE TABLE public.INVENTORIE(
    	id_technicien   INT  NOT NULL ,
    	id_passage      INT  NOT NULL ,
    	id_transect     INT  NOT NULL ,
    	CONSTRAINT PK_constraint_INVENTORIE PRIMARY KEY (id_technicien,id_passage,id_transect)
    )WITHOUT OIDS;
    
    
    ------------------------------------------------------------
    -- Table: EST_AFFECTE
    ------------------------------------------------------------
    CREATE TABLE public.EST_AFFECTE(
    	id_technicien   INT  NOT NULL ,
    	id_structure    INT  NOT NULL ,
    	CONSTRAINT PK_constraint_EST_AFFECTE PRIMARY KEY (id_technicien,id_structure)
    )WITHOUT OIDS;
    
    
    
    
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_a_supprimer
    	 FOREIGN KEY (id_a_supprimer)
    	 REFERENCES public.PASSAGE_POINT(id_a_supprimer);
    
    ALTER TABLE public.PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES public.PASSAGE(id_passage);
    
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES public.PASSAGE_POINT(id_passage);
    
    ALTER TABLE public.PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_point
    	 FOREIGN KEY (id_point)
    	 REFERENCES public.POINT(id_point);
    
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_point
    	 FOREIGN KEY (id_point)
    	 REFERENCES public.PASSAGE_POINT(id_point);
    
    ALTER TABLE public.POINT
    	 ADD CONSTRAINT FK_POINT_id_transect
    	 FOREIGN KEY (id_transect)
    	 REFERENCES public.TRANSECT(id_transect);
    
    ALTER TABLE public.PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_transect_POINT
    	 FOREIGN KEY (id_transect_POINT)
    	 REFERENCES public.POINT(id_transect);
    
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_transect_POINT
    	 FOREIGN KEY (id_transect_POINT)
    	 REFERENCES public.PASSAGE_POINT(id_transect_POINT);
    
    ALTER TABLE public.PASSAGE
    	 ADD CONSTRAINT FK_PASSAGE_id_transect
    	 FOREIGN KEY (id_transect)
    	 REFERENCES public.TRANSECT(id_transect);
    
    ALTER TABLE public.PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_transect_PASSAGE
    	 FOREIGN KEY (id_transect_PASSAGE)
    	 REFERENCES public.PASSAGE(id_transect);
    
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_transect_PASSAGE
    	 FOREIGN KEY (id_transect_PASSAGE)
    	 REFERENCES public.PASSAGE_POINT(id_transect_PASSAGE);
    
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_type_element
    	 FOREIGN KEY (id_type_element)
    	 REFERENCES public.TYPE_ELEMENT(id_type_element);
    
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_element
    	 FOREIGN KEY (id_element)
    	 REFERENCES public.ELEMENT(id_element);
    
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_a_supprimer
    	 FOREIGN KEY (id_a_supprimer)
    	 REFERENCES public.ELEMENT(id_a_supprimer);
    
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES public.ELEMENT(id_passage);
    
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_transect_PASSAGE
    	 FOREIGN KEY (id_transect_PASSAGE)
    	 REFERENCES public.ELEMENT(id_transect_PASSAGE);
    
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_transect_POINT
    	 FOREIGN KEY (id_transect_POINT)
    	 REFERENCES public.ELEMENT(id_transect_POINT);
    
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_point
    	 FOREIGN KEY (id_point)
    	 REFERENCES public.ELEMENT(id_point);
    
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_espece
    	 FOREIGN KEY (id_espece)
    	 REFERENCES public.ESPECE(id_espece);
    
    ALTER TABLE public.ESPECE
    	 ADD CONSTRAINT FK_ESPECE_cd_nom
    	 FOREIGN KEY (cd_nom)
    	 REFERENCES public.REF_TAXREF(cd_nom);
    
    ALTER TABLE public.INVENTORIE
    	 ADD CONSTRAINT FK_INVENTORIE_id_technicien
    	 FOREIGN KEY (id_technicien)
    	 REFERENCES public.TECHNICIEN(id_technicien);
    
    ALTER TABLE public.INVENTORIE
    	 ADD CONSTRAINT FK_INVENTORIE_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES public.PASSAGE(id_passage);
    
    ALTER TABLE public.INVENTORIE
    	 ADD CONSTRAINT FK_INVENTORIE_id_transect
    	 FOREIGN KEY (id_transect)
    	 REFERENCES public.PASSAGE(id_transect);
    
    ALTER TABLE public.EST_AFFECTE
    	 ADD CONSTRAINT FK_EST_AFFECTE_id_technicien
    	 FOREIGN KEY (id_technicien)
    	 REFERENCES public.TECHNICIEN(id_technicien);
    
    ALTER TABLE public.EST_AFFECTE
    	 ADD CONSTRAINT FK_EST_AFFECTE_id_structure
    	 FOREIGN KEY (id_structure)
    	 REFERENCES public.STRUCTURE(id_structure);
    
    ALTER TABLE public.PASSAGE
    	 ADD CONSTRAINT FK_PASSAGE_id_protocole
    	 FOREIGN KEY (id_protocole)
    	 REFERENCES public.PROTOCOLE(id_protocole);
    
    ALTER TABLE public.TRANSECT
    	 ADD CONSTRAINT FK_TRANSECT_id_departement
    	 FOREIGN KEY (id_departement)
    	 REFERENCES public.REF_DEPARTEMENT(id_departement);
    le script MySQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    #------------------------------------------------------------
    #        Script MySQL.
    #------------------------------------------------------------
    
    
    #------------------------------------------------------------
    # Table: TYPE_ELEMENT
    #------------------------------------------------------------
    
    CREATE TABLE TYPE_ELEMENT(
            id_type_element Int  Auto_increment  NOT NULL ,
            code_element    Int NOT NULL ,
            libelle_element Int NOT NULL ,
            PRIMARY KEY (id_type_element )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: ELEMENT
    #------------------------------------------------------------
    
    CREATE TABLE ELEMENT(
            id_element          Int  Auto_increment  NOT NULL ,
            id_a_supprimer      Int NOT NULL ,
            id_passage          Int NOT NULL ,
            id_transect_PASSAGE Int NOT NULL ,
            id_transect_POINT   Int NOT NULL ,
            id_point            Int NOT NULL ,
            geometrie           Varchar (50) NOT NULL ,
            id_espece           Int NOT NULL ,
            PRIMARY KEY (id_element ,id_a_supprimer ,id_passage ,id_transect_PASSAGE ,id_transect_POINT ,id_point )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: ESPECE
    #------------------------------------------------------------
    
    CREATE TABLE ESPECE(
            id_espece Int  Auto_increment  NOT NULL ,
            cd_nom    Int ,
            PRIMARY KEY (id_espece )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: REF_TAXREF
    #------------------------------------------------------------
    
    CREATE TABLE REF_TAXREF(
            cd_nom     Int NOT NULL ,
            nom_espece Varchar (50) NOT NULL ,
            PRIMARY KEY (cd_nom )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: PASSAGE_POINT
    #------------------------------------------------------------
    
    CREATE TABLE PASSAGE_POINT(
            id_a_supprimer      Int  Auto_increment  NOT NULL ,
            id_passage          Int NOT NULL ,
            id_transect_PASSAGE Int NOT NULL ,
            id_transect_POINT   Int NOT NULL ,
            id_point            Int NOT NULL ,
            heure_passage       Time NOT NULL ,
            PRIMARY KEY (id_a_supprimer ,id_passage ,id_transect_PASSAGE ,id_transect_POINT ,id_point )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: POINT
    #------------------------------------------------------------
    
    CREATE TABLE POINT(
            id_point    Int  Auto_increment  NOT NULL ,
            id_transect Int NOT NULL ,
            no_point    Smallint NOT NULL ,
            geometrie   Varchar (50) NOT NULL ,
            PRIMARY KEY (id_point ,id_transect )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: TECHNICIEN
    #------------------------------------------------------------
    
    CREATE TABLE TECHNICIEN(
            id_technicien     Int  Auto_increment  NOT NULL ,
            prenom_technicien Varchar (50) NOT NULL ,
            email             Varchar (50) NOT NULL ,
            cd_poste          Varchar (50) NOT NULL ,
            actif             Bool NOT NULL ,
            nom_technicien    Int NOT NULL ,
            PRIMARY KEY (id_technicien ) ,
            UNIQUE (nom_technicien )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: PASSAGE
    #------------------------------------------------------------
    
    CREATE TABLE PASSAGE(
            id_passage      Int  Auto_increment  NOT NULL ,
            id_transect     Int NOT NULL ,
            date_passage    Date NOT NULL ,
            validation      Bool NOT NULL ,
            date_validation Date NOT NULL ,
            id_protocole    Int ,
            PRIMARY KEY (id_passage ,id_transect )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: TRANSECT
    #------------------------------------------------------------
    
    CREATE TABLE TRANSECT(
            id_transect    Int  Auto_increment  NOT NULL ,
            cd_transect    Smallint NOT NULL ,
            id_departement Int NOT NULL ,
            PRIMARY KEY (id_transect )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: STRUCTURE
    #------------------------------------------------------------
    
    CREATE TABLE STRUCTURE(
            id_structure          Int  Auto_increment  NOT NULL ,
            nom_structure         Varchar (50) NOT NULL ,
            abreviation_structure Varchar (50) NOT NULL ,
            PRIMARY KEY (id_structure )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: PROTOCOLE
    #------------------------------------------------------------
    
    CREATE TABLE PROTOCOLE(
            id_protocole Int  Auto_increment  NOT NULL ,
            libelle      Varchar (50) NOT NULL ,
            PRIMARY KEY (id_protocole ) ,
            UNIQUE (libelle )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: REF_DEPARTEMENT
    #------------------------------------------------------------
    
    CREATE TABLE REF_DEPARTEMENT(
            id_departement Int  Auto_increment  NOT NULL ,
            libelle_dpt    Varchar (50) NOT NULL ,
            cd_departement Varchar (50) NOT NULL ,
            insee_dpt      Int NOT NULL ,
            PRIMARY KEY (id_departement ) ,
            UNIQUE (cd_departement ,insee_dpt )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: TYPER
    #------------------------------------------------------------
    
    CREATE TABLE TYPER(
            id_type_element     Int NOT NULL ,
            id_element          Int NOT NULL ,
            id_a_supprimer      Int NOT NULL ,
            id_passage          Int NOT NULL ,
            id_transect_PASSAGE Int NOT NULL ,
            id_transect_POINT   Int NOT NULL ,
            id_point            Int NOT NULL ,
            PRIMARY KEY (id_type_element ,id_element ,id_a_supprimer ,id_passage ,id_transect_PASSAGE ,id_transect_POINT ,id_point )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: INVENTORIE
    #------------------------------------------------------------
    
    CREATE TABLE INVENTORIE(
            id_technicien Int NOT NULL ,
            id_passage    Int NOT NULL ,
            id_transect   Int NOT NULL ,
            PRIMARY KEY (id_technicien ,id_passage ,id_transect )
    )ENGINE=InnoDB;
    
    
    #------------------------------------------------------------
    # Table: EST_AFFECTE
    #------------------------------------------------------------
    
    CREATE TABLE EST_AFFECTE(
            id_technicien Int NOT NULL ,
            id_structure  Int NOT NULL ,
            PRIMARY KEY (id_technicien ,id_structure )
    )ENGINE=InnoDB;
    
    
    ALTER TABLE ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_a_supprimer
    	 FOREIGN KEY (id_a_supprimer)
    	 REFERENCES PASSAGE_POINT(id_a_supprimer);
    
    ALTER TABLE PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES PASSAGE(id_passage);
    
    ALTER TABLE ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES PASSAGE_POINT(id_passage);
    
    ALTER TABLE PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_point
    	 FOREIGN KEY (id_point)
    	 REFERENCES POINT(id_point);
    
    ALTER TABLE ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_point
    	 FOREIGN KEY (id_point)
    	 REFERENCES PASSAGE_POINT(id_point);
    
    ALTER TABLE POINT
    	 ADD CONSTRAINT FK_POINT_id_transect
    	 FOREIGN KEY (id_transect)
    	 REFERENCES TRANSECT(id_transect);
    
    ALTER TABLE PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_transect_POINT
    	 FOREIGN KEY (id_transect_POINT)
    	 REFERENCES POINT(id_transect);
    
    ALTER TABLE ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_transect_POINT
    	 FOREIGN KEY (id_transect_POINT)
    	 REFERENCES PASSAGE_POINT(id_transect_POINT);
    
    ALTER TABLE PASSAGE
    	 ADD CONSTRAINT FK_PASSAGE_id_transect
    	 FOREIGN KEY (id_transect)
    	 REFERENCES TRANSECT(id_transect);
    
    ALTER TABLE PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_transect_PASSAGE
    	 FOREIGN KEY (id_transect_PASSAGE)
    	 REFERENCES PASSAGE(id_transect);
    
    ALTER TABLE ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_transect_PASSAGE
    	 FOREIGN KEY (id_transect_PASSAGE)
    	 REFERENCES PASSAGE_POINT(id_transect_PASSAGE);
    
    ALTER TABLE TYPER
    	 ADD CONSTRAINT FK_TYPER_id_type_element
    	 FOREIGN KEY (id_type_element)
    	 REFERENCES TYPE_ELEMENT(id_type_element);
    
    ALTER TABLE TYPER
    	 ADD CONSTRAINT FK_TYPER_id_element
    	 FOREIGN KEY (id_element)
    	 REFERENCES ELEMENT(id_element);
    
    ALTER TABLE TYPER
    	 ADD CONSTRAINT FK_TYPER_id_a_supprimer
    	 FOREIGN KEY (id_a_supprimer)
    	 REFERENCES ELEMENT(id_a_supprimer);
    
    ALTER TABLE TYPER
    	 ADD CONSTRAINT FK_TYPER_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES ELEMENT(id_passage);
    
    ALTER TABLE TYPER
    	 ADD CONSTRAINT FK_TYPER_id_transect_PASSAGE
    	 FOREIGN KEY (id_transect_PASSAGE)
    	 REFERENCES ELEMENT(id_transect_PASSAGE);
    
    ALTER TABLE TYPER
    	 ADD CONSTRAINT FK_TYPER_id_transect_POINT
    	 FOREIGN KEY (id_transect_POINT)
    	 REFERENCES ELEMENT(id_transect_POINT);
    
    ALTER TABLE TYPER
    	 ADD CONSTRAINT FK_TYPER_id_point
    	 FOREIGN KEY (id_point)
    	 REFERENCES ELEMENT(id_point);
    
    ALTER TABLE ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_espece
    	 FOREIGN KEY (id_espece)
    	 REFERENCES ESPECE(id_espece);
    
    ALTER TABLE ESPECE
    	 ADD CONSTRAINT FK_ESPECE_cd_nom
    	 FOREIGN KEY (cd_nom)
    	 REFERENCES REF_TAXREF(cd_nom);
    
    ALTER TABLE INVENTORIE
    	 ADD CONSTRAINT FK_INVENTORIE_id_technicien
    	 FOREIGN KEY (id_technicien)
    	 REFERENCES TECHNICIEN(id_technicien);
    
    ALTER TABLE INVENTORIE
    	 ADD CONSTRAINT FK_INVENTORIE_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES PASSAGE(id_passage);
    
    ALTER TABLE INVENTORIE
    	 ADD CONSTRAINT FK_INVENTORIE_id_transect
    	 FOREIGN KEY (id_transect)
    	 REFERENCES PASSAGE(id_transect);
    
    ALTER TABLE EST_AFFECTE
    	 ADD CONSTRAINT FK_EST_AFFECTE_id_technicien
    	 FOREIGN KEY (id_technicien)
    	 REFERENCES TECHNICIEN(id_technicien);
    
    ALTER TABLE EST_AFFECTE
    	 ADD CONSTRAINT FK_EST_AFFECTE_id_structure
    	 FOREIGN KEY (id_structure)
    	 REFERENCES STRUCTURE(id_structure);
    
    ALTER TABLE PASSAGE
    	 ADD CONSTRAINT FK_PASSAGE_id_protocole
    	 FOREIGN KEY (id_protocole)
    	 REFERENCES PROTOCOLE(id_protocole);
    
    ALTER TABLE TRANSECT
    	 ADD CONSTRAINT FK_TRANSECT_id_departement
    	 FOREIGN KEY (id_departement)
    	 REFERENCES REF_DEPARTEMENT(id_departement);

    Bonne journée à tous

  6. #46
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir Alex, bonsoir tout le monde,

    Citation Envoyé par AlexandreR31 Voir le message
    Ce code à l'air de bien correspondre à mon besoin, mais peut-être y a t-il des erreurs ?
    Si vous parlez du code SQL de déclaration des tables, il y a des erreurs. Quant au MLD, il n’est pas d’équerre en ce qui concerne l’identification relative.

    Concernant la table POINT :

    Le code SQL produit par pgModeler propose le couple (ordonné) {id_point, id_transect} pour la clé primaire :

    CONSTRAINT "POINT_pk" PRIMARY KEY (id_point,"id_transect_TRANSECT")

    On est ramené à la case Départ : comme dans JMerise 0.4.0.1, les colonnes ne sont pas dans le bon ordre. Le tout est de savoir ce qu’il en coûte de réordonner au niveau du MLD, car au stade SQL il est illusoire de tenter l’opération (à nouveau, je vous prie de m’excuser, mais voilà un code bon pour la poubelle et je mets mon casque lourd...).

    Par ailleurs, pgModeler ne permet pas de réaliser un véritable MCD, mas plutôt un MLD (héritage explicite des attributs des tables référencées, présence des clés étrangères, etc.) Je ne suis pas contre, et il m’arrive de shunter l’étape MCD, certes plus conviviale (cf. l’excellent Yves Tabourier, dans De l’autre côté de Merise (Editions d’Organisation, 1986), au paragraphe 13.4.5), mais cette étape n’est pas indispensable si l’on a correctement défini l’ensemble des règles de gestion des données et qu’on a un bon outil à sa disposition (MySQL Workbench par exemple). Mieux vaut un MLD valide qu’un MCD ne répondant pas aux besoins de l’application ; comme dit l’adage, il n’ y a pas de mauvais outils (quoique...).

    En ce qui vous concerne, le cœur du modèle est sain pour autant qu’on l’a mis à plat, disséqué. On peut donc dire que l’étape MCD n’est pas strictement nécessaire et l’utilisation de pgModeler est donc possible. Cela dit, les diagrammes qu’il permet de construire sont surchargés, idem pour le code SQL qui en devient obèse et illisible ! Je préfère nettement son homologue MySQL Workbench, lequel a bien entendu ses petits défauts, mais qu’on sait corriger sans problème. D’accord, pgModeler est dédié à PostgreSQL et MySQL Workbench à MySQL, mais les différences sont tellement mineures que peu importe l’orientation de l’outil, les modifications à apporter, du genre SET SCHEMA 'alex' à la place de USE alex, virer ENGINE = InnoDB, voire les quelques instructions CREATE INDEX, bref, pas de quoi fouetter un chat et j’ai toujours procédé ainsi pour mes propres scripts, sans problème, quel que soit le SGBD cible...

    Pour résumer : pgModeler ne permet pas de réaliser un MCD mais un MLD (ce qui à mon sens n’est pas essentiel, pardon escartefigue ), le code SQL qu’il génère est inutilement bavard, pratiquement illisible et l’ordre des colonnes dans les clés n’est pas le bon. Je vous conseille de ne pas insister avec cet outil.

    En l’état de la discussion, l’alternative concerne plutôt JMerise vs MySQL Workbench. Je ne reviens pas sur les problèmes posés par JMerise 0.4.0.1 et les réactions suscitées... De son côté, pour JMerise 0.5, rabDev prend en compte les observations que j’ai faites (et j’en ai encore en réserve !), mais quand la version 0.5 sera-t-elle disponible ? En attendant ce jour, je vous conseille d’utiliser MySQL Workbench.

    Voici le cœur du modèle, réalisé avec MySQL Workbench :



    Bien sûr, j’ai été amené à réordonner les colonnes des clés dans le schéma, mais cela se fait très simplement. Par exemple, quand on construit la table PASSAGE_POINT, les colonnes dans l’en-tête sont, disons, ordonnées ainsi : id_passage_point, heure_passage, id_transect, id_point, id_passage. Pour rectifier le tir, il suffit de déplacer ces colonnes dans l’en-tête, et l’ordre dans la clé primaire est ajusté en conséquence, opération simple et rapide. Une fois le MLD jugé valide, on peut passer à la génération du script SQL de création des tables.

    Le code SQL produit par MySQL Workbench n’est pas aussi bavard que celui produit par pgModeler, il est parfaitement lisible et demande très peu de modifications pour être utilisable par PostgreSQL, et l’article que je lui ai consacré permet d’utiliser MySQL Workbench sans avoir à fouiller dans les documentations inondant la Toile.

    Ne vous découragez pas, Alex, on est tous derrière vous.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  7. #47
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Pour résumer : pgModeler ne permet pas de réaliser un MCD mais un MLD (ce qui à mon sens n’est pas essentiel, pardon escartefigue ), le code SQL qu’il génère est inutilement bavard, pratiquement illisible et l’ordre des colonnes dans les clés n’est pas le bon. Je vous conseille de ne pas insister avec cet outil.
    Je ne me prononcerai pas sur l'outil pgModeler que je n'ai jamais pratiqué, sur la méthode, je veux bien avouer avoir un penchant prononcé pour une approche MCD avant d'aborder les tables

    Citation Envoyé par fsmrel Voir le message
    En l’état de la discussion, l’alternative concerne plutôt JMerise vs MySQL Workbench. Je ne reviens pas sur les problèmes posés par JMerise 0.4.0.1 et les réactions suscitées... De son côté, pour JMerise 0.5, rabDev prend en compte les observations que j’ai faites (et j’en ai encore en réserve !), mais quand la version 0.5 sera-t-elle disponible ? En attendant ce jour, je vous conseille d’utiliser MySQL Workbench.
    Et pourquoi pas DB-Main ?

  8. #48
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Ave Capitaine,

    Dans ma toute 1re proposition, je n’avais pas manqué de parler de DB-MAIN et même proposé un début de MCD. Je n’avais pas non plus manqué de parler de MySQL Workbench, car DB-MAIN peut dérouter...

    Alex n’a pas suivi la voie DB-MAIN, et maintenant les choses étant à peu près stabilisées, passer à MySQL Workbench me paraît un choix tout à fait raisonnable, face aux travaux d’aménagement du code SQL généré par JMerise et pgModeler. Mais après toutes ces péripéties, à Alex de faire son choix définitif parmi ces différentes outils, quitte aussi à ajouter Open ModelSphere à la liste (mais celui-ci m’a parfois agacé lors du passage au MLD).

    En tout cas, continuons à l’aider.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  9. #49
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    J'avoue n'avoir survolé le sujet que très sommairement, le sachant entre de bonnes mains

  10. #50
    Membre averti Avatar de rabDev
    Homme Profil pro
    Ingénieur développement logiciels, Concepteur et développeur de JMerise
    Inscrit en
    Mars 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels, Concepteur et développeur de JMerise

    Informations forums :
    Inscription : Mars 2011
    Messages : 106
    Points : 328
    Points
    328
    Par défaut
    Bonjour à toutes et à tous,

    j'espère que AlexandreR31 a déjà résolu son problème. sinon j'ai travaillé un peu durant ces deux dernières semaines sur JMerise 0.5 et ça donne ça :

    MCD
    Nom : BotanMCD.png
Affichages : 4982
Taille : 90,1 Ko

    MLD

    Nom : BotanMLD.png
Affichages : 5094
Taille : 135,9 Ko


    Script MySQL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
     
    #------------------------------------------------------------
    #        Script MySQL.
    #------------------------------------------------------------
     
     
    #------------------------------------------------------------
    # Table: TYPE_ELEMENT
    #------------------------------------------------------------
     
    CREATE TABLE TYPE_ELEMENT(
            id_type_element Int  Auto_increment  NOT NULL ,
            code_element    Int NOT NULL ,
            libelle_element Int NOT NULL
    	, CONSTRAINT TYPE_ELEMENT_PK PRIMARY KEY (id_type_element)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: REF_TAXREF
    #------------------------------------------------------------
     
    CREATE TABLE REF_TAXREF(
            cd_nom     Int NOT NULL ,
            nom_espece Varchar (50) NOT NULL
    	, CONSTRAINT REF_TAXREF_PK PRIMARY KEY (cd_nom)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: ESPECE
    #------------------------------------------------------------
     
    CREATE TABLE ESPECE(
            id_espece Int  Auto_increment  NOT NULL ,
            cd_nom    Int
    	, CONSTRAINT ESPECE_PK PRIMARY KEY (id_espece)
    	, CONSTRAINT ESPECE_REF_TAXREF_FK  FOREIGN KEY (cd_nom ) REFERENCES REF_TAXREF(cd_nom)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: TECHNICIEN
    #------------------------------------------------------------
     
    CREATE TABLE TECHNICIEN(
            id_technicien     Int  Auto_increment  NOT NULL ,
            prenom_technicien Varchar (50) NOT NULL ,
            email             Varchar (50) NOT NULL ,
            cd_poste          Varchar (50) NOT NULL ,
            actif             Bool NOT NULL ,
            nom_technicien    Int NOT NULL
    	, CONSTRAINT TECHNICIEN_AK UNIQUE (nom_technicien)
    	, CONSTRAINT TECHNICIEN_PK PRIMARY KEY (id_technicien)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: STRUCTURE
    #------------------------------------------------------------
     
    CREATE TABLE STRUCTURE(
            id_structure          Int  Auto_increment  NOT NULL ,
            nom_structure         Varchar (50) NOT NULL ,
            abreviation_structure Varchar (50) NOT NULL
    	, CONSTRAINT STRUCTURE_PK PRIMARY KEY (id_structure)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: PROTOCOLE
    #------------------------------------------------------------
     
    CREATE TABLE PROTOCOLE(
            id_protocole Int  Auto_increment  NOT NULL ,
            libelle      Varchar (50) NOT NULL
    	, CONSTRAINT PROTOCOLE_AK UNIQUE (libelle)
    	, CONSTRAINT PROTOCOLE_PK PRIMARY KEY (id_protocole)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: REF_DEPARTEMENT
    #------------------------------------------------------------
     
    CREATE TABLE REF_DEPARTEMENT(
            id_departement Int  Auto_increment  NOT NULL ,
            libelle_dpt    Varchar (50) NOT NULL ,
            cd_departement Varchar (50) NOT NULL ,
            insee_dpt      Int NOT NULL
    	, CONSTRAINT REF_DEPARTEMENT_AK UNIQUE (cd_departement,insee_dpt)
    	, CONSTRAINT REF_DEPARTEMENT_PK PRIMARY KEY (id_departement)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: TRANSECT
    #------------------------------------------------------------
     
    CREATE TABLE TRANSECT(
            id_transect    Int  Auto_increment  NOT NULL ,
            cd_transect    Smallint NOT NULL ,
            id_departement Int NOT NULL
    	, CONSTRAINT TRANSECT_PK PRIMARY KEY (id_transect)
    	, CONSTRAINT TRANSECT_REF_DEPARTEMENT_FK  FOREIGN KEY (id_departement ) REFERENCES REF_DEPARTEMENT(id_departement)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: POINT
    #------------------------------------------------------------
     
    CREATE TABLE POINT(
            id_transect Int NOT NULL ,
            id_point    Int NOT NULL ,
            no_point    Smallint NOT NULL ,
            geometrie   Varchar (50) NOT NULL
    	, CONSTRAINT POINT_PK PRIMARY KEY (id_transect, id_point)
    	, CONSTRAINT POINT_TRANSECT_FK  FOREIGN KEY (id_transect ) REFERENCES TRANSECT(id_transect)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: PASSAGE
    #------------------------------------------------------------
     
    CREATE TABLE PASSAGE(
            id_transect     Int NOT NULL ,
            id_passage      Int NOT NULL ,
            date_passage    Date NOT NULL ,
            validation      Bool NOT NULL ,
            date_validation Date NOT NULL ,
            id_protocole    Int NOT NULL
    	, CONSTRAINT PASSAGE_PK PRIMARY KEY (id_transect, id_passage)
    	, CONSTRAINT PASSAGE_TRANSECT_FK  FOREIGN KEY (id_transect ) REFERENCES TRANSECT(id_transect)
    	, CONSTRAINT PASSAGE_PROTOCOLE_FK  FOREIGN KEY (id_protocole ) REFERENCES PROTOCOLE(id_protocole)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: PASSAGE_POINT
    #------------------------------------------------------------
     
    CREATE TABLE PASSAGE_POINT(
            id_transect_PASSAGE Int NOT NULL ,
            id_passage          Int NOT NULL ,
            id_transect_POINT   Int NOT NULL ,
            id_point            Int NOT NULL ,
            id_a_supprimer      Int NOT NULL ,
            heure_passage       Time NOT NULL
    	, CONSTRAINT PASSAGE_POINT_PK PRIMARY KEY (id_transect_PASSAGE, id_passage, id_transect_POINT, id_point, id_a_supprimer)
    	, CONSTRAINT PASSAGE_POINT_PASSAGE_FK  FOREIGN KEY (id_transect_PASSAGE, id_passage ) REFERENCES PASSAGE(id_transect, id_passage)
    	, CONSTRAINT PASSAGE_POINT_POINT_FK  FOREIGN KEY (id_transect_POINT, id_point ) REFERENCES POINT(id_transect, id_point)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: ELEMENT
    #------------------------------------------------------------
     
    CREATE TABLE ELEMENT(
            id_transect_PASSAGE Int NOT NULL ,
            id_passage          Int NOT NULL ,
            id_transect_POINT   Int NOT NULL ,
            id_point            Int NOT NULL ,
            id_a_supprimer      Int NOT NULL ,
            id_element          Int NOT NULL ,
            geometrie           Varchar (50) NOT NULL ,
            id_espece           Int NOT NULL
    	, CONSTRAINT ELEMENT_PK PRIMARY KEY (id_transect_PASSAGE, id_passage, id_transect_POINT, id_point, id_a_supprimer, id_element)
    	, CONSTRAINT ELEMENT_PASSAGE_POINT_FK  FOREIGN KEY (id_transect_PASSAGE, id_passage, id_transect_POINT, id_point, id_a_supprimer ) REFERENCES PASSAGE_POINT(id_transect_PASSAGE, id_passage, id_transect_POINT, id_point, id_a_supprimer)
    	, CONSTRAINT ELEMENT_ESPECE_FK  FOREIGN KEY (id_espece ) REFERENCES ESPECE(id_espece)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: TYPER
    #------------------------------------------------------------
     
    CREATE TABLE TYPER(
            id_transect_PASSAGE Int NOT NULL ,
            id_passage          Int NOT NULL ,
            id_transect_POINT   Int NOT NULL ,
            id_point            Int NOT NULL ,
            id_a_supprimer      Int NOT NULL ,
            id_element          Int NOT NULL ,
            id_type_element     Int NOT NULL
    	, CONSTRAINT TYPER_PK PRIMARY KEY (id_transect_PASSAGE, id_passage, id_transect_POINT, id_point, id_a_supprimer, id_element, id_type_element)
    	, CONSTRAINT TYPER_ELEMENT_FK  FOREIGN KEY (id_transect_PASSAGE, id_passage, id_transect_POINT, id_point, id_a_supprimer, id_element ) REFERENCES ELEMENT(id_transect_PASSAGE, id_passage, id_transect_POINT, id_point, id_a_supprimer, id_element)
    	, CONSTRAINT TYPER_TYPE_ELEMENT_FK  FOREIGN KEY (id_type_element ) REFERENCES TYPE_ELEMENT(id_type_element)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: INVENTORIE
    #------------------------------------------------------------
     
    CREATE TABLE INVENTORIE(
            id_transect   Int NOT NULL ,
            id_passage    Int NOT NULL ,
            id_technicien Int NOT NULL
    	, CONSTRAINT INVENTORIE_PK PRIMARY KEY (id_transect, id_passage, id_technicien)
    	, CONSTRAINT INVENTORIE_PASSAGE_FK  FOREIGN KEY (id_transect, id_passage ) REFERENCES PASSAGE(id_transect, id_passage)
    	, CONSTRAINT INVENTORIE_TECHNICIEN_FK  FOREIGN KEY (id_technicien ) REFERENCES TECHNICIEN(id_technicien)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: EST_AFFECTE
    #------------------------------------------------------------
     
    CREATE TABLE EST_AFFECTE(
            id_structure  Int NOT NULL ,
            id_technicien Int NOT NULL
    	, CONSTRAINT EST_AFFECTE_PK PRIMARY KEY (id_structure, id_technicien)
    	, CONSTRAINT EST_AFFECTE_STRUCTURE_FK  FOREIGN KEY (id_structure ) REFERENCES STRUCTURE(id_structure)
    	, CONSTRAINT EST_AFFECTE_TECHNICIEN_FK  FOREIGN KEY (id_technicien ) REFERENCES TECHNICIEN(id_technicien)
    )ENGINE=InnoDB;


    1er indice de la prochaine version JMerise, j'ai abandonné les ALTER TABLE pour rajouter les contraintes (sauf dans certains cas )


    Bonne journée à toutes et à tous,

    PS : Si vous avez des remarques, des suggestions ou des erreurs à me signaler, n'hésitez surtout pas à me les envoyer par mail : jmerise@jfreesoft.com

  11. #51
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Salve,

    Bel effort rabdev, ça prend vraiment tournure.

    Je poste dans le sous-forum JFreesoft, car le capitaine et autres intervenants attentifs peuvent avoir des choses intéressantes à dire.

    Dommage qu’Alex ne se manifeste pas...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  12. #52
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 29
    Points : 43
    Points
    43
    Par défaut
    Bonjour à tous,

    Merci pour vos retours, et désolé pour le silence, j'étais sur d'autres projets.
    J'ai réessayé avec DB-Main et MySql WorkBench, mais j'ai vraiment du mal... manque d'habitudes?

    Du coup, j'ai testé JMerise Beta, et voici ci-dessous ce que ça donne.
    Au passage, rabDev vous proposiez de faire des suggestions pour JMerise, éventuellement, il pourrait y avoir d'ajouter un champ de type Geometry pour Postgresql. Sinon, merci pour votre travail!
    J'ai pu supprimer la clé primaire que j'avais ajouté dans la relation PASSAGE_POINT qui était demandée avec la version précédente.

    Voici du coup le MCD
    Nom : MCD_AppliBota_Jmerise0.5.PNG
Affichages : 833
Taille : 62,9 Ko

    Le MLD
    Nom : MLD_AppliBota_Jmerise0.5.PNG
Affichages : 842
Taille : 88,2 Ko

    Et enfin le code généré:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    ------------------------------------------------------------
    --        Script Postgre 
    ------------------------------------------------------------
     
     
     
    ------------------------------------------------------------
    -- Table: TECHNICIEN
    ------------------------------------------------------------
    CREATE TABLE public.TECHNICIEN(
    	id_technicien       SERIAL NOT NULL ,
    	nom_technicien      VARCHAR (50) NOT NULL ,
    	prenom_technicien   VARCHAR (50) NOT NULL ,
    	email               VARCHAR (25)  ,
    	cd_poste            VARCHAR (50) NOT NULL ,
    	actif               BOOL  NOT NULL ,
    	code_technicien     INT  NOT NULL UNIQUE,
    	CONSTRAINT PK_constraint_TECHNICIEN PRIMARY KEY (id_technicien)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: STRUCTURE
    ------------------------------------------------------------
    CREATE TABLE public.STRUCTURE(
    	id_structure            SERIAL NOT NULL ,
    	abreviation_structure   VARCHAR (25)  ,
    	nom_structure           VARCHAR (100) NOT NULL UNIQUE,
    	CONSTRAINT PK_constraint_STRUCTURE PRIMARY KEY (id_structure)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: POINT
    ------------------------------------------------------------
    CREATE TABLE public.POINT(
    	id_transect   INT  NOT NULL ,
    	id_point      SERIAL NOT NULL ,
    	no_point      INT2  NOT NULL ,
    	geometrie     VARCHAR (25) NOT NULL ,
    	CONSTRAINT PK_constraint_POINT PRIMARY KEY (id_transect,id_point)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: TRANSECT
    ------------------------------------------------------------
    CREATE TABLE public.TRANSECT(
    	id_transect                      SERIAL NOT NULL ,
    	cd_transect                      INT2  NOT NULL UNIQUE,
    	id_departement_REF_DEPARTEMENT   INT  NOT NULL ,
    	CONSTRAINT PK_constraint_TRANSECT PRIMARY KEY (id_transect)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: REF_TAXREF
    ------------------------------------------------------------
    CREATE TABLE public.REF_TAXREF(
    	cd_nom       INT  NOT NULL ,
    	nom_espece   VARCHAR (50) NOT NULL ,
    	CONSTRAINT PK_constraint_REF_TAXREF PRIMARY KEY (cd_nom)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: ESPECE
    ------------------------------------------------------------
    CREATE TABLE public.ESPECE(
    	id_espece           SERIAL NOT NULL ,
    	cd_nom_REF_TAXREF   INT   ,
    	CONSTRAINT PK_constraint_ESPECE PRIMARY KEY (id_espece)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: PASSAGE
    ------------------------------------------------------------
    CREATE TABLE public.PASSAGE(
    	id_transect       INT  NOT NULL ,
    	id_passage        SERIAL NOT NULL ,
    	date_passage      DATE  NOT NULL ,
    	validation        BOOL   ,
    	date_validation   DATE   ,
    	id_protocole      INT  NOT NULL ,
    	CONSTRAINT PK_constraint_PASSAGE PRIMARY KEY (id_transect,id_passage)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: PROTOCOLE
    ------------------------------------------------------------
    CREATE TABLE public.PROTOCOLE(
    	id_protocole   SERIAL NOT NULL ,
    	libelle        VARCHAR (25) NOT NULL UNIQUE,
    	CONSTRAINT PK_constraint_PROTOCOLE PRIMARY KEY (id_protocole)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: REF_DEPARTEMENT
    ------------------------------------------------------------
    CREATE TABLE public.REF_DEPARTEMENT(
    	id_departement   SERIAL NOT NULL ,
    	libelle_dpt      VARCHAR (25)  ,
    	Cd_departement   VARCHAR (25) NOT NULL UNIQUE,
    	insee_dpt        INT  NOT NULL UNIQUE,
    	CONSTRAINT PK_constraint_REF_DEPARTEMENT PRIMARY KEY (id_departement)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: ELEMENT
    ------------------------------------------------------------
    CREATE TABLE public.ELEMENT(
    	id_passage            INT  NOT NULL ,
    	id_point              INT  NOT NULL ,
    	id_transect_PASSAGE   INT  NOT NULL ,
    	id_transect_POINT     INT  NOT NULL ,
    	id_element            SERIAL NOT NULL ,
    	geometrie             VARCHAR (25) NOT NULL ,
    	id_espece             INT  NOT NULL ,
    	CONSTRAINT PK_constraint_ELEMENT PRIMARY KEY (id_passage,id_point,id_transect_PASSAGE,id_transect_POINT,id_element)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: TYPE_ELEMENT
    ------------------------------------------------------------
    CREATE TABLE public.TYPE_ELEMENT(
    	id_element        SERIAL NOT NULL ,
    	code_element      INT  NOT NULL ,
    	libelle_element   INT   ,
    	CONSTRAINT PK_constraint_TYPE_ELEMENT PRIMARY KEY (id_element)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: PASSAGE_POINT
    ------------------------------------------------------------
    CREATE TABLE public.PASSAGE_POINT(
    	id_passage            INT  NOT NULL ,
    	id_point              INT  NOT NULL ,
    	id_transect_PASSAGE   INT  NOT NULL ,
    	id_transect_POINT     INT  NOT NULL ,
    	heure_passage         TIMETZ  NOT NULL ,
    	CONSTRAINT PK_constraint_PASSAGE_POINT PRIMARY KEY (id_passage,id_point,id_transect_PASSAGE,id_transect_POINT)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: EST_AFFECTE
    ------------------------------------------------------------
    CREATE TABLE public.EST_AFFECTE(
    	id_structure     INT  NOT NULL ,
    	id_technicien    INT  NOT NULL ,
    	date_structure   DATE   ,
    	CONSTRAINT PK_constraint_EST_AFFECTE PRIMARY KEY (id_structure,id_technicien)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: INVENTORIE
    ------------------------------------------------------------
    CREATE TABLE public.INVENTORIE(
    	id_transect_PASSAGE   INT  NOT NULL ,
    	id_passage            INT  NOT NULL ,
    	id_technicien         INT  NOT NULL ,
    	CONSTRAINT PK_constraint_INVENTORIE PRIMARY KEY (id_transect_PASSAGE,id_passage,id_technicien)
    )WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table: TYPER
    ------------------------------------------------------------
    CREATE TABLE public.TYPER(
    	id_passage_ELEMENT            INT  NOT NULL ,
    	id_point_ELEMENT              INT  NOT NULL ,
    	id_transect_PASSAGE_ELEMENT   INT  NOT NULL ,
    	id_transect_POINT_ELEMENT     INT  NOT NULL ,
    	id_element                    INT  NOT NULL ,
    	id_element_TYPE_ELEMENT       INT  NOT NULL ,
    	CONSTRAINT PK_constraint_TYPER PRIMARY KEY (id_passage_ELEMENT,id_point_ELEMENT,id_transect_PASSAGE_ELEMENT,id_transect_POINT_ELEMENT,id_element,id_element_TYPE_ELEMENT)
    )WITHOUT OIDS;
     
     
     
     
    ALTER TABLE public.POINT
    	 ADD CONSTRAINT FK_POINT_id_transect
    	 FOREIGN KEY (id_transect)
    	 REFERENCES public.TRANSECT(id_transect);
     
    ALTER TABLE public.PASSAGE
    	 ADD CONSTRAINT FK_PASSAGE_id_transect
    	 FOREIGN KEY (id_transect)
    	 REFERENCES public.TRANSECT(id_transect);
     
    ALTER TABLE public.PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_transect_POINT
    	 FOREIGN KEY (id_transect_POINT)
    	 REFERENCES public.POINT(id_transect);
     
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_transect_POINT
    	 FOREIGN KEY (id_transect_POINT)
    	 REFERENCES public.PASSAGE_POINT(id_transect_POINT);
     
    ALTER TABLE public.PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_transect_PASSAGE
    	 FOREIGN KEY (id_transect_PASSAGE)
    	 REFERENCES public.PASSAGE(id_transect);
     
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_transect_PASSAGE
    	 FOREIGN KEY (id_transect_PASSAGE)
    	 REFERENCES public.PASSAGE_POINT(id_transect_PASSAGE);
     
    ALTER TABLE public.PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_point
    	 FOREIGN KEY (id_point)
    	 REFERENCES public.POINT(id_point);
     
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_point
    	 FOREIGN KEY (id_point)
    	 REFERENCES public.PASSAGE_POINT(id_point);
     
    ALTER TABLE public.PASSAGE_POINT
    	 ADD CONSTRAINT FK_PASSAGE_POINT_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES public.PASSAGE(id_passage);
     
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES public.PASSAGE_POINT(id_passage);
     
    ALTER TABLE public.EST_AFFECTE
    	 ADD CONSTRAINT FK_EST_AFFECTE_id_structure
    	 FOREIGN KEY (id_structure)
    	 REFERENCES public.STRUCTURE(id_structure);
     
    ALTER TABLE public.EST_AFFECTE
    	 ADD CONSTRAINT FK_EST_AFFECTE_id_technicien
    	 FOREIGN KEY (id_technicien)
    	 REFERENCES public.TECHNICIEN(id_technicien);
     
    ALTER TABLE public.INVENTORIE
    	 ADD CONSTRAINT FK_INVENTORIE_id_transect_PASSAGE
    	 FOREIGN KEY (id_transect_PASSAGE)
    	 REFERENCES public.PASSAGE(id_transect);
     
    ALTER TABLE public.INVENTORIE
    	 ADD CONSTRAINT FK_INVENTORIE_id_passage
    	 FOREIGN KEY (id_passage)
    	 REFERENCES public.PASSAGE(id_passage);
     
    ALTER TABLE public.INVENTORIE
    	 ADD CONSTRAINT FK_INVENTORIE_id_technicien
    	 FOREIGN KEY (id_technicien)
    	 REFERENCES public.TECHNICIEN(id_technicien);
     
    ALTER TABLE public.ESPECE
    	 ADD CONSTRAINT FK_ESPECE_cd_nom_REF_TAXREF
    	 FOREIGN KEY (cd_nom_REF_TAXREF)
    	 REFERENCES public.REF_TAXREF(cd_nom);
     
    ALTER TABLE public.PASSAGE
    	 ADD CONSTRAINT FK_PASSAGE_id_protocole
    	 FOREIGN KEY (id_protocole)
    	 REFERENCES public.PROTOCOLE(id_protocole);
     
    ALTER TABLE public.TRANSECT
    	 ADD CONSTRAINT FK_TRANSECT_id_departement_REF_DEPARTEMENT
    	 FOREIGN KEY (id_departement_REF_DEPARTEMENT)
    	 REFERENCES public.REF_DEPARTEMENT(id_departement);
     
    ALTER TABLE public.ELEMENT
    	 ADD CONSTRAINT FK_ELEMENT_id_espece
    	 FOREIGN KEY (id_espece)
    	 REFERENCES public.ESPECE(id_espece);
     
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_passage_ELEMENT
    	 FOREIGN KEY (id_passage_ELEMENT)
    	 REFERENCES public.ELEMENT(id_passage);
     
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_point_ELEMENT
    	 FOREIGN KEY (id_point_ELEMENT)
    	 REFERENCES public.ELEMENT(id_point);
     
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_transect_PASSAGE_ELEMENT
    	 FOREIGN KEY (id_transect_PASSAGE_ELEMENT)
    	 REFERENCES public.ELEMENT(id_transect_PASSAGE);
     
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_transect_POINT_ELEMENT
    	 FOREIGN KEY (id_transect_POINT_ELEMENT)
    	 REFERENCES public.ELEMENT(id_transect_POINT);
     
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_element
    	 FOREIGN KEY (id_element)
    	 REFERENCES public.ELEMENT(id_element);
     
    ALTER TABLE public.TYPER
    	 ADD CONSTRAINT FK_TYPER_id_element_TYPE_ELEMENT
    	 FOREIGN KEY (id_element_TYPE_ELEMENT)
    	 REFERENCES public.TYPE_ELEMENT(id_element);

  13. #53
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 29
    Points : 43
    Points
    43
    Par défaut
    Quand j'essai de lancer mon script dans Postgresql pour créer ma table, il me met ce message d'erreur: "ERREUR: il n'existe aucune contrainte unique correspondant aux clés données pour la
    table « point » référencée
    "
    D'autre part, connaissez vous le moyen de définir le nom du schéma (autre que le "public" définit par défaut)?

    MErci à vous!

  14. #54
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Salve Alex,

    Le MCD est OK.

    Le MLD est correct du seul point de vue de la modélisation, à ceci près que dans certaines tables, des clés étrangères ne sont pas nommées (EST_AFFECTE, INVENTORIE, PASSAGE, POINT, PASSAGE_POINT, ELEMENT, TYPER) : je viens de le signaler à rabDev, à lui de faire le nécessaire. Cela dit, je rappelle que dans votre cas il existe la fameuse contrainte (dite de chemin ou d’égalité) :

    Citation Envoyé par fsmrel Voir le message

    Si le point <PT1> appartient au transect <TR1> et si le passage <PA1> est constitutif de ce transect <TR1>, alors le passage-point <PT1, PA1> ne peut faire référence qu’à un seul transect, à savoir <TR1>.
    Donc dans le MLD, les attributs id_transect_passage et id_transect_point DE LA TABLE PASSAGE_POINT doivent être remplacés par le seul attribut id_transect, lequel doit impérativement figurer en tête de la clé primaire, pour être en accord avec la clé primaire de POINT et celle de PASSAGE, sinon bonjour les dégâts. Cette modification doit évidemment être répercutée sur les tables ELEMENT et TYPER.


    Citation Envoyé par AlexandreR31 Voir le message
    connaissez vous le moyen de définir le nom du schéma (autre que le "public" défini par défaut) ?
    Yes ! Pour être autonome, dans un 1er temps j’ai créé ma propre base de données, en utilisant le browser de pgAdmin. Ainsi, pour créer la base de données "mabase", par clic droit sur "Databases" :


    De la même façon, pour créer le schéma "monschema" :



    C’est ainsi que je me suis créé une base "fsmrel" puis un schéma "alex" dans cette base :



    Pour utiliser le schéma "alex", en début du script il suffit d’ajouter l’instruction :

    Set Schema 'alex' ;

    En conséquence, au lieu de coder :

    CREATE TABLE public.matable

    On code :

    CREATE TABLE matable

    Pour effectuer des tests sans avoir à supprimer la table manuellement, vous pouvez faire précéder la création d’une suppression :

    DROP TABLE IF EXISTS matable CASCADE ;

    Où le mot clé CASCADE indique à PostgreSQL qu’il peut supprimer les objets attachés à "matable" : (vues, triggers, fonctions...)


    Toujours en début de script, vous pouvez coder :

    SET default_with_oids = false ;

    Ceci vous permet de supprimer sous les « WITHOUT OIDS » (qui est du reste l’option par défaut, les OID étant plutôt utiilisés pour les tables du catalogue relationnel (la métabase).


    Citation Envoyé par AlexandreR31 Voir le message
    Quand j'essaie de lancer mon script dans PostgreSQL pour créer ma table, il me met ce message d'erreur: "ERREUR: il n'existe aucune contrainte unique correspondant aux clés données pour la
    table « point » référencée
    ".
    Et il a raison le bougre !

    La clé primaire de la table POINT a pour clé primaire la paire {id_transect, id_point} :

    CREATE TABLE public.POINT(
          id_transect   INT  NOT NULL ,
          id_point      SERIAL NOT NULL ,
          no_point      INT2  NOT NULL ,
          geometrie     VARCHAR (25) NOT NULL ,
        CONSTRAINT PK_constraint_POINT PRIMARY KEY (id_transect, id_point)
    )WITHOUT OIDS;
    
    La clé étrangère hébergée par la table PASSAGE_POINT doit donc être elle aussi la paire {id_transect, id_point} ;

    Malheureusement, comme je l’ai déjà signalé, JMerise se plante en cassant cette clé étrangère en deux :

    ALTER TABLE public.PASSAGE_POINT
           ADD CONSTRAINT FK_PASSAGE_POINT_id_transect_POINT
           FOREIGN KEY (id_transect_POINT)
           REFERENCES public.POINT(id_transect);
    
    ALTER TABLE public.PASSAGE_POINT
          ADD CONSTRAINT FK_PASSAGE_POINT_id_point
          FOREIGN KEY (id_point)
          REFERENCES public.POINT(id_point);
    
    Il faudra attendre la livraison de la 5.0 (fin avril, début mai, dixit rabDev) pour que cette erreur soit corrigée. Dans son message, notez qu’il vous a soigné...

    S’il y a urgence, je vous transmettrai un script corrigé (il y a quand même un peu de boulot...).
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  15. #55
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 29
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Merci fsmrel pour vos remarques et retours... mais je finis par être perdu avec les différents outils, ce qu'ils oublient, etc.
    Je suis entrain de me demander si à force, je ne gagnerais pas mon temps à le faire manuellement dans Postgresql?
    Comme je disais, BD-Main ou Workbench ont l'air pas mal, mais pas forcément évidents à prendre en main et à chaque nouveau tests, il faut tout retaper!

    Concernant l'ajout dans postgresql, je le testais directement depuis JMerise, mais ça me le mettait directement dans le schéma public... je pensais qu'on pouvait configurer le schéma depuis JMerise! Mais pas de soucis pour passer par le script.

    Bonne journée.

  16. #56
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par AlexandreR31 Voir le message
    Comme je disais, BD-Main ou Workbench ont l'air pas mal, mais pas forcément évidents à prendre en main et à chaque nouveau tests, il faut tout retaper!
    On n’a pas à tout retaper !

    DB-MAIN et MySQL Workbench permettent de faire de la rétro-conception, c'est-à-dire qu’ils analysent le script SQL et en font un MLD. Pour sa part, DB-MAIN sait transformer le MLD en MCD (ou en diagramme de classes UML).

    pour MySQL Workbench, voyez ici. Quant à DB-MAIN, j’avais prévu de rédiger un billet à ce sujet, mais c’est resté dans un tiroir...

    Dans votre cas, on pourra se contenter de retoucher le code pondu par JMerise.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  17. #57
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2018
    Messages : 29
    Points : 43
    Points
    43
    Par défaut
    Hum... en voilà quelques heures perdues à refaire les schémas que j'aurais pu économiser!
    Merci!
    voici donc ce que ça donne dans MySql Workbench
    Nom : MCD_AppliBota_workbench.PNG
Affichages : 834
Taille : 95,9 Ko
    et le script:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    -- MySQL Script generated by MySQL Workbench
    -- Thu Apr 12 15:51:42 2018
    -- Model: New Model    Version: 1.0
    -- MySQL Workbench Forward Engineering
     
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
     
    -- -----------------------------------------------------
    -- Schema mydb
    -- -----------------------------------------------------
     
    -- -----------------------------------------------------
    -- Schema mydb
    -- -----------------------------------------------------
    CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
    USE `mydb` ;
     
    -- -----------------------------------------------------
    -- Table `mydb`.`TECHNICIEN`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`TECHNICIEN` (
      `id_technicien` INT NOT NULL AUTO_INCREMENT,
      `nom_technicien` VARCHAR(50) NOT NULL,
      `prenom_technicien` VARCHAR(50) NOT NULL,
      `email` VARCHAR(25) NULL DEFAULT NULL,
      `cd_poste` VARCHAR(50) NOT NULL,
      `actif` TINYINT NOT NULL,
      `code_technicien` INT NOT NULL,
      PRIMARY KEY (`id_technicien`),
      UNIQUE INDEX ( ASC))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`STRUCTURE`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`STRUCTURE` (
      `id_structure` INT NOT NULL AUTO_INCREMENT,
      `abreviation_structure` VARCHAR(25) NULL DEFAULT NULL,
      `nom_structure` VARCHAR(100) NOT NULL,
      PRIMARY KEY (`id_structure`),
      UNIQUE INDEX ( ASC))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`REF_DEPARTEMENT`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`REF_DEPARTEMENT` (
      `id_departement` INT NOT NULL AUTO_INCREMENT,
      `libelle_dpt` VARCHAR(25) NULL DEFAULT NULL,
      `Cd_departement` VARCHAR(25) NOT NULL,
      `insee_dpt` INT NOT NULL,
      PRIMARY KEY (`id_departement`),
      UNIQUE INDEX ( ASC, `insee_dpt` ASC))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`TRANSECT`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`TRANSECT` (
      `id_transect` INT NOT NULL AUTO_INCREMENT,
      `cd_transect` SMALLINT NOT NULL,
      `id_departement_REF_DEPARTEMENT` INT NOT NULL,
      PRIMARY KEY (`id_transect`),
      UNIQUE INDEX ( ASC),
      INDEX `FK_TRANSECT_REF_DEPARTEMENT` (`id_departement_REF_DEPARTEMENT` ASC),
      CONSTRAINT `FK_TRANSECT_REF_DEPARTEMENT`
        FOREIGN KEY (`id_departement_REF_DEPARTEMENT`)
        REFERENCES `mydb`.`REF_DEPARTEMENT` (`id_departement`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`POINT`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`POINT` (
      `id_transect` INT NOT NULL,
      `id_point` INT NOT NULL AUTO_INCREMENT,
      `no_point` SMALLINT NOT NULL,
      `geometrie` GEOMETRY NOT NULL,
      PRIMARY KEY (`id_transect`, `id_point`),
      CONSTRAINT `FK_POINT_TRANSECT`
        FOREIGN KEY (`id_transect`)
        REFERENCES `mydb`.`TRANSECT` (`id_transect`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`REF_TAXREF`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`REF_TAXREF` (
      `cd_nom` INT NOT NULL,
      `nom_espece` VARCHAR(50) NOT NULL,
      PRIMARY KEY (`cd_nom`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`ESPECE`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`ESPECE` (
      `id_espece` INT NOT NULL AUTO_INCREMENT,
      `cd_nom_REF_TAXREF` INT NULL DEFAULT NULL,
      PRIMARY KEY (`id_espece`),
      INDEX `FK_ESPECE_REF_TAXREF` (`cd_nom_REF_TAXREF` ASC),
      CONSTRAINT `FK_ESPECE_REF_TAXREF`
        FOREIGN KEY (`cd_nom_REF_TAXREF`)
        REFERENCES `mydb`.`REF_TAXREF` (`cd_nom`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`PROTOCOLE`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`PROTOCOLE` (
      `id_protocole` INT NOT NULL AUTO_INCREMENT,
      `libelle` VARCHAR(25) NULL DEFAULT NULL,
      PRIMARY KEY (`id_protocole`),
      UNIQUE INDEX ( ASC))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`PASSAGE`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`PASSAGE` (
      `id_transect` INT NOT NULL,
      `id_passage` INT NOT NULL AUTO_INCREMENT,
      `date_passage` DATE NOT NULL,
      `validation` TINYINT NULL DEFAULT NULL,
      `date_validation` DATE NULL DEFAULT NULL,
      `id_protocole` INT NOT NULL,
      PRIMARY KEY (`id_transect`, `id_passage`),
      INDEX `FK_PASSAGE_PROTOCOLE` (`id_protocole` ASC),
      CONSTRAINT `FK_PASSAGE_TRANSECT`
        FOREIGN KEY (`id_transect`)
        REFERENCES `mydb`.`TRANSECT` (`id_transect`),
      CONSTRAINT `FK_PASSAGE_PROTOCOLE`
        FOREIGN KEY (`id_protocole`)
        REFERENCES `mydb`.`PROTOCOLE` (`id_protocole`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`PASSAGE_POINT`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`PASSAGE_POINT` (
      `id_transect_PASSAGE` INT NOT NULL,
      `id_transect_POINT` INT NOT NULL,
      `id_point` INT NOT NULL,
      `id_passage` INT NOT NULL,
      `heure_passage` TIME NOT NULL,
      PRIMARY KEY (`id_transect_PASSAGE`, `id_transect_POINT`, `id_point`, `id_passage`),
      INDEX `FK_PASSAGE_POINT_PASSAGE` (`id_passage` ASC, `id_transect_PASSAGE` ASC),
      INDEX `FK_PASSAGE_POINT_POINT` (`id_point` ASC, `id_transect_POINT` ASC),
      CONSTRAINT `FK_PASSAGE_POINT_PASSAGE`
        FOREIGN KEY (`id_passage` , `id_transect_PASSAGE`)
        REFERENCES `mydb`.`PASSAGE` (`id_passage` , `id_transect`),
      CONSTRAINT `FK_PASSAGE_POINT_POINT`
        FOREIGN KEY (`id_point` , `id_transect_POINT`)
        REFERENCES `mydb`.`POINT` (`id_point` , `id_transect`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`ELEMENT`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`ELEMENT` (
      `id_transect_PASSAGE` INT NOT NULL,
      `id_transect_POINT` INT NOT NULL,
      `id_point` INT NOT NULL,
      `id_passage` INT NOT NULL,
      `id_element` INT NOT NULL AUTO_INCREMENT,
      `geometrie` GEOMETRY NOT NULL,
      `id_espece` INT NOT NULL,
      PRIMARY KEY (`id_transect_PASSAGE`, `id_transect_POINT`, `id_point`, `id_passage`, `id_element`),
      INDEX `FK_ELEMENT_PASSAGE_POINT` (`id_passage` ASC, `id_point` ASC, `id_transect_POINT` ASC, `id_transect_PASSAGE` ASC),
      INDEX `FK_ELEMENT_ESPECE` (`id_espece` ASC),
      CONSTRAINT `FK_ELEMENT_PASSAGE_POINT`
        FOREIGN KEY (`id_passage` , `id_point` , `id_transect_POINT` , `id_transect_PASSAGE`)
        REFERENCES `mydb`.`PASSAGE_POINT` (`id_passage` , `id_point` , `id_transect_POINT` , `id_transect_PASSAGE`),
      CONSTRAINT `FK_ELEMENT_ESPECE`
        FOREIGN KEY (`id_espece`)
        REFERENCES `mydb`.`ESPECE` (`id_espece`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`TYPE_ELEMENT`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`TYPE_ELEMENT` (
      `id_element` INT NOT NULL AUTO_INCREMENT,
      `code_element` INT NOT NULL,
      `libelle_element` INT NULL DEFAULT NULL,
      PRIMARY KEY (`id_element`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`EST_AFFECTE`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`EST_AFFECTE` (
      `id_structure` INT NOT NULL,
      `id_technicien` INT NOT NULL,
      `date_structure` DATE NULL DEFAULT NULL,
      PRIMARY KEY (`id_structure`, `id_technicien`),
      INDEX `FK_EST_AFFECTE_TECHNICIEN` (`id_technicien` ASC),
      CONSTRAINT `FK_EST_AFFECTE_STRUCTURE`
        FOREIGN KEY (`id_structure`)
        REFERENCES `mydb`.`STRUCTURE` (`id_structure`),
      CONSTRAINT `FK_EST_AFFECTE_TECHNICIEN`
        FOREIGN KEY (`id_technicien`)
        REFERENCES `mydb`.`TECHNICIEN` (`id_technicien`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`INVENTORIE`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`INVENTORIE` (
      `id_transect_PASSAGE` INT NOT NULL,
      `id_passage` INT NOT NULL,
      `id_technicien` INT NOT NULL,
      PRIMARY KEY (`id_transect_PASSAGE`, `id_passage`, `id_technicien`),
      INDEX `FK_INVENTORIE_TECHNICIEN` (`id_technicien` ASC),
      CONSTRAINT `FK_INVENTORIE_PASSAGE`
        FOREIGN KEY (`id_transect_PASSAGE` , `id_passage`)
        REFERENCES `mydb`.`PASSAGE` (`id_transect` , `id_passage`),
      CONSTRAINT `FK_INVENTORIE_TECHNICIEN`
        FOREIGN KEY (`id_technicien`)
        REFERENCES `mydb`.`TECHNICIEN` (`id_technicien`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`TYPER`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`TYPER` (
      `id_transect_PASSAGE_ELEMENT` INT NOT NULL,
      `id_transect_POINT_ELEMENT` INT NOT NULL,
      `id_point_ELEMENT` INT NOT NULL,
      `id_passage_ELEMENT` INT NOT NULL,
      `id_element` INT NOT NULL,
      `id_element_TYPE_ELEMENT` INT NOT NULL,
      PRIMARY KEY (`id_transect_PASSAGE_ELEMENT`, `id_transect_POINT_ELEMENT`, `id_point_ELEMENT`, `id_passage_ELEMENT`, `id_element`, `id_element_TYPE_ELEMENT`),
      INDEX `FK_TYPER_TYPE_ELEMENT` (`id_element_TYPE_ELEMENT` ASC),
      CONSTRAINT `FK_TYPER_ELEMENT`
        FOREIGN KEY (`id_transect_PASSAGE_ELEMENT` , `id_transect_POINT_ELEMENT` , `id_point_ELEMENT` , `id_passage_ELEMENT` , `id_element`)
        REFERENCES `mydb`.`ELEMENT` (`id_transect_PASSAGE` , `id_transect_POINT` , `id_point` , `id_passage` , `id_element`),
      CONSTRAINT `FK_TYPER_TYPE_ELEMENT`
        FOREIGN KEY (`id_element_TYPE_ELEMENT`)
        REFERENCES `mydb`.`TYPE_ELEMENT` (`id_element`))
    ENGINE = InnoDB;
     
     
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
    Et donc il faut enlever les InnoDB pour insérer dans postgres?

  18. #58
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir Alex,


    Citation Envoyé par AlexandreR31 Voir le message
    Hum... en voilà quelques heures perdues à refaire les schémas que j'aurais pu économiser!
    Ben oui ! Mais bon, ça permet aussi de se former...


    Citation Envoyé par AlexandreR31 Voir le message
    Et donc il faut enlever les InnoDB pour insérer dans PostgreSQL?
    Oui, InnoDB est un moteur utilisé par MySQL et dont PostgreSQL n’a que faire.

    Pour chaque ligne ENGINE = InnoDB;Vous ne conservez que le « ; ».

    Vous supprimez tous les caractères « ` », c’est de la cuisine purement MySQL. Notepad++ m’en a viré 546 d’un coup...

    J’ai effectué une rétro-conception MySQL en aveugle à partir de votre script SQL : les lignes UNIQUE INDEX ( ASC) n’ont pas plu, car les « ASC » non précédés d’un nom de colonne, MySQL n’aime pas, et il a raison, il se dit : mais qu’indexe-t-on ?

    Avant de lancer la rétro-conception, j’ai viré tous les « mydb. ». J’ai renommé le schéma « mydb » en » alex », car je ne veux rien mélanger, chacun chez soi.

    J’ai observé la présence de NULL, et ça vaut ...

    Les attributs suivants n’ont aucune raison a priori de pouvoir être marqués NULL :

    – abreviation_structure (table STRUCTURE) et qui devrait être un point d’entrée pour l’utilisateur, donc faire l’objet d’une clé candidate (UQ dans le cas de MySQL Workbench).

    – date_structure (table EST_AFFECTE).

    – libelle (table PROTOCOLE).

    – libelle_dpt (table REF_DEPARTEMENT).

    J’ai déjà évoqué le cas de l’attribut email (table TECHNICIEN) : pour ma part, je dis NOT NULL et valeur par défaut = '' (chaîne vide) automatique pour les techniciens sans adresse de courriel.

    Le cas des attributs validation et date_validation (table PASSAGE) est plus subtil et on en a déjà parlé dans le post #26 et suivants.
    Réflexion faite, pour travailler proprement, il est préférable de mettre en oeuvre une table dédiée, appelons-la PASSAGE_VALIDE, ayant la structure suivante :



    Seuls les passages validés figureront dans la table PASSAGE_VALIDE. Vous noterez qu’une occurrence de PASSAGE_VALIDE fait référence à au moins et au plus une occurrence de PASSAGE, et qu’une occurrence de PASSAGE fait optionnellement référence à une occurrence de PASSAGE_VALIDE (injection).


    Il faut définir une clé candidate {id_transect, no_point} pour la table POINT, sinon un transect pourrait avoir plus d’une fois le même numéro. Dans le code SQL PostgreSQL, il faudra ajouter la contrainte CHECK (no_point BETWEEN 1 AND 10).

    Structure de la table PASSAGE_POINT : comme je l’ai déjà signalé, les attributs id_transect_POINT et id_transect_PASSAGE ne doivent faire qu’un (conséquence de la contrainte de chemin), voyez le diagramme MySQL Workbench du post #34. Sinon, on peut affecter les points et les passages d’un transect à d’autres transects, l’horreur...

    En toute logique, les attributs id_element, code_element et libelle_element de la table TYPE_ELEMENT devraient être respectivement renommés en id_type_element, code_type_element et libelle_type_element, sinon quelque chose coince, la table TYPE_ELEMENT ne parle que des types d’éléments mais pas des éléments. Le singleton {code_type_element} doit être clé candidate de cette table.

    L’association entre les tables ESPECE et REF_TAXREF est facultative (cardinalité 0,1) et doit donc être faite via une table intermédiaire ESPECE_TAXREF (ou tout autre nom) : à défaut, NULL viendra polluer la table ESPECE.

    PostgreSQL à lui tout seul ne connaît pas le type GEOMETRY : pour mes tests, je remplace par VARCHAR.

    Je vais regarder ce qu'il me dit pour le script que je suis en train de pondre...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  19. #59
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Et voilà un script : PostgreSQL n’a pas trouvé d’erreur ; j'espère ne pas m'être planté dans mon copier/coller...

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
     
    -- -----------------------------------------------------
    -- Schema alex
    -- -----------------------------------------------------
    SET SCHEMA 'alex' ; 
     
    -- ------------------------------------------
    --
    ---------------------------------------------
    DROP TABLE IF EXISTS ESPECE_TAXTREF CASCADE ;
    DROP TABLE IF EXISTS TYPER CASCADE ;
    DROP TABLE IF EXISTS ELEMENT CASCADE ;
    DROP TABLE IF EXISTS TYPE_ELEMENT CASCADE ;
    DROP TABLE IF EXISTS ESPECE CASCADE ;
    DROP TABLE IF EXISTS REF_TAXREF CASCADE ;
    DROP TABLE IF EXISTS PASSAGE_POINT CASCADE ;
    DROP TABLE IF EXISTS EST_AFFECTE CASCADE ;
    DROP TABLE IF EXISTS INVENTORIE CASCADE ;
    DROP TABLE IF EXISTS PASSAGE_VALIDE CASCADE ;
    DROP TABLE IF EXISTS PASSAGE CASCADE ;
    DROP TABLE IF EXISTS PROTOCOLE CASCADE ;
    DROP TABLE IF EXISTS POINT CASCADE ;
    DROP TABLE IF EXISTS TRANSECT CASCADE ;
    DROP TABLE IF EXISTS TECHNICIEN CASCADE ;
    DROP TABLE IF EXISTS STRUCTURE CASCADE ;
    DROP TABLE IF EXISTS REF_DEPARTEMENT CASCADE ;
     
    -- -----------------------------------------------------
    -- Table STRUCTURE
    -- -----------------------------------------------------
    CREATE TABLE STRUCTURE 
    (
      id_structure SERIAL NOT NULL,
      abreviation_structure VARCHAR(25) NOT NULL,
      nom_structure VARCHAR(100) NOT NULL,
      CONSTRAINT STRUCTURE_PK PRIMARY KEY (id_structure),
      CONSTRAINT STRUCTURE_AK UNIQUE (abreviation_structure)
    );
     
    -- -----------------------------------------------------
    -- Table TECHNICIEN
    -- -----------------------------------------------------
    CREATE TABLE TECHNICIEN 
    (
      id_technicien SERIAL NOT NULL,
      code_technicien INT NOT NULL,
      nom_technicien VARCHAR(50) NOT NULL,
      prenom_technicien VARCHAR(50) NOT NULL,
      email VARCHAR(25) NOT NULL DEFAULT '',
      cd_poste VARCHAR(50) NOT NULL,
      actif SMALLINT   NOT NULL,
      CONSTRAINT TECHNICIEN_PK PRIMARY KEY (id_technicien),
      CONSTRAINT TECHNICIEN_AK UNIQUE (code_technicien)
    );
     
    -- -----------------------------------------------------
    -- Table EST_AFFECTE
    -- -----------------------------------------------------
    CREATE TABLE EST_AFFECTE 
    (
      id_structure INT NOT NULL,
      id_technicien INT NOT NULL,
      date_structure DATE NOT NULL,
      CONSTRAINT EST_AFFECTE_PK PRIMARY KEY (id_technicien, id_structure),
      CONSTRAINT EST_AFFECTE_STRUCTURE_FK
        FOREIGN KEY (id_structure)
        REFERENCES STRUCTURE (id_structure)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT EST_AFFECTE_TECHNICIEN_FK
        FOREIGN KEY (id_technicien)
        REFERENCES TECHNICIEN (id_technicien)
        ON DELETE CASCADE
        ON UPDATE CASCADE
    );
     
    -- -----------------------------------------------------
    -- Table TYPE_ELEMENT
    -- -----------------------------------------------------
    CREATE TABLE TYPE_ELEMENT 
    (
      id_type_element SERIAL NOT NULL,
      code_type_element INT NOT NULL,
      libelle_type_element INT NOT NULL,
      CONSTRAINT TYPE_ELEMENT_PK PRIMARY KEY (id_type_element),
      CONSTRAINT TYPE_ELEMENT_AK UNIQUE (code_type_element)
    );
    -- -----------------------------------------------------
    -- Table REF_TAXREF
    -- -----------------------------------------------------
    CREATE TABLE REF_TAXREF 
    (
      cd_nom INT NOT NULL,
      nom_espece VARCHAR(50) NOT NULL,
      CONSTRAINT REF_TAXREF_PK PRIMARY KEY (cd_nom)
    );
     
    -- -----------------------------------------------------
    -- Table ESPECE
    -- -----------------------------------------------------
    CREATE TABLE ESPECE 
    (
      id_espece SERIAL NOT NULL,
      CONSTRAINT ESPECE_PK PRIMARY KEY (id_espece)
    );
     
    -- -----------------------------------------------------
    -- Table ESPECE_TAXTREF
    -- -----------------------------------------------------
    CREATE TABLE ESPECE_TAXTREF 
    (
      id_espece INT NOT NULL,
      cd_nom INT NOT NULL,
      CONSTRAINT ESPECE_TAXTREF_PK PRIMARY KEY (id_espece),
      CONSTRAINT ESPECE_TAXTREF_ESPECE_FK
        FOREIGN KEY (id_espece)
        REFERENCES ESPECE (id_espece)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT ESPECE_TAXTREF_REF_TAXREF_FK
        FOREIGN KEY (cd_nom)
        REFERENCES REF_TAXREF (cd_nom)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
    ) ;
     
    -- -----------------------------------------------------
    -- Table REF_DEPARTEMENT
    -- -----------------------------------------------------
    CREATE TABLE REF_DEPARTEMENT 
    (
      id_departement SERIAL NOT NULL,
      libelle_dpt VARCHAR(25) NOT NULL,
      Cd_departement VARCHAR(5) NOT NULL,
      insee_dpt INT NOT NULL,
      CONSTRAINT REF_DEPARTEMENT_PK PRIMARY KEY (id_departement)
      , CONSTRAINT REF_DEPARTEMENT_AK1 UNIQUE (Cd_departement)
      , CONSTRAINT REF_DEPARTEMENT_AK2 UNIQUE (insee_dpt)
    );
     
    -- -----------------------------------------------------
    -- Table PROTOCOLE
    -- -----------------------------------------------------
    CREATE TABLE PROTOCOLE 
    (
      id_protocole SERIAL NOT NULL,
      libelle_protocole VARCHAR(25) NOT NULL,
      CONSTRAINT PROTOCOLE_PK PRIMARY KEY (id_protocole)
    );
     
    -- -----------------------------------------------------
    -- Table TRANSECT
    -- -----------------------------------------------------
    CREATE TABLE TRANSECT 
    (
      id_transect INT NOT NULL,
      cd_transect SMALLINT NOT NULL,
      id_departement INT NOT NULL,
      CONSTRAINT TRANSECT_PK PRIMARY KEY (id_transect),
      CONSTRAINT TRANSECT_AK UNIQUE (cd_transect),
      CONSTRAINT TRANSECT_REF_DEPARTEMENT_FK
        FOREIGN KEY (id_departement)
        REFERENCES REF_DEPARTEMENT (id_departement)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
    );
     
    -- -----------------------------------------------------
    -- Table POINT
    -- -----------------------------------------------------
    CREATE TABLE POINT 
    (
      id_transect INT NOT NULL,
      id_point SERIAL NOT NULL,
      no_point SMALLINT NOT NULL,
      geometrie VARCHAR(32) NOT NULL,
      CONSTRAINT POINT_PK PRIMARY KEY (id_transect, id_point),
      CONSTRAINT POINT_AK UNIQUE (id_transect, no_point),
      CONSTRAINT POINT_TRANSECT_FK
        FOREIGN KEY (id_transect)
        REFERENCES TRANSECT (id_transect)
        ON DELETE CASCADE
        ON UPDATE NO ACTION
    );
     
    -- -----------------------------------------------------
    -- Table PASSAGE
    -- -----------------------------------------------------
    CREATE TABLE PASSAGE 
    (
      id_transect INT NOT NULL,
      id_passage SERIAL NOT NULL,
      date_passage DATE NOT NULL,
      id_protocole INT NOT NULL,
      CONSTRAINT PASSAGE_PK PRIMARY KEY (id_transect, id_passage),
      CONSTRAINT PASSAGE_TRANSECT_FK
        FOREIGN KEY (id_transect)
        REFERENCES TRANSECT (id_transect),
      CONSTRAINT PASSAGE_PROTOCOLE_FK
        FOREIGN KEY (id_protocole)
        REFERENCES PROTOCOLE (id_protocole)
        ON DELETE CASCADE
        ON UPDATE NO ACTION
    );
     
    -- -----------------------------------------------------
    -- Table PASSAGE_VALIDE
    -- -----------------------------------------------------
    CREATE TABLE PASSAGE_VALIDE 
    (
      id_transect INT NOT NULL,
      id_passage INT NOT NULL,
      date_validation DATE NOT NULL,
      CONSTRAINT PASSAGE_VALIDE_PK PRIMARY KEY (id_transect, id_passage),
      CONSTRAINT PASSAGE_VALIDE_PASSAGE_FK
        FOREIGN KEY (id_transect , id_passage)
        REFERENCES PASSAGE (id_transect , id_passage)
        ON DELETE CASCADE
        ON UPDATE CASCADE
    );
     
    -- -----------------------------------------------------
    -- Table PASSAGE_POINT
    -- -----------------------------------------------------
    CREATE TABLE PASSAGE_POINT 
    (
      id_transect INT NOT NULL,
      id_point INT NOT NULL,
      id_passage INT NOT NULL,
      heure_passage TIME NOT NULL,
      CONSTRAINT PASSAGE_POINT_PK PRIMARY KEY (id_transect, id_point, id_passage),
      CONSTRAINT PASSAGE_POINT_PASSAGE_FK
        FOREIGN KEY (id_transect, id_passage)
        REFERENCES PASSAGE (id_transect, id_passage)
         ON DELETE CASCADE
        ON UPDATE NO ACTION,
     CONSTRAINT PASSAGE_POINT_POINT_FK
        FOREIGN KEY (id_transect, id_point)
        REFERENCES POINT (id_transect, id_point)
        ON DELETE CASCADE
        ON UPDATE NO ACTION
    );
     
    -- -----------------------------------------------------
    -- Table ELEMENT
    -- -----------------------------------------------------
    CREATE TABLE ELEMENT 
    (
      id_transect INT NOT NULL,
      id_point INT NOT NULL,
      id_passage INT NOT NULL,
      id_element SERIAL NOT NULL,
      geometrie VARCHAR(32) NOT NULL,
      id_espece INT NOT NULL,
      CONSTRAINT ELEMENT_PK PRIMARY KEY (id_transect, id_point, id_passage, id_element),
      CONSTRAINT ELEMENT_PASSAGE_POINT_FK
        FOREIGN KEY (id_transect, id_point, id_passage)
        REFERENCES PASSAGE_POINT (id_transect, id_point, id_passage)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT ELEMENT_ESPECE_FK
        FOREIGN KEY (id_espece)
        REFERENCES ESPECE (id_espece)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
    );
     
    -- -----------------------------------------------------
    -- Table TYPER
    -- -----------------------------------------------------
    CREATE TABLE TYPER 
    (
      id_transect INT NOT NULL,
      id_point INT NOT NULL,
      id_passage INT NOT NULL,
      id_element INT NOT NULL,
      id_type_element INT NOT NULL,
      CONSTRAINT TYPER_PK PRIMARY KEY (id_transect, id_point, id_passage, id_element, id_type_element),
       CONSTRAINT TYPER_ELEMENT_FK
        FOREIGN KEY (id_transect , id_point , id_passage , id_element)
        REFERENCES ELEMENT (id_transect , id_point , id_passage , id_element)
        ON DELETE CASCADE
        ON UPDATE NO ACTION,
      CONSTRAINT TYPER_TYPE_ELEMENT_FK
        FOREIGN KEY (id_type_element)
        REFERENCES TYPE_ELEMENT (id_type_element)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
    );
     
    -- -----------------------------------------------------
    -- Table INVENTORIE
    -- -----------------------------------------------------
    CREATE TABLE INVENTORIE 
    (
      id_transect INT NOT NULL,
      id_passage INT NOT NULL,
      id_technicien INT NOT NULL,
      CONSTRAINT INVENTORIE_PK PRIMARY KEY (id_transect, id_passage, id_technicien),
      CONSTRAINT INVENTORIE_PASSAGE_FK
        FOREIGN KEY (id_transect , id_passage)
        REFERENCES PASSAGE (id_transect, id_passage)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
      CONSTRAINT FK_INVENTORIE_TECHNICIEN
        FOREIGN KEY (id_technicien)
        REFERENCES TECHNICIEN (id_technicien)
        ON DELETE NO ACTION
        ON UPDATE CASCADE
    );

    Affaire à suivre...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  20. #60
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    J’avais oublié de le fournir, voici en complément, le diagramme obtenu à partir de votre script SQL, avec quelques retouches :



    Cas particulier de la nouvelle table ESPECE_TAXREF, dont le rôle est ici d’empêcher le bonhomme NULL de ficher la patouille dans les clés étrangères :

    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

Discussions similaires

  1. [MCD] validation mcd vidéothèque pour base de données
    Par senv33 dans le forum Schéma
    Réponses: 2
    Dernier message: 13/06/2010, 23h34
  2. MCD pour Base de données
    Par captain28 dans le forum Débuter
    Réponses: 4
    Dernier message: 14/10/2009, 15h56
  3. Réponses: 4
    Dernier message: 06/07/2009, 00h04
  4. Outil pour Base de Données
    Par plutonium719 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/07/2006, 23h22
  5. Meilleur outil pour Base de donnée
    Par aurel89 dans le forum MFC
    Réponses: 3
    Dernier message: 29/08/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo