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 :

[Conception] Optimisation pour specialisation


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Conception] Optimisation pour specialisation
    Bonjour,

    Je conçois une application sur MySQL workbench (qui est, en passant, un outil formidable, loin devant DBDesigner).

    Soit une table "Item" qui contient des types d'objets.

    Soit une table "Tool" qui est une specialisation de certains objets.
    Sa cle primaire est egalement une cle etrangere correspondant a la cle primaire de Item.
    Exemples : l'objet "pioche" sera dans Item et dans Tool.
    L'objet "Livre" quant a lui sera uniquement dans Item.

    Je me demande actuellement ce qu'il vaut mieux faire pour determiner si un Item est egalement un Tool :

    1- Utiliser un champ BOOL is_tool dans Item

    2- Ne rien utiliser, et chercher a chaque fois dans Tool l'existance de la cle etrangere correspondante


    Je pencherai pour la premiere solution, mais j'aimerai votre avis avant de prendre cette decision.

    Merci d'avance

  2. #2
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Bonjour, bonjour !

    La solution 1) ne me semble pas terrible.

    Pour savoir si un Item est également un Tool, tu pourrais faire une requête du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT col FROM Item i
    LEFT OUTER JOIN Tool t ON t.ID = i.ID
    WHERE t.ID IS NULL
    Avec ce genre de requête, tu auras tous les items qui n'ont pas de correspondance dans la table Tool. Tu peux faire une autre requête pour avoir uniquement les Items qui sont des Tools !
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Bonjour,
    Si tu cherches à savoir quels items ne sont pas des tools, utilise la solution de GyZmoO.
    Si tu veux avoir des tools avec les attributs communs à tous les items, crée une vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE VIEW v_tools
    SELECT -- les colonnes nécessaires et pas étoile
    FROM tool t
    INNER JOIN item i ON i.item_id = t.item_id
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par GyZmoO Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT col FROM Item i
    LEFT OUTER JOIN Tool t ON t.ID = i.ID
    WHERE t.ID IS NULL
    Cette solution fonctionne assurement, mais est-elle la meilleure ?
    Cela veut dire que MySQL parcourt toute la table Tool.

    Dans la solution avec "is_tool", MySQL peut theriquement ecarter les Items qui ne sont pas des Tool, sans faire le parcourt de la table. Mais le fait-il ainsi ?
    Cette solution presente de plus des etats sables non coherents dans la base, par exemple is_tool a false alors qu'un enregistrement existe dans Tool.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Tu devrais mieux préciser ton besoin.
    determiner si un Item est egalement un Tool
    Cela peut vouloir dire :
    1) J'ai 1 item et je veux savoir si c'est aussi un tool.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT une_colonne_de_tool
    FROM tool
    WHERE tool_id_item = -- l'identifiant de l'item connu
    => Si la requête ne renvoie pas de ligne, c'est que l'item n'est pas un tool.

    2) Obtenir la liste de tous les items qui sont aussi des tools :
    Citation Envoyé par CinéPhil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE VIEW v_tools
    SELECT -- les colonnes nécessaires et pas étoile
    FROM tool t
    INNER JOIN item i ON i.item_id = t.item_id
    3) Obtenir la liste des items qui ne sont pas des tools :
    Citation Envoyé par GyZmoO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT col FROM Item i
    LEFT OUTER JOIN Tool t ON t.ID = i.ID
    WHERE t.ID IS NULL
    Ou encore, en principe plus efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT i.item_id
    FROM item i
    WHERE NOT EXISTS (
    	SELECT *
    	FROM tool t
    	WHERE t.tool_id_item = i.item_id
    )
    Avec la seconde requête, en principe le parcours de tool pour chaque item s'arrête dès qu'une correspondance est trouvée alors que la jointure externe essaiera de toute façon de trouver des correspondances pour chaque ligne de item.

    Tu vois que les solutions sont différentes selon le besoin alors lis la phrase en bleu de ma signature et applique son principe pour te conduire plus efficacement vers la solution.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Actuellement, je ne sais pas encore dans quels ratios je vais utiliser telle et telle operation. Donc je vais sans doute continuer a reflechir aux mecanismes du programmes pour ensuite trouver la solution la plus adaptee.

    Merci pour vos conseils

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

Discussions similaires

  1. Pb de conception de BD optimisée pour l'extraction
    Par klereth dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 01/08/2007, 10h39
  2. [Conception] Optimisation
    Par onlytoine dans le forum Général Java
    Réponses: 11
    Dernier message: 04/07/2005, 01h09
  3. Besoin de routines ASM optimisées pour Delphi
    Par John Fullspeed dans le forum x86 32-bits / 64-bits
    Réponses: 11
    Dernier message: 08/12/2004, 22h00
  4. [débutant][Conception] Modélisation pour éviter le getClass()
    Par Oliveuh dans le forum Général Java
    Réponses: 9
    Dernier message: 28/06/2004, 21h00

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