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

Développement SQL Server Discussion :

Aide requête SQL deux clès étrangères même table (récursivité) [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 1
    Par défaut Aide requête SQL deux clès étrangères même table (récursivité)
    Bonjour,
    Je suis actuellement bloqué devant un problème de taille. Enfin selon moi...

    Je dois créer une base de données sous MS-SQLSRV2008R2 référençant l'ensemble des machines (matériel réseau, serveur physique ou virtuel, etc.) d'un parc informatique. Pour cela, j'ai créé une table "TB_EQUIPEMENT" (comprenant tout type de machine). Sur cette table viennent se greffer deux relations récursives (je crois que c'est le bon nom) de type "1/N" de façon à savoir sur quel serveur ESX sont hébergées les machines virtuelles et sur quel VCENTER sont pilotés les ESX. La figure ci-dessous montre comment s'organise le Modèle Physique de Données selon Merise pour ces relations.

    Nom : aide SQL.PNG
Affichages : 220
Taille : 10,9 Ko

    Mon problème est que je n'arrive pas à créer la requête me permettant de retrouver les noms de mes machines ESX & VCENTER pour une VM. C'est bien beau d'avoir les ID, mais si je n'arrive pas à faire correspondre les ID_ESX & ID_VCENTER avec ID_MACHINE de telle façon à récupérer le bon nom, ça ne me sert pas à grand-chose... Du coup ce que je souhaiterais avoir c'est un résultat SQL de la forme :
    ID_VM | NOM_VM | ID_ESX | NOM_ESX | ID_VCENTER | NOM_VCENTER.

    Quelqu'un aurait-il une idée de la requête SQL me permettant de réaliser ce résultat ? Merci par avance pour votre aide. Cordialement

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 250
    Par défaut
    Il te faut faire des jointures comme si tu utilisais 3 tables différentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t1.ID_MACHINE AS ID_VM,t1.NOM_MACHINE AS NOM_VM, t2.ID_MACHINE AS ID_ESX, t2.NOM_MACHINE AS NOM_ESX, t3.ID_MACHINE AS ID_VCENTER, t3.NOM_MACHINE AS NOM_VCENTER
    FROM TB_EQUIPEMENT t1
    INNER JOIN TB_EQUIPEMENT t2 ON t1.ID_ESX = t2.ID_MACHINE
    INNER JOIN TB_EQUIPEMENT t3 ON t2.ID_VCENTER = t3.Id_MACHINE

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    De toute façon ce n'est ps un bon modèle. Il ne décrit pas du tout votre problématique. En effet avec cette double relation rien n'empêche:
    • un VCENTER d'être enfant d'une ESX
    • un VCENTER d'être enfant d'une VM
    • un ESX être efant d'une VM...


    Vous devez au minimum faire un héritage avec sous héritage ou 3 relations séparées....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    De toute façon ce n'est ps un bon modèle. Il ne décrit pas du tout votre problématique. En effet avec cette double relation rien n'empêche:
    • un VCENTER d'être enfant d'une ESX
    • un VCENTER d'être enfant d'une VM
    • un ESX être efant d'une VM...


    Vous devez au minimum faire un héritage avec sous héritage ou 3 relations séparées....

    A +
    Ne peut-on pas régler ce problème à l'aide d'un ou deux contraintes bien pensées ?

    Cela dit, personnellement j'opterais aussi pour l'héritage car je n'aime pas les colonnes nullables dans mes tables.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/10/2012, 10h01
  2. Réponses: 2
    Dernier message: 06/04/2010, 15h17
  3. MCD->MPD : deux clés étrangères pour le même champ
    Par Eric2000 dans le forum Schéma
    Réponses: 3
    Dernier message: 04/09/2007, 00h44
  4. [Requête SQL]requete imbrique appelant même table
    Par moicats dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 26/03/2007, 16h36
  5. Réponses: 1
    Dernier message: 30/12/2005, 18h40

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