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 plusieurs tables à 1 table


Sujet :

MySQL

  1. #1
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut Lier plusieurs tables à 1 table
    Bonjour,

    J'ai un problème de conception que je ne sais pas comment résoudre: je souhaite relier 3 tables T01, T02 et T03 à 1 même table TCommune.


    Nom : Capture d’écran 2024-01-22 134627.png
Affichages : 111
Taille : 18,8 Ko


    Sauf que dans mon cas, un record de TCommune sera lié uniquement à un élément de T01, T02 ou T03. J'avais prévu de placer 3 clés étrangères non nulles issues de T01, T02 et T03 dans TCommune mais le fonctionnement que je souhaite ferait planter l'intégrité de la base car 2 clés étrangères sur 3 seraient à Null.

    Avez-vous une idée pour faire ceci ? Passer par une table intermédiaire ?

    Merci pour vos conseils.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    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 311
    Points : 39 677
    Points
    39 677
    Billets dans le blog
    9
    Par défaut
    Bonjour

    S'agit-il d'un héritage par spécialisation ou d'associations exclusives (ce serait plus clair avec un modèle conceptuel, j'avoue que cette représentation inhabituelle n'est pas très parlante) ?

    Dans le premier cas, si l'insertion du sur-type et du sous-type sont concomitantes alors pas besoin de s'embêter avec un TRIGGER, c'est le traitement (par exemple une PS) qui insère dans le sur-type qui choisira le bon sous-type concerné et comitera l'ensemble

    Dans les autres cas, il faudra soit créer un TRIGGER, soit une contrainte CHECK associée à une UDF qui vérifiera que l'identifiant n'est pas déjà présent dans l'une des autres tables

  3. #3
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    Merci Escartefigue pour ton commentaire.

    Désolé mais je ne maitrise aucun concept que tu m'as cité

    Je migre un projet qui a ses données stockées sur fichiers vers une bdd mySQL.

    Dans ce projet initial:
    • TCommune, T01, T02 et T03 sont 4 classes
    • TCommune est utilisée par T01, T02 et T03.
    • T01, T02 et T03 n'ont pas grand chose en commun à part utiliser des objets de TCommune.


    Par un exemple, j'ai essayé d'expliciter les classes pour une meilleure compréhension:
    TCommune (VoieMesure = type_capteur, sensibilité...)
    T01 (AppareilMesure= marque, num_serie, ...)
    T02 (UtilisationVoieMesure= temperature, vibration...)
    T03 (FiabilitéVoieMesure= indice, erreur, ...)
    --> des objets VoieMesure de TCommune appartient à une seule classe T01, T02 ou T03.

    Naïvement, je pensais migrer ces 4 tables telles quelles en ajoutant 3 clés étrangères dans la table TCommune mais ça ne peut pas marcher:
    T01 est relié à un TCommune qui lui est propre et qui ne peut pas être relié à T02 et T03.

    Nom : Capture d’écran 2024-01-22 165058.png
Affichages : 80
Taille : 12,8 Ko

    J'espère qua ça pourra vous éclairer pour comprendre.
    Merci
    Images attachées Images attachées  

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    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 311
    Points : 39 677
    Points
    39 677
    Billets dans le blog
    9
    Par défaut
    Si je comprends bien, il s'agit de stocker des données relatives à des instruments de mesure

    Ces instruments sont de différents types (micro, caméra...)
    Ils effectuent différentes mesures (température, vibrations)
    Ils ont une certaine fiabilité
    Ils possèdent un n° de série et une marque


    Est-ce qu'un même instrument (une même sonde) peut effectuer plusieurs types de mesure (par exemple à la fois la température et les vibrations) ou bien un seul
    A-t-on à gérer la notion de station ou d'appareil qui combine plusieurs instruments de mesure, comme en météorologie où une station (caractérisée par un lieu géographique) relève la température, la vitesse du vent, l'hygrométrie...

  5. #5
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    Merci Escartefigue pour tenter de comprendre ma demande.

    En détaillant mon exemple je vois qu'il est faux et ne reflète pas la réalité de mon projet: les tables sont trop identiques et te font poser d'autres bonnes questions.

    Dans l'exemple ci-dessous, je souhaite afficher différentes informations (commentaire utilisateur pour T01, marque voiture pour T02 et nom société pour T03) avec des fontes spécifiques définies dans TCommun.

    • les 3 tables T01, T02 et T03 sont totalement différentes; aucun lien entre elles.
    • pour un record d'une de ces 3 tables, il utilise un record de TCommun pour afficher le texte (commentaire utilisateur, marque voiture, nom société)
    • TCommun peut avoir plusieurs records avec les mêmes valeurs mais ces records sont reliés à un seul record de T01, T02 ou T03.


    Nom : Capture d’écran 2024-01-23 115553.png
Affichages : 64
Taille : 12,8 Ko

    Le fait de mettre une clé étrangère pour T01, T02 et T03 dans TCommun ne peut pas fonctionner car 1 seule clé étrangère sera non nulle sur les 3.

    J'espère que mon exemple est plus clair

  6. #6
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Mon expérience amateur fait que tenter de transcrire une "base/application tableur" (quelle horreur !) dans une vraie base de données relationnelle est vouée la plupart du temps à l'échec.
    L'étape d'analyse et de conceptualisation de la base est indispensable.

    Donc reprendre au début : pour quoi faire ? Les différentes entités, leurs relations...

    À vous lire je pense qu'une piste serait de faire une table associant TCommun à T01 par exemple.
    Mais à confirmer avec le résultat de la conceptualisation.

    Bon courage.

    Pierre

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    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 311
    Points : 39 677
    Points
    39 677
    Billets dans le blog
    9
    Par défaut
    Tout ceci est bien confus.

    La bonne démarche pour construire une base de données c'est de commencer par rédiger les règles de gestion.
    Voyez dans ce fil de discussion, la réponse n° 8 qui explique comment les formaliser

    Quand c'est fait, on crée ensuite un Modèle Conceptuel des Données (MCD) en utilisant un logiciel fait pour ça, par exemple Looping qui en plus d'être excellent est aussi gratuit
    Vous pouvez le télécharger ICI.

    À partir de là, vous choisissez votre SGBD et la génération du script de création des tables (DDL) est automatique.

    Il ne faut pas créer votre BDD en réfléchissant aux tables : les tables et notamment les FK ne sont que la conséquence des règles de gestion formalisées en MCD.

Discussions similaires

  1. Lier plusieurs tables
    Par daffy85 dans le forum VBA Access
    Réponses: 15
    Dernier message: 08/09/2014, 10h45
  2. Lier plusieurs tables dans une requete
    Par ConceptInterWEB dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/02/2014, 14h33
  3. [MySQL] Lier plusieurs tables dans une requete
    Par ConceptInterWEB dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/01/2014, 17h41
  4. Réponses: 1
    Dernier message: 21/04/2008, 12h06
  5. lier 3 tables plusieurs a plusieurs
    Par Chico_Latino dans le forum Access
    Réponses: 16
    Dernier message: 26/01/2006, 09h12

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