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

Langage SQL Discussion :

Requête SQL pour peupler une table contenant une clé étrangère


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut Requête SQL pour peupler une table contenant une clé étrangère
    Bonjour

    Voici la table model à peupler :

    Nom : tables model-cara.png
Affichages : 348
Taille : 146,4 Ko

    Voici ma requête SQL pour peupler ma table Model :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    INSERT INTO Model (
      brand_id,
      caracteristics_id,
      energy_id,
      name 	
    )
    VALUES
       (((SELECT id FROM brand WHERE name = 'BMW')), ((SELECT id FROM caracteristics WHERE id = '1')), ((SELECT id FROM energy WHERE  libelle = 'Essence')), 'Série 6'),
    ....
    Pour récupérer l'id de Caracteristics pour un Modèle comme on peut voir ci-dessus je met en dure l'id correspondant au caractéristique du modèle, il n'y a pas de référence au Model dans caractéristique.

    Je voulais savoir comment faire pour éviter de mettre en dure l'id de caractéristique.

    Est-ce que vous pourriez me dire s'il y a une solution à ce problème ?

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

    Pour récupérer l'identifiant de caractéristique, il faudrait que la table caractéristique possède un attribut ou un groupe d'attributs permettant de retrouver l'identifiant.
    Or ce n'est visiblement pas le cas.
    Et pour cause, cette table est un fourre-tout symptomatique d'une modélisation conceptuelle mal faite.
    Vous mélangez des caractéristiques liées à la carrosserie (nombre de portes, dimensions extérieures et intérieures...) avec des caractéristiques moteur (puissance, émissions de CO2...) et un type de boite de vitesses.
    Vous devriez avoir un lien entre modèle/millésime (BMW série 6 année 2020 par exemple) et type de ce modèle (break, berline, coupé) d'une part motorisation d'autre part (différents moteurs pouvant équiper un même type) et boite de vitesse (un même modèle d'un même type avec un même moteur peut avoir une boite mécanique, auto, robotisée...).
    Ce faisant, les attributs (colonnes au niveau tabulaire) doivent être répartis dans les bonnes entité-type.
    Ensuite, il faudra dans chacune de ces entité-type un code avec une contrainte unique permettant de retrouver l'identifiant technique PK associé.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    Je ne comprends pas bien, quand tu dis :
    Citation Envoyé par escartefigue Voir le message
    Bonjour
    Ensuite, il faudra dans chacune de ces entité-type un code avec une contrainte unique permettant de retrouver l'identifiant technique PK associé.
    Est-ce que ça veut dire qu'il faut mettre un champ qui permettrait de savoir de quel type de modèle on parle, par exemple si je reprends mon four-tout caracteristics je devrais mettre un champs modelref qui permettrait de relier le modèle à ses caractéristiques, et donc faire une requête de se style pour peupler la table modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ..., ((SELECT id FROM caracteristics WHERE modelref = "bmw-serie 6")), ...

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 779
    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 779
    Billets dans le blog
    10
    Par défaut
    C'est bien ça

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 779
    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 779
    Billets dans le blog
    10
    Par défaut
    C'est bien ça.

    Mais encore une fois, "BMW série 6" n'est pas un critère suffisant pour connaître les caractéristiques associées.
    Ca dépend du millésime, de la motorisation, de la finition, du choix de boite de vitesses...
    Afin de ne pas répéter les caractéristiques communes aux modèles partageant les mêmes moteurs, même BV etc., il est préférable de créer autant de types d'entité et donc de tables, qu'il y a de sous-ensembles.
    Chacune de ces tables possèdera un code ou une référence unique, permettant de retrouver la PK technique.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    D'accord merci pour ton aide.

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

Discussions similaires

  1. [AC-2016] Comment créer une requête sql pour renseigner une table et ses champs
    Par baud61 dans le forum VBA Access
    Réponses: 13
    Dernier message: 30/01/2018, 17h55
  2. [MySQL] Requête SQL pour charger une structure récursive
    Par FMaz dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/07/2009, 05h00
  3. Requête sql pour afficher une somme
    Par nora2311 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/06/2009, 16h47
  4. Requête SQL pour remplir une zone de texte déroulante
    Par uranium-design dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/10/2007, 12h15
  5. Requête SQL pour insérer une donnée BINAIRE ?
    Par Najdar dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/05/2006, 10h21

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