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

Requêtes MySQL Discussion :

Problème de Conception


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut Problème de Conception
    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
    CREATE TABLE Participant (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        nom VARCHAR(40) NOT NULL,
        prenom VARCHAR(40),
        tlphn  SMALLINT UNSIGNED,
        adresse TEXT,
        date_naissance DATETIME,
        commentaires TEXT,
        certif
        PRIMARY KEY (`id`),
        INDEX ind_prenom (`prenom`),  
        INDEX ind_nom (`nom`),                    
    )
    ENGINE=INNODB;
     
    CREATE TABLE Formaparti (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_formation  INT UNSIGNED NOT NULL ,
        id_participant VARCHAR(40) NOT NULL,
        commentaire,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Formation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_formation VARCHAR(40) NOT NULL,
        commentaire TEXT,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grpparti (
        id_grp VARCHAR(40) NOT NULL,
        id_participant VARCHAR(40) NOT NULL,
        referent (oui non),
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grp (
        id_grp_cat VARCHAR(40) NOT NULL,
        libele_grp,
        PRIMARY KEY (`id_grp_cat`,`libele_grp`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grp_cat (
        libele_grp_cat VARCHAR(40) NOT NULL,
        PRIMARY KEY (`libele_grp_cat`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Qualifparti (
        id_qualif VARCHAR(40) NOT NULL,
        id_participant VARCHAR(40) NOT NULL,
        date_qualif DATE NULL,
        PRIMARY KEY (`id_qualif`,`id_participant`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Qualif (
        libele_qualif VARCHAR(40) NOT NULL,
        PRIMARY KEY (`libele_qualif`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Nivparti (
        id_niveau SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_participant SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        date_niveau DATE NOT NULL,
        verif_niveau DATE NULL,
        PRIMARY KEY (`id_niveau`,`id_participant`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Niveau (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele VARCHAR(40) NOT NULL,
        parametre VARCHAR(50),
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
    J'ai fais le squelette, les id de certains tableaux associatifs je pense en avoir besoin
    mais alors il me faut une primary key sur les autres tableaux ?
    Et le reste j'ai du mal a déterminer ce que je devrai mettre comme type de champ ou si ceux que j'ai choisis vont bien.

    voici le lien du schema de ma base

    merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Bonsoir,
    Bon j'avance quand même malgré les questions sur certaines syntaxe.
    Est ce qu'il a des erreurs ?
    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
    CREATE TABLE Participant (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        nom VARCHAR(40) NOT NULL,
        prenom VARCHAR(40) NOT NULL,
        tlphn  VARCHAR(14) NOT NULL,
        adresse VARCHAR(255) DEFAULT 'non comm',
        date_naissance DATE NULL DEFAULT NULL,
        commentaires VARCHAR(255) DEFAULT 'non comm',
        certif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id`),
        INDEX ind_prenom (`prenom`),  ///////////
        INDEX ind_nom (`nom`)           /////////////         
    )
    ENGINE=INNODB;
     
    CREATE TABLE Formaparti (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_formation  SMALLINT UNSIGNED NOT NULL ,
        id_participant INT UNSIGNED NOT NULL,
        commentaire VARCHAR(255) NULL DEFAULT 'non comm',
        PRIMARY KEY (`id`),
            CONSTRAINT formationformaparti
            FOREIGN KEY (id_formation)
            REFERENCES Formation(id),
            CONSTRAINT formapartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Formation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_formation VARCHAR(50) NOT NULL,
        commentaire  VARCHAR(250) NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grpparti (
        id_grp VARCHAR(40) NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        referent INT UNSIGNED NOT NULL,
        PRIMARY KEY (`id`),
            CONSTRAINT grpgrpparti
            FOREIGN KEY (id_grp)
            REFERENCES Grp(libele_grp),
            CONSTRAINT grppartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT grppartiparti
            FOREIGN KEY (referent)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grp (
        id_grp_cat VARCHAR(40) NOT NULL,
        libele_grp VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id_grp_cat`,`libele_grp`),
            CONSTRAINT grpgrpcat
            FOREIGN KEY (id_grp_cat)
            REFERENCES Grp_cat(libele_grp_cat)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grp_cat (
        libele_grp_cat VARCHAR(40) NOT NULL,
        PRIMARY KEY (`libele_grp_cat`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Qualifparti (
        id_qualif VARCHAR(40) NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        date_qualif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id_qualif`,`id_participant`),
            CONSTRAINT qualifqualifparti
            FOREIGN KEY (id_qualif)
            REFERENCES Qualif(libele_qualif),
            CONSTRAINT qualifpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Qualif (
        libele_qualif VARCHAR(40) NOT NULL,
        PRIMARY KEY (`libele_qualif`)
     
    )
    ENGINE=INNODB;
    voilou je n'ai pas encore fait le reste.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    1) Retire l'id de la table FormParti si c'est une table associative.

    Autrement dit, si un participant ne peut participer qu'une seule fois à une formation, retire l'id. La clé primaire de la table est alors composée des identifiants du participant et de la formation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRIMARY KEY (id_participant, id_formation)
    Pour le cas où ce ne serait pas fait automatiquement par MySQL, il faut aussi indexer id_formation qui est une clé étrangère non indexée naturellement par la clé primaire.

    2) Dans la table Grpparti, ta clé primaire pointe sur une colonne inexistante. Là aussi, comme il s'agit apparemment d'une table associative, la clé primaire doit être composée des identifiants du participant et du groupe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRIMARY KEY (id_participant, id_grp)
    Puisque la colonne referent référence l'identifiant d'un participant, je l'appellerais plutôt id_referent, selon ta manière de nommer les colonnes.

    3) Je ne comprends pas bien la signification de l'ensemble GrpCat, Grp et GrpParti.
    GrpParti est donc, semble t-il, une table précisant que tel participant fait partie de tel groupe mais qu'est-ce donc que cette table GrpCat ?
    En Plus, dans la table Grp, la colonne id_Grp_Cat référence le libelle de GrpCat parce que c'est la seule colonne de la table, ce qui est déjà en soit une mauvaise idée (il devrait y avoir un identifiant pour clé primaire).

    Cette partie est donc à revoir.

    4) Idem pour la partie Qualif et QualifParti.
    Mets un identifiant dans la table Qualif et référence cet identifiant dans la table QualifParti.

    Tu aurais dû passer d'abord par le forum Schéma et nous y proposer ton modèle de données car il y a vraiment des choses à revoir !

    Un point délicat que je soupçonne, c'est une éventuelle association entre les groupes et les formations mais sans les règles de gestion des données, ce n'est qu'une supposition.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Bonjour,
    et un grand MERCI de prêter attention à mon problème (mes problèmes).
    je remet à jour mon code pour la bdd: (il y a toute une nouvelle partie mais schématiquement cela reste identique sauf une ou deux choses que j'ai noté avec une ligne de 'égale(=)' ).
    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
    CREATE TABLE Participant (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        nom VARCHAR(40) NOT NULL,
        prenom VARCHAR(40) NOT NULL,
        tlphn  VARCHAR(14) NOT NULL,
        adresse VARCHAR(255) DEFAULT 'non comm',
        date_naissance DATE NULL DEFAULT NULL,
        commentaires VARCHAR(255) DEFAULT 'non comm',
        certif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id`),
        INDEX ind_prenom (`prenom`),  ///////////
        INDEX ind_nom (`nom`)           /////////////         
    )
    ENGINE=INNODB;
     
    CREATE TABLE Formaparti (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_formation  SMALLINT UNSIGNED NOT NULL ,
        id_participant INT UNSIGNED NOT NULL,
        commentaire VARCHAR(255) NULL DEFAULT 'non comm',
        PRIMARY KEY (`id`),
            CONSTRAINT formationformaparti
            FOREIGN KEY (id_formation)
            REFERENCES Formation(id),
            CONSTRAINT formapartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Formation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_formation VARCHAR(50) NOT NULL,
        commentaire  VARCHAR(250) NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grpparti (
        id_grp VARCHAR(40) NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        referent INT UNSIGNED NOT NULL,
        PRIMARY KEY (`id_participant`,`id_grp`),
            CONSTRAINT grpgrpparti
            FOREIGN KEY (id_grp)
            REFERENCES Grp(libele_grp),
            CONSTRAINT grppartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT grppartiparti
            FOREIGN KEY (referent)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grp (
        id_grp_cat VARCHAR(40) NOT NULL,
        libele_grp VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id_grp_cat`,`libele_grp`),
            CONSTRAINT grpgrpcat
            FOREIGN KEY (id_grp_cat)
            REFERENCES Grp_cat(libele_grp_cat)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grp_cat (
        libele_grp_cat VARCHAR(40) NOT NULL,
        PRIMARY KEY (`libele_grp_cat`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Qualifparti (
        id_qualif VARCHAR(40) NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        date_qualif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id_qualif`,`id_participant`),
            CONSTRAINT qualifqualifparti
            FOREIGN KEY (id_qualif)
            REFERENCES Qualif(libele_qualif),
            CONSTRAINT qualifpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Qualif (
        libele_qualif VARCHAR(40) NOT NULL,
        PRIMARY KEY (`libele_qualif`)
     
    )
    ENGINE=INNODB;
     
    CREATE TABLE Nivparti (
        id_niveau SMALLINT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL ,
        date_niveau DATE DEFAUT 'CURRENT_DATE()',
        verif_niveau DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id_niveau`,`id_participant`),
            CONSTRAINT nivpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT nivpartiniveau
            FOREIGN KEY (id_niveau)
            REFERENCES Niveau(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Niveau (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele VARCHAR(60) NOT NULL,
        parametre VARCHAR(50),
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Fonctparti (
        id_participant INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_fonction VARCHAR(60) NOT NULL,
        PRIMARY KEY (id)
            CONSTRAINT fonctpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT fonctpartifonction
            FOREIGN KEY (id_fonction)
            REFERENCES Fonction(libele_fonction)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Fonction (
        libele_fonction VARCHAR(60) NOT NULL,
        PRIMARY KEY (libele_fonction)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Moyen (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_moyen VARCHAR(70),
        nb_place TINYINT UNSIGNED,
        commentaire VARCHAR(250),
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Fonctmoyen (
        id_fonction VARCHAR(60) NOT NULL,
        id_moyen SMALLINT UNSIGNED NOT NULL,
        PRIMARY KEY (id_fonction,id_moyen),
            CONSTRAINT fonctmoyenfonct
            FOREIGN KEY (id_fonction)
            REFERENCES Fonction(libele_fonction),
            CONSTRAINT fonctmoyenmoyen
            FOREIGN KEY (id_moyen)
            REFERENCES Moyen(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Fonctmoyevenplanparti (
        id_evenplan MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_fonctmoyen,=========================================================
        id_participant INT UNSIGNED NOT NULL AUTO_INCREMENT,
        PRIMARY KEY (id)
            CONSTRAINT fonctmoyevenplanpartievenplan
            FOREIGN KEY (id_evenplan)
            REFERENCES Evenplan(id),
            CONSTRAINT fonctmoyevenplanpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT fonctmoyevenplanpartifonctmoyen
            FOREIGN KEY (id_fonctmoyen)
            REFERENCES Fonctmoyen(id_fonction,id_moyen)===============
    )
    ENGINE=INNODB;
     
    CREATE TABLE Evenplan (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        heure_rdv TIME NOT NULL,
        heure_retour TIME NULL,
        date_rdv DATE NOT NULL,
        commentaire VARCHAR(255) DEFAULT 'no comm',
        site,=======================================================
        status,=====================================================
        nb_place TINYINT UNSIGNED,
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
    alors je vais répondre dans l'ordre:
    5)Merci pour les liens sur les schéma. Effectivement je n'étais pas passé par la et ce n'est pas faute de chercher et lire sur le net des documents.
    Je suis donc entrain de prendre connaissances de tout cela.
    Une question (déjà ! et oui) Quel modéleur de BDD me conseilles tu ? (je bosse sur linux) Je souhaiterai avoir le plus simple d'interface.

    1)
    1) Retire l'id de la table FormParti si c'est une table associative.

    Autrement dit, si un participant ne peut participer qu'une seule fois à une formation, retire l'id. La clé primaire de la table est alors composée des identifiants du participant et de la formation.
    Effectivement je garde cet id car il pourra peut etre participer plusieurs fois à cet évènement.

    Pour le cas où ce ne serait pas fait automatiquement par MySQL, il faut aussi indexer id_formation qui est une clé étrangère non indexée naturellement par la clé primaire.
    J'ai lu que ca se faisait automatiquement, qu'il fallait seulement indexer le champ de reference avec UNIQUE... peux tu confirmer pour que je sois sur:
    il faut que je rajoute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        id_formation  SMALLINT UNSIGNED NOT NULL UNIQUE,
    champ qui est la clé étrangère. et il faut également bien indexer les champs de référence?

    2)oui oui c'est bien ca méa culpa je ne l'avait pas vu...

    3)Donc, je vais me servir de différentes sortes de groupes et grp_cat est la pour que je ne selectionne pas les groupes qui ne m'intéresse pas.
    Effectivement j'ai supprimé l'id, et justement l'idée etait que mon libele_grp_cat serait unique donc pas besoin de champ id.
    Mauvaise idée ? il faut tout de même le conserver ?

    4)Ok. donc il vaut mieux garder l'id dans ces cas même si un autre champ unique existe surtout si c'est du texte.

    6)J'ai une question à laquelle je ne trouve pas de réponse ou ne sais pas la lire.
    lorsque ma clé étrangère est remplit par 2 champs qui servent de clé primaire (ex:table:Fonctmoyen qui sert de référence dans la table fonctmoyenevenplanparti)
    Quel type de champ dois-je mettre sur la clé étrangère ? Est ce que là aussi je devrai conserver l'id ?

    Encore merci pour l'attention que tu portes à mon problème.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par SAmpistaroy Voir le message
    Quel modéleur de BDD me conseilles tu ? (je bosse sur linux) Je souhaiterai avoir le plus simple d'interface.
    J'utilise Open Modelsphere. J'ai donné la méthode sur mon blog pour le faire fonctionner sous Linux.

    Tu peux aussi essayer JMerise qui est développé par un forumeur de Developpez.com.

    J'ai lu que ca se faisait automatiquement, qu'il fallait seulement indexer le champ de reference avec UNIQUE... peux tu confirmer pour que je sois sur:
    il faut que je rajoute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        id_formation  SMALLINT UNSIGNED NOT NULL UNIQUE,
    Ce qui est, je crois, automatique, c'est l'indexation des colonnes de clé étrangère spécifiées en même temps que la création de la table.

    Ce que je voulais dire, c'est que s'il s'agit d'une table associative donc munie d'une clé primaire composée des clés étrangères référençant les tables associées, la clé primaire crée un index sur le couple de colonnes mais il faut indexer individuellement la seconde colonne du couple si ce n'est pas fait automatiquement en tant que clé étrangère.
    A contrario, mais pour cette table ce n'est pas le cas, lorsqu'on crée une table associative avec ses clés étrangères et sa clé primaire multi-colonnes, il peut y avoir une indexation individuelle automatique de toutes les colonnes participant à la clé primaire parce que ce sont des clés étrangères et la première colonne de la clé primaire se retrouve ainsi indexée deux fois, ce qui est inutile. Il convient alors de supprimer l'index individuel sur la première colonne de la clé primaire.

    Par contre, il ne faut pas spécifier que id_formation est UNIQUE car c'est faux !

    3)Donc, je vais me servir de différentes sortes de groupes et grp_cat est la pour que je ne selectionne pas les groupes qui ne m'intéresse pas.
    Euh... je ne comprends pas ce que tu veux dire.
    Qu'est-ce qu'un "grp_cat" ?

    Tu devrais passer par l'étape "rédaction des règles de gestion".

    Effectivement j'ai supprimé l'id, et justement l'idée etait que mon libele_grp_cat serait unique donc pas besoin de champ id.
    Mauvaise idée ? il faut tout de même le conserver ?
    Oui car une bonne clé primaire d'une table issue d'une entité type du MCD est un entier auto-incrémenté.

    4)Ok. donc il vaut mieux garder l'id dans ces cas même si un autre champ unique existe surtout si c'est du texte.
    C'est ça !

    6)J'ai une question à laquelle je ne trouve pas de réponse ou ne sais pas la lire.
    lorsque ma clé étrangère est remplit par 2 champs qui servent de clé primaire (ex:table:Fonctmoyen qui sert de référence dans la table fonctmoyenevenplanparti)
    Quel type de champ dois-je mettre sur la clé étrangère ? Est ce que là aussi je devrai conserver l'id ?
    Une clé étrangère doit être du même type que la clé primaire qu'elle référence.
    La clé primaire d'une table associative est composée des colonnes portant les clés étrangères référençant les tables associées.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Bon, j'ai essayé de comprendre les nuances, mais je ne cache pas que j'ai un peu mal aux yeux a force de lire les lignes.
    J'ai finis la Bdd en suivant les conseils donnés.
    Je vais la tester en local. J'ai peur d'avoir des bugs de partout !

    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
    CREATE TABLE Participant (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        nom VARCHAR(40) NOT NULL,
        prenom VARCHAR(40) NOT NULL,
        tlphn  VARCHAR(14) NOT NULL,
        adresse VARCHAR(255) DEFAULT 'non comm',
        date_naissance DATE NULL DEFAULT NULL,
        commentaires VARCHAR(255) DEFAULT 'non comm',
        certif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id`),
        INDEX ind_prenom (`prenom`),
        INDEX ind_nom (`nom`)       
    )
    ENGINE=INNODB;
     
    CREATE TABLE Formaparti (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_formation  SMALLINT UNSIGNED NOT NULL ,
        id_participant INT UNSIGNED NOT NULL,
        commentaire VARCHAR(255) NULL DEFAULT 'non comm',
        PRIMARY KEY (`id`),
            CONSTRAINT formationformaparti
            FOREIGN KEY (id_formation)
            REFERENCES Formation(id),
            CONSTRAINT formapartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Formation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_formation VARCHAR(50) NOT NULL,
        commentaire  VARCHAR(250) NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grpparti (
        id_grp VARCHAR(40) NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        referent INT UNSIGNED NOT NULL,
        PRIMARY KEY (`id_participant`,`id_grp`),
            CONSTRAINT grpgrpparti
            FOREIGN KEY (id_grp)
            REFERENCES Grp(libele_grp),
            CONSTRAINT grppartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT grppartiparti
            FOREIGN KEY (referent)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grp (
        id_grp_cat VARCHAR(40) NOT NULL,
        libele_grp VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id_grp_cat`,`libele_grp`),
            CONSTRAINT grpgrpcat
            FOREIGN KEY (id_grp_cat)
            REFERENCES Grp_cat(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Grp_cat (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_grp_cat VARCHAR(40) NOT NULL,
        PRIMARY KEY (`libele_grp_cat`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Qualifparti (
        id_qualif SMALLINT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        date_qualif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id_qualif`,`id_participant`),
            CONSTRAINT qualifqualifparti
            FOREIGN KEY (id_qualif)
            REFERENCES Qualif(id),
            CONSTRAINT qualifpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Qualif (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_qualif VARCHAR(40) NOT NULL,
        PRIMARY KEY (`libele_qualif`)
     
    )
    ENGINE=INNODB;
     
    CREATE TABLE Nivparti (
        id_niveau SMALLINT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL ,
        date_niveau DATE DEFAUT 'CURRENT_DATE()',
        verif_niveau DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id_niveau`,`id_participant`),
            CONSTRAINT nivpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT nivpartiniveau
            FOREIGN KEY (id_niveau)
            REFERENCES Niveau(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Niveau (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele VARCHAR(60) NOT NULL,
        parametre VARCHAR(50),
        classement TINYINT UNSIGNED NOT NULL,
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Fonctparti (
        id_participant INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_fonction VARCHAR(60) NOT NULL,
        PRIMARY KEY (id)
            CONSTRAINT fonctpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT fonctpartifonction
            FOREIGN KEY (id_fonction)
            REFERENCES Fonction(libele_fonction)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Fonction (
        libele_fonction VARCHAR(60) NOT NULL,
        PRIMARY KEY (libele_fonction)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Moyen (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_moyen VARCHAR(70),
        nb_place TINYINT UNSIGNED,
        commentaire VARCHAR(250),
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Fonctmoyen (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_fonction VARCHAR(60) NOT NULL,
        id_moyen SMALLINT UNSIGNED NOT NULL,
        PRIMARY KEY (id),
            CONSTRAINT fonctmoyenfonct
            FOREIGN KEY (id_fonction)
            REFERENCES Fonction(id),
            CONSTRAINT fonctmoyenmoyen
            FOREIGN KEY (id_moyen)
            REFERENCES Moyen(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Fonctmoyevenplanparti (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_evenplan MEDIUMINT UNSIGNED NOT NULL,
        id_fonctmoyen INT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        PRIMARY KEY (id)
            CONSTRAINT fonctmoyevenplanpartievenplan
            FOREIGN KEY (id_evenplan)
            REFERENCES Evenplan(id),
            CONSTRAINT fonctmoyevenplanpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT fonctmoyevenplanpartifonctmoyen
            FOREIGN KEY (id_fonctmoyen)
            REFERENCES Fonctmoyen(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Evenplan (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        heure_rdv TIME NOT NULL,
        heure_retour TIME NULL,
        date_rdv DATE NOT NULL,
        commentaire VARCHAR(255) DEFAULT 'no comm',
        site VARCHAR(40) NULL,
        status VARCHAR(40) NULL,
        nb_place TINYINT UNSIGNED,
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Reservation (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_niveau SMALLINT UNSIGNED,
        id_participant INT UNSIGNED NOT NULL,
        id_evenplan MEDIUMINT UNSIGNED NOT NULL,
        id_rglmt_type VARCHAR(40) NOT NULL,
        id_sous_prestation SMALLINT UNSIGNED NOT NULL,
        tarif_negoc SMALLINT NULL DEFAULT NULL,
        validation TINYINT(1),
        rglmt TINYINT(1),
        date_rglmt DATE DEFAULT 'CURRENT_DATE',
        date_souhait_d DATE NULL DEFAULT NULL,
        date_souhait_f DATE NULL DEFAULT NULL,
        num_palanq CHAR(4) NULL,
        prof_real CHAR(5) NULL,
        duree_real CHAR(5) NULL,
        palier_real CHAR(5) NULL,
        PRIMARY KEY (id),
            CONSTRAINT reservationniveau
            FOREIGN KEY (id_niveau)
            REFERENCES Niveau(id),
            CONSTRAINT reservationparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT reservationrglmttype
            FOREIGN KEY (id_rglmt_type)
            REFERENCES Rglmt_type(libele_rglmt_type)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Rglmt_type (
        libele_rglmt_type VARCHAR(40) NOT NULL,
        PRIMARY KEY (libele_rglmt_type)
    )
    ENGINE=INNODB;
     
     
    CREATE TABLE Sousprestation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_sous_prestation VARCHAR(40) NULL,
        niveau_min SMALLINT UNSIGNED NOT NULL,
        sur_presta_parent VARCHAR(70),
        PRIMARY KEY (id),
            CONSTRAINT sousprestaniveau
            FOREIGN KEY (niveau_min)
            REFERENCES Niveau(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Prestation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_prestation VARCHAR(255) NOT NULL UNIQUE,
        commentaire VARCHAR(255) NULL,
        tarif_presta INT UNSIGNED NULL,
        sur_presta_parent VARCHAR(70),
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE Prestaresa (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_prestation SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_reservation MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        PRIMARY KEY (id),
            CONSTRAINT prestaresapresta
            FOREIGN KEY (id_prestation)
            REFERENCES Presta(id),
            CONSTRAINT prestaresareservation
            FOREIGN KEY (id_reservation)
            REFERENCES Reservation(id)
    )
    ENGINE=INNODB;

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Tu as toujours un id_grp_parti en VARCHAR ; pas bon !
    Idem pour id_grp_cat. Je n'ai toujours pas compris quelle notion se cache derrière ça d'ailleurs !
    Idem pour la table fonction qui n'a pas d'identifiant et une clé primaire, par voie de conséquence, en VARCHAR !
    Idem pour la table Rglmt_type !

    Il y a des tables où tu as bien fait les choses avec un identifiant entier et un lidellé en VARCHAR et d'autres pas.

    Un truc important si tu lances la totalité du script SQL d'un coup : mets en premier les tables qui n'ont pas de clé étrangère sinon ça va planter.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Oula je corrige tout de suite...
    Et pour le grp catégorie cela est pour selectionner facilement un grp en fonction du script qui est demandé. les grp seront classés entre eux en quelques sortes.

    merci pour le conseil de mettre les table sans clées en premier .... je l'ai effleuré mais je n'avais pas cherché la réponse.

    voila. je test en bdd tout de suite !
    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
    CREATE TABLE IF NOT EXISTS Participant (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        nom VARCHAR(40) NOT NULL,
        prenom VARCHAR(40) NOT NULL,
        tlphn  VARCHAR(14) NOT NULL,
        adresse VARCHAR(255) DEFAULT 'non comm',
        date_naissance DATE NULL DEFAULT NULL,
        commentaires VARCHAR(255) DEFAULT 'non comm',
        certif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id`),
        INDEX ind_prenom (`prenom`),
        INDEX ind_nom (`nom`)       
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Formation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_formation VARCHAR(50) NOT NULL,
        commentaire  VARCHAR(250) NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Formaparti (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_formation  SMALLINT UNSIGNED NOT NULL ,
        id_participant INT UNSIGNED NOT NULL,
        commentaire VARCHAR(255) NULL DEFAULT 'non comm',
        PRIMARY KEY (`id`),
            CONSTRAINT formationformaparti
            FOREIGN KEY (id_formation)
            REFERENCES Formation(id),
            CONSTRAINT formapartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Grp_cat (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_grp_cat VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Grp (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_grp_cat SMALLINT UNSIGNED NOT NULL,
        libele_grp VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id`),
            CONSTRAINT grpgrpcat
            FOREIGN KEY (id_grp_cat)
            REFERENCES Grp_cat(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Grpparti (
        id_grp INT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        referent INT UNSIGNED NOT NULL,
        PRIMARY KEY (`id_participant`,`id_grp`),
            CONSTRAINT grpgrpparti
            FOREIGN KEY (id_grp)
            REFERENCES Grp(id),
            CONSTRAINT grppartiparti1
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT grppartiparti2
            FOREIGN KEY (referent)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Qualif (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_qualif VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id`)
     
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Qualifparti (
        id_qualif SMALLINT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        date_qualif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id_qualif`,`id_participant`),
            CONSTRAINT qualifqualifparti
            FOREIGN KEY (id_qualif)
            REFERENCES Qualif(id),
            CONSTRAINT qualifpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Niveau (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele VARCHAR(60) NOT NULL,
        parametre VARCHAR(50),
        classement TINYINT UNSIGNED NOT NULL,
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Nivparti (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_niveau SMALLINT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL ,
        date_niveau timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        verif_niveau TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
        PRIMARY KEY (`id`),
            CONSTRAINT nivpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT nivpartiniveau
            FOREIGN KEY (id_niveau)
            REFERENCES Niveau(id),
            UNIQUE INDEX ind_uni_niveau_parti (id_niveau, id_participant)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Fonction (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_fonction VARCHAR(60) NOT NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Moyen (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_moyen VARCHAR(70),
        nb_place TINYINT UNSIGNED,
        commentaire VARCHAR(250),
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Fonctparti (
        id_participant INT UNSIGNED NOT NULL,
        id_fonction VARCHAR(60) NOT NULL,
        PRIMARY KEY (id)
            CONSTRAINT fonctpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT fonctpartifonction
            FOREIGN KEY (id_fonction)
            REFERENCES Fonction(libele_fonction)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Fonctmoyen (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_fonction VARCHAR(60) NOT NULL,
        id_moyen SMALLINT UNSIGNED NOT NULL,
        PRIMARY KEY (id),
            CONSTRAINT fonctmoyenfonct
            FOREIGN KEY (id_fonction)
            REFERENCES Fonction(id),
            CONSTRAINT fonctmoyenmoyen
            FOREIGN KEY (id_moyen)
            REFERENCES Moyen(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Prestation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_prestation VARCHAR(255) NOT NULL UNIQUE,
        commentaire VARCHAR(255) NULL,
        tarif_presta INT UNSIGNED NULL,
        sur_presta_parent VARCHAR(70),
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Sousprestation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_sous_prestation VARCHAR(40) NULL,
        niveau_min SMALLINT UNSIGNED NOT NULL,
        sur_presta_parent VARCHAR(70),
        PRIMARY KEY (id),
            CONSTRAINT sousprestaniveau
            FOREIGN KEY (niveau_min)
            REFERENCES Niveau(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Evenplan (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        heure_rdv TIME NOT NULL,
        heure_retour TIME NULL,
        date_rdv DATE NOT NULL,
        commentaire VARCHAR(255) DEFAULT 'no comm',
        site VARCHAR(40) NULL,
        status VARCHAR(40) NULL,
        nb_place TINYINT UNSIGNED,
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Fonctmoyevenplanparti (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_evenplan MEDIUMINT UNSIGNED NOT NULL,
        id_fonctmoyen INT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        PRIMARY KEY (id)
            CONSTRAINT fonctmoyevenplanpartievenplan
            FOREIGN KEY (id_evenplan)
            REFERENCES Evenplan(id),
            CONSTRAINT fonctmoyevenplanpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT fonctmoyevenplanpartifonctmoyen
            FOREIGN KEY (id_fonctmoyen)
            REFERENCES Fonctmoyen(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Rglmt_type (
        id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_rglmt_type VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Reservation (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_niveau SMALLINT UNSIGNED,
        id_participant INT UNSIGNED NOT NULL,
        id_evenplan MEDIUMINT UNSIGNED NOT NULL,
        id_rglmt_type TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_sous_prestation SMALLINT UNSIGNED NOT NULL,
        tarif_negoc SMALLINT NULL DEFAULT NULL,
        validation TINYINT(1),
        rglmt TINYINT(1),
        date_rglmt DATE DEFAULT 'CURRENT_DATE',
        date_souhait_d DATE NULL DEFAULT NULL,
        date_souhait_f DATE NULL DEFAULT NULL,
        num_palanq CHAR(4) NULL,
        prof_real CHAR(5) NULL,
        duree_real CHAR(5) NULL,
        palier_real CHAR(5) NULL,
        PRIMARY KEY (id),
            CONSTRAINT reservationniveau
            FOREIGN KEY (id_niveau)
            REFERENCES Niveau(id),
            CONSTRAINT reservationparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT reservationrglmttype
            FOREIGN KEY (id_rglmt_type)
            REFERENCES Rglmt_type(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Prestaresa (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_prestation SMALLINT UNSIGNED NOT NULL,
        id_reservation MEDIUMINT UNSIGNED NOT NULL,
        PRIMARY KEY (id),
            CONSTRAINT prestaresapresta
            FOREIGN KEY (id_prestation)
            REFERENCES Prestation(id),
            CONSTRAINT prestaresareservation
            FOREIGN KEY (id_reservation)
            REFERENCES Reservation(id)
    )
    ENGINE=INNODB;
    J'ai un problème sur la table niveauparti.
    un probleme avec les attribut de DATE

    raaah mettre la date courante sur l'un des champs et mettre une date null sur l'autre que je viendrai modifier a la date actuelle. réglé.

    Un problème de primary key maintenant sur la table fonctparti: je ne pensais pas avoir besoin d'un id.
    réglé

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    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
    CREATE TABLE IF NOT EXISTS Participant (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        nom VARCHAR(40) NOT NULL,
        prenom VARCHAR(40) NOT NULL,
        tlphn  VARCHAR(14) NOT NULL,
        adresse VARCHAR(255) DEFAULT 'non comm',
        date_naissance DATE NULL DEFAULT NULL,
        commentaires VARCHAR(255) DEFAULT 'non comm',
        certif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id`),
        INDEX ind_prenom (`prenom`),
        INDEX ind_nom (`nom`)       
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Formation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_formation VARCHAR(50) NOT NULL,
        commentaire  VARCHAR(250) NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Formaparti (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_formation  SMALLINT UNSIGNED NOT NULL ,
        id_participant INT UNSIGNED NOT NULL,
        commentaire VARCHAR(255) NULL DEFAULT 'non comm',
        PRIMARY KEY (`id`),
            CONSTRAINT formationformaparti
            FOREIGN KEY (id_formation)
            REFERENCES Formation(id),
            CONSTRAINT formapartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Grp_cat (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_grp_cat VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Grp (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_grp_cat SMALLINT UNSIGNED NOT NULL,
        libele_grp VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id`),
            CONSTRAINT grpgrpcat
            FOREIGN KEY (id_grp_cat)
            REFERENCES Grp_cat(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Grpparti (
        id_grp INT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        referent INT UNSIGNED NOT NULL,
        PRIMARY KEY (`id_participant`,`id_grp`),
            CONSTRAINT grpgrpparti
            FOREIGN KEY (id_grp)
            REFERENCES Grp(id),
            CONSTRAINT grppartiparti1
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT grppartiparti2
            FOREIGN KEY (referent)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Qualif (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_qualif VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id`)
     
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Qualifparti (
        id_qualif SMALLINT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        date_qualif DATE NULL DEFAULT NULL,
        PRIMARY KEY (`id_qualif`,`id_participant`),
            CONSTRAINT qualifqualifparti
            FOREIGN KEY (id_qualif)
            REFERENCES Qualif(id),
            CONSTRAINT qualifpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Niveau (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele VARCHAR(60) NOT NULL,
        parametre VARCHAR(50),
        classement TINYINT UNSIGNED NOT NULL,
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Nivparti (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_niveau SMALLINT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL ,
        date_niveau timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        verif_niveau TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
        PRIMARY KEY (`id`),
            CONSTRAINT nivpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT nivpartiniveau
            FOREIGN KEY (id_niveau)
            REFERENCES Niveau(id),
            UNIQUE INDEX ind_uni_niveau_parti (id_niveau, id_participant)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Fonction (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_fonction VARCHAR(60) NOT NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Moyen (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_moyen VARCHAR(70),
        nb_place TINYINT UNSIGNED,
        commentaire VARCHAR(250),
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Fonctparti (
        id_participant INT UNSIGNED NOT NULL,
        id_fonction INT UNSIGNED NOT NULL,
        PRIMARY KEY (id_participant,id_fonction),
            CONSTRAINT fonctpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT fonctpartifonction
            FOREIGN KEY (id_fonction)
            REFERENCES Fonction(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Fonctmoyen (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_fonction INT UNSIGNED NOT NULL,
        id_moyen SMALLINT UNSIGNED NOT NULL,
        PRIMARY KEY (id),
            CONSTRAINT fonctmoyenfonct
            FOREIGN KEY (id_fonction)
            REFERENCES Fonction(id),
            CONSTRAINT fonctmoyenmoyen
            FOREIGN KEY (id_moyen)
            REFERENCES Moyen(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Prestation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_prestation VARCHAR(255) NOT NULL UNIQUE,
        commentaire VARCHAR(255) NULL,
        tarif_presta INT UNSIGNED NULL,
        sur_presta_parent VARCHAR(70),
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Sousprestation (
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_sous_prestation VARCHAR(40) NULL,
        niveau_min SMALLINT UNSIGNED NOT NULL,
        sur_presta_parent VARCHAR(70),
        PRIMARY KEY (id),
            CONSTRAINT sousprestaniveau
            FOREIGN KEY (niveau_min)
            REFERENCES Niveau(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Evenplan (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        heure_rdv TIME NOT NULL,
        heure_retour TIME NULL,
        date_rdv DATE NOT NULL,
        commentaire VARCHAR(255) DEFAULT 'no comm',
        site VARCHAR(40) NULL,
        status VARCHAR(40) NULL,
        nb_place TINYINT UNSIGNED,
        PRIMARY KEY (id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Fonctmoyevenplanparti (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_evenplan MEDIUMINT UNSIGNED NOT NULL,
        id_fonctmoyen INT UNSIGNED NOT NULL,
        id_participant INT UNSIGNED NOT NULL,
        PRIMARY KEY (id),
            CONSTRAINT fonctmoyevenplanpartievenplan
            FOREIGN KEY (id_evenplan)
            REFERENCES Evenplan(id),
            CONSTRAINT fonctmoyevenplanpartiparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT fonctmoyevenplanpartifonctmoyen
            FOREIGN KEY (id_fonctmoyen)
            REFERENCES Fonctmoyen(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Rglmt_type (
        id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
        libele_rglmt_type VARCHAR(40) NOT NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Reservation (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_niveau SMALLINT UNSIGNED,
        id_participant INT UNSIGNED NOT NULL,
        id_evenplan MEDIUMINT UNSIGNED NOT NULL,
        id_rglmt_type TINYINT UNSIGNED NOT NULL,
        id_sous_prestation SMALLINT UNSIGNED NOT NULL,
        tarif_negoc SMALLINT NULL DEFAULT NULL,
        validation TINYINT(1),
        rglmt TINYINT(1),
        date_rglmt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        date_souhait_d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
        date_souhait_f TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
        num_palanq CHAR(4) NULL,
        prof_real CHAR(5) NULL,
        duree_real CHAR(5) NULL,
        palier_real CHAR(5) NULL,
        PRIMARY KEY (id),
            CONSTRAINT reservationniveau
            FOREIGN KEY (id_niveau)
            REFERENCES Niveau(id),
            CONSTRAINT reservationparti
            FOREIGN KEY (id_participant)
            REFERENCES Participant(id),
            CONSTRAINT reservationrglmttype
            FOREIGN KEY (id_rglmt_type)
            REFERENCES Rglmt_type(id)
    )
    ENGINE=INNODB;
     
    CREATE TABLE IF NOT EXISTS Prestaresa (
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_prestation SMALLINT UNSIGNED NOT NULL,
        id_reservation MEDIUMINT UNSIGNED NOT NULL,
        PRIMARY KEY (id),
            CONSTRAINT prestaresapresta
            FOREIGN KEY (id_prestation)
            REFERENCES Prestation(id),
            CONSTRAINT prestaresareservation
            FOREIGN KEY (id_reservation)
            REFERENCES Reservation(id)
    )
    ENGINE=INNODB;
    Merci beaucoup CinePhil, j'ai finis et exécuté dans phpmyadmin et tout est rentré :p.(je sens que je vais me faire jeter).

    Merci pour le Gros coup de main et les explications (j'ai pas encore percu la nuance avec les tables associatives je vais relire parce que je me retrouve avec toutes mes tables associatives et un champ id).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 12h04
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 23h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 19h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 14h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/05/2004, 00h13

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