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

 MySQL Discussion :

Lier les ID entre eux.


Sujet :

MySQL

  1. #1
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut Lier les ID entre eux.
    Bonjour à tous !

    J'ai plusieurs années d'expérience dans l'utilisation des tables mais je n'ai pas forcément toutes les bases ni les bons réflexes.

    Aujourd'hui j'ai besoin de faire une configuration assez propre car mon projet est repris par un tiers.

    J'ai besoin de faire des liaisons entre mes tables et c'est une première pour moi

    J'ai trois tables :

    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
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `Appli`
    --
     
    CREATE TABLE IF NOT EXISTS `Appli` (
      `IDAppli` int(11) NOT NULL AUTO_INCREMENT,
      `nomAppli` varchar(60) NOT NULL,
      `Position` int(10) NOT NULL,
      PRIMARY KEY (`IDAppli`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=ascii;
     
    -- --------------------------------------------------------
    --
    -- Structure de la table `Indicateurs`
    --
     
    CREATE TABLE IF NOT EXISTS `Indicateurs` (
      `IDIndic` int(11) NOT NULL AUTO_INCREMENT,
      `nomIndic` varchar(20) NOT NULL,
      PRIMARY KEY (`IDIndic`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=ascii;
     
    -- --------------------------------------------------------
    --
    -- Structure de la table `conf_appli`
    --
     
    CREATE TABLE IF NOT EXISTS `conf_appli` (
      `IdAppli` int(11), 
      `IdIndic` int(11), 
    ) ENGINE=MyISAM DEFAULT CHARSET=ascii;
    La table "conf_appli" ce réfère aux index des tables Indicateurs et Appli

    Ma conception me semble correct mais je suis sûr que l'on peu faire mieux.

    Pourriez vous m'aiguiller ?

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    1 virgule en trop dans conf_appli

    Es-tu obligé de travaillé en MyISAM ?

    Parce que je sens bien le moteur InnoDB pour gérer les foreign key entre conf_appli et les autres tables. Ainsi, l'intégrité référentielle serait gérée par MySQL et pas via l'application.

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Citation Envoyé par qi130 Voir le message
    Es-tu obligé de travaillé en MyISAM ?

    Parce que je sens bien le moteur InnoDB pour gérer les foreign key entre conf_appli et les autres tables. Ainsi, l'intégrité référentielle serait gérée par MySQL et pas via l'application.
    Tout à fait d'accord mais il est toujours mieux de la gérer également via l'application (un message d'erreur du SGBD n'est pas toujours ce qu'il y a de plus agréable pour un utilisateur lambda).

    Donc +1 pour utiliser le moteur InnoDB (surtout dans ce contexte). Il est également nécessaire de créer des contraintes de clefs étrangères et de clefs primaires dans la table conf_appli qui fait la liaison des deux autres tables.

    On peut donc exécuter ces requêtes (si la table conf_appli est déjà crée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ALTER TABLE conf_appli ADD FOREIGN KEY (IdAppli) REFERENCES Appli(IDAppli);
     
    ALTER TABLE conf_appli ADD FOREIGN KEY (IdIndic) REFERENCES Indicateurs (IDIndic);
     
    ALTER TABLE conf_appli ADD PRIMARY KEY (IdAppli, IdIndic);
    Cordialement,
    Idriss

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Tout à fait d'accord mais il est toujours mieux de la gérer également via l'application (un message d'erreur du SGBD n'est pas toujours ce qu'il y a de plus agréable pour un utilisateur lambda).
    Ce qui est encore mieux, c'est que l'application récupère et traite le message d'erreur donné par le SGBD afin de guider clairement l'utilisateur, notamment dans sa langue, sur ce qui ne va pas.

  5. #5
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    Merci pour vos réponses.

    J'ai opté pour
    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
     
     
     
    --
    -- Structure de la table `applimobil`
    --
     
    CREATE TABLE IF NOT EXISTS `applimobil` (
      `idAppli` int(11) NOT NULL AUTO_INCREMENT,
      `nomAppli` varchar(60) NOT NULL,
      `Position` int(10) NOT NULL,
      PRIMARY KEY (`idAppli`)
    ) TYPE=INNODB;
     
     
    -- --------------------------------------------------------
    --
    -- Structure de la table `indicateurs`
    --
     
    CREATE TABLE IF NOT EXISTS `indicateurs` (
      `IDIndic` int(11) NOT NULL AUTO_INCREMENT,
      `nomIndic` varchar(20) NOT NULL,
      PRIMARY KEY (`IDIndic`)
    ) TYPE=INNODB;
     
     
     
    -- --------------------------------------------------------
    --
    -- Structure de la table `conf_applicharge`
    --
     
    CREATE TABLE IF NOT EXISTS `conf_applicharge` (
    	`IdApplicharge` int(11) NOT NULL AUTO_INCREMENT,
    	`IdAppli` int(11) NOT NULL,
    	`IdIndic` int(11) NOT NULL,
    	PRIMARY INDEX (IdApplicharge),
      FOREIGN KEY (IdAppli) REFERENCES `applimobil` (idAppli),
      FOREIGN KEY (IdIndic) REFERENCES `indicateurs` (IDIndic)
    ) TYPE=INNODB;

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    C'est bien, sauf que si tu veut que les couples (IdAppli, IdIndic) soient uniques (comme je n'en sais rien, je te préviens au cas où ), la clef primaire doit être la concaténation des deux clefs étrangères.

    Autrement dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE IF NOT EXISTS `conf_applicharge` (
        `IdAppli` int(11) NOT NULL,
        `IdIndic` int(11) NOT NULL,
        FOREIGN KEY (IdAppli) REFERENCES `applimobil` (idAppli),
        FOREIGN KEY (IdIndic) REFERENCES `indicateurs` (IDIndic),
        PRIMARY KEY (IdAppli, IdIndic)
    ) TYPE=INNODB;
    Cordialement,
    Idriss

  7. #7
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    Merci j'en prends note on ne sait jamais si un jour cela peux me servir.

    Dans le cas présent la table 'conf_applicharge' ne sert juste à conserver l'état de checkbox.

    Le 'IdApplicharge' ne me sert à rien.

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Ben si idapplicharge ne te sert à rien, supprime-le !

  9. #9
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pour quelle collation optes-tu? personnellement j'apprecie UTF8-general-ci parce que
    1. insensible à la casse
    2. accepte assez bien les choses comme les oe entrelacés et les autres fioritures qu'on peut trouver dans les mots issus des langues européennes.

    plus au cas par cas du binaire pour ce que je ne suis pas sensé modifier (images, documents, hash, certificats )

  10. #10
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    Merci à tous.

    J'ai opté pour INNODB et de l'utf8_general_ci.

    Tout fonctionne

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

Discussions similaires

  1. [Toutes versions] Comment lier deux Combobox entre eux ?
    Par létudiant_access dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/02/2013, 14h27
  2. Archivage : Lier des documents entre-eux
    Par _Em'' dans le forum Configuration
    Réponses: 2
    Dernier message: 06/11/2012, 16h41
  3. lier 2 selects entre eux. php/sql/js
    Par bullrot dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/08/2010, 18h00
  4. Lier deux combobox entre eux
    Par zabdaniel dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/02/2009, 10h06

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