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

PHP & Base de données Discussion :

Relier des tables entre elles


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 27
    Points : 25
    Points
    25
    Par défaut Relier des tables entre elles
    Bonjour,

    Dans le cadre d'un projet, j'ai besoin de relier des tables entre elles, non seulement pour gagner du temps mais aussi pour trier plus facilement les données.

    Description du projet

    J'ai 4 tables à créer :

    1) Une table ACTION qui contient Num_action (id) et Nom_action.
    2) Une table CATEGORIE qui contient Num_categorie (id) et Nom_categorie.
    3) Une table LIEU qui contient Num_lieu (id) et Nom_lieu.
    4) Une table AUTEUR qui contient Num_auteur (id) et Nom_auteur.

    Pour chaque action, on associe une catégorie, un lieu et un auteur (et au contraire, chaque catégorie, chaque lieu, chaque auteur peut avoir plusieurs actions).

    Le MLD donne donc :



    Maintenant ce que je voudrais c'est transposer cela en MySQL. Les identifiants sont pour chaque table les clés primaires mais comment faire le lien entre les tables ? (clé étrangère ?)

    De plus, quelles requêtes effectuer pour ensuite trier les actions par auteur, lieu, catégorie ?

    Merci pour vos réponses. Toute piste, explication, conseil pourra m'aider.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bonjour,

    Mysql n'exploite les contraintes de clefs étrangères que sur les tables Innodb.
    Cela rien n'empeche pas d'avoir la meme structure sur les tables myIsam.

    L'interrogation se fait par jointure.

    exemple recoupant les actions et les lieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM LIEU JOIN ACTION USING (NUM_LIEU);

  3. #3
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    essay ceci :
    1) Une table ACTION qui contient Num_action (id) et Nom_action.
    2) Une table CATEGORIE qui contient Num_categorie (id) et Nom_categorie.
    3) Une table LIEU qui contient Num_lieu (id) et Nom_lieu.
    4) Une table AUTEUR qui contient Num_auteur (id) et Nom_auteur.
    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
     
    CREATE TABLE Auteur (Num_auteur INT NOT NULL,
                          Nom_auteur Varchar(255),
                          PRIMARY KEY(Num_auteur)) ENGINE=INNODB;
    CREATE TABLE LIEU (Num_LIEU INT NOT NULL,
                          Nom_LIEU Varchar(255),
                          PRIMARY KEY(Num_LIEU)) ENGINE=INNODB;
    CREATE TABLE CATEGORIE (Num_CATEGORIE INT NOT NULL,
                          Nom_CATEGORIE Varchar(255),
                          PRIMARY KEY(Num_CATEGORIE)) ENGINE=INNODB;
    CREATE TABLE  ACTION (Num_action INT NOT NULL AUTO_INCREMENT,
                          Nom_action INT NOT NULL,
                          product_id Varchar(255) NOT NULL,                 
                          PRIMARY KEY(Num_action),                     
                          FOREIGN KEY (Num_CATEGORIE)
                            REFERENCES CATEGORIE(Num_CATEGORIE)
                            ON UPDATE CASCADE ON DELETE RESTRICT,
                          INDEX (Num_LIEU),
                          FOREIGN KEY (Num_LIEU)
                            REFERENCES LIEU(Num_LIEU)
                            ON UPDATE CASCADE ON DELETE RESTRICT,
                          INDEX (Num_auteur),
                          FOREIGN KEY (Num_auteur)
                          REFERENCES Auteur(Num_auteur))                
                            ENGINE=INNODB;
    essaie voir si cela peut resoudre ton probleme.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 27
    Points : 25
    Points
    25
    Par défaut
    Je note la première solution de sabotage.

    Pour la seconde, phpmyadmin me renvoie l'erreur suivante pour la création de la table ACTION :

    #1072 - Key column 'Num_CATEGORIE' doesn't exist in table

  5. #5
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    saut une petite precipitation de ma part, voici la requete:
    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
     
    CREATE TABLE Auteur (Num_auteur INT NOT NULL,
                          Nom_auteur Varchar(255),
                          PRIMARY KEY(Num_auteur)) ENGINE=INNODB;
    CREATE TABLE LIEU (Num_LIEU INT NOT NULL,
                          Nom_LIEU Varchar(255),
                          PRIMARY KEY(Num_LIEU)) ENGINE=INNODB;
    CREATE TABLE CATEGORIE (Num_CATEGORIE INT NOT NULL,
                          Nom_CATEGORIE Varchar(255),
                          PRIMARY KEY(Num_CATEGORIE)) ENGINE=INNODB;
    CREATE TABLE  ACTION (Num_action INT NOT NULL AUTO_INCREMENT,
                          Nom_action INT NOT NULL,
                          Num_CATEGORIE INT not Null,
                          Num_LIEU INT NOT NULL,
                          Num_auteur INT NOT NULL,
                          product_id Varchar(255) NOT NULL,
                          PRIMARY KEY(Num_action),                     
                          FOREIGN KEY (Num_CATEGORIE)
                            REFERENCES CATEGORIE(Num_CATEGORIE)
                            ON UPDATE CASCADE ON DELETE RESTRICT,
                          INDEX (Num_LIEU),
                          FOREIGN KEY (Num_LIEU)
                            REFERENCES LIEU(Num_LIEU)
                            ON UPDATE CASCADE ON DELETE RESTRICT,
                          INDEX (Num_auteur),
                          FOREIGN KEY (Num_auteur)
                          REFERENCES Auteur(Num_auteur))                
                            ENGINE=INNODB;

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/11/2012, 11h20
  2. [Débutant] relier des tables entre elles
    Par cristos dans le forum ASP.NET
    Réponses: 11
    Dernier message: 26/08/2011, 12h35
  3. Réponses: 9
    Dernier message: 29/01/2010, 20h25
  4. Comment relier 3 requête entres-elles ?
    Par DeFCrew dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/06/2006, 14h49
  5. [VB6]Lier 3 tables entre elles
    Par boudincweole10 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/05/2006, 15h07

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