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 :

Comment éviter la redondance dans une relation N:M


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Points : 705
    Points
    705
    Par défaut Comment éviter la redondance dans une relation N:M
    Bonjour ,
    J'utilise une relation N:M entre deux tables Cars ---N:M--- Charges comme indiqué dans la figure attachée.
    La table charges contient les charges annuelles des véhicules (assurance , vignette , contrôle technique ..) de tel sorte que les charges des véhicules ayants la même année de circulation et la même puissance sont identiques (par exemple Assurance = 200$ , vignette = 100$ , contrôle = 50$).
    La question est comment éviter d'ajouter 3 enregistrements (par exemple) à la tables charges au lieu d'un seul pour 3 véhicules ayants les même coût des charges ?
    C à d avoir le schéma suivant (figure exemple):
    Images attachées Images attachées   

  2. #2
    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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    La table des charges est un ensemble cohérent de caractéristiques d'une voiture à une date donnée.
    Qu'est-ce qui détermine ces caractéristiques ?

    Ton exemple de données semble dire que tous les véhicules de 7CV ont les mêmes charges.

    Tu pourrais alors typer les voitures et associer les types aux charges :
    Voiture -1,1----Typer----0,n- Type_voiture -1,n----Avoir----0,n- Charges

    Si la puissance fiscale n'est pas le seul élément qui type les voitures pour déterminer les charges, alors déplace tous les attributs nécessaires au typage de la table des voitures vers la table des types de voiture.

  3. #3
    Membre éclairé

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Points : 705
    Points
    705
    Par défaut
    Merci pour ta réponse, je vais essayer de faire les modifications nécessaires.
    mais est ce que ta réponse signifie que l'utilisation des relations N:M engendre forcement des redondances de données ?

  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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Non ce ne sont pas forcément des redondances de données. Il faut seulement réfléchir en ensembles cohérents de données. Avec mon schéma je pense que tu n'as plus de redondance.

    Ton schéma entraînait une redondance car tu ne réfléchissais qu'en terme de voitures individuelles et non pas de types de voitures.

    D'ailleurs il en reste !
    cars.categorie devrait être externalisé :
    car -1,1----catégorifier----0,n- categorie

    Idem pour la marque et le type !

    Et pendant que j'y suis à critiquer ton modèle...
    nbplaces en VARCHAR(45), à moins que tu écrives ça en lettres et que ce soit un TGV de trois cent quatre-vingt douze places, un TINYINT suffirait !
    Idem pour la charge (des kg je pense ?) ou la puissance (des CV).
    Et les numéros d'immatriculation, ça m'étonnerait qu'il y en ait qui fassent 45 caractères !

  5. #5
    Membre éclairé

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Points : 705
    Points
    705
    Par défaut désolé mais je doit encors vous embetter
    Bonsoir.
    je suis totalement d'accord avec ces modifications. mais mon grand problème est de pouvoir implémenter ce schéma dans l'application que je développe avec Delphi7.
    si j'ai une table catégorie qui est liée à la table car :
    car -1,1----catégorifier----0,n- catégorie
    je doit avoir les possibilités : insert , update , delete sur cette table depuis mon application. cela est pareil pour les tables marque, type.
    Dans le cas de l'ajout d'un véhicule d'une nouvelle marque, nouveau type et nouvelle catégorie, l'utilisateur doit mettre à jour les tables marque, type et catégorie avant d'ajouter le nouveau véhicule c à d ouvrir la fiche marque et ajouter la nouvelle marque, ouvrir la fiche type et ajouter le nouveau type ..et enfin ouvrir la fiche véhicule pour ajouter le nouveau véhicule en choisissant la marque , type et catégorie à l'aide d'une liste de choix. une opération assez lourde pour un simple ajout d'un véhicule.
    Y-à-t il une alternative plus simple pour exécuter cette opération , sans que l'utilisateur n'aperçoit qu'il est est entrain de remplir 4 tables différentes (je parle du point de vue applicatif bien-sur)?
    Merci.

  6. #6
    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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Ce que tu décris est typiquement le genre de boulot à faire pour développer correctement une application.

    Je ne connais pas Delphi donc je ne peux pas t'aider dans ce domaine.
    Je me souviens que sous Access, il existait des lignes déroulantes modifiables qui permettaient d'ajouter dynamiquement une entrée à la liste et la répercuter dans la table liée à la liste.

    Dans un autre langage de programmation tel que PHP, on peut avoir une zone de saisie de texte aidée par une auto-complétion de la saisie et si l'utilisateur saisit une nouvelle marque, il faut effectivement programmer l'insertion dans la bonne table après validation par l'utilisateur, laquelle peut se faire sur une boîte de dialogue du genre : "La marque de voiture que vous avez saisie n'existe pas dans la base de données, voulez-vous l'ajouter ?"

    Maintenant, si tu préfères que dans ta BDD il y ait des "Renault", "Renaud", "Reno", "Renaut", "Reneau"... c'est toi qui vois !
    Bon courage !

  7. #7
    Membre éclairé

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Points : 705
    Points
    705
    Par défaut C'est OK
    Merci beaucoup cinéphil. ton aide est précieuse.

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

Discussions similaires

  1. Comment éviter les doublons dans une ComboBox
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/07/2017, 16h03
  2. Comment éviter des requêtes dans une boucle
    Par dam28800 dans le forum Langage
    Réponses: 43
    Dernier message: 04/12/2008, 16h53
  3. [MySQL] Comment éviter des doublons dans une liste déroulante ?!
    Par L'anonyme_connu dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/03/2008, 11h14
  4. [Conception] Comment éviter les redondances d’une variable
    Par bilane dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/09/2006, 10h54
  5. Réponses: 1
    Dernier message: 23/09/2005, 18h30

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