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 :

[Optimisation] Que privilégier : une ou plusieurs requêtes ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 24
    Points : 18
    Points
    18
    Par défaut [Optimisation] Que privilégier : une ou plusieurs requêtes ?
    Bonjour,

    Cette question m'obsède depuis quelques jours :

    Lorsque l'on créé une base de données, il faut éviter de concevoir des tables avec des valeurs nulles. Ainsi, il est préférable d'utiliser plusieurs tables, liées par des index.

    Mais si nous devons récupérer un certains nombre d'informations, réparties dans plusieurs tables, cela nous oblige à exécuter plusieurs requête au lieu d'une.

    Comme je ne suis pas sûr d'être bien clair, je vais donner un exemple :

    Imaginer une table contenant les champs suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    id    pseudo    passe    email    site
    L'adresse email et le site étant facultatifs (pour l'exemple), je vais me retrouver avec une table contenant des valeures nulles.

    Mieux vaudrait donc procéder ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Table 1 :
     
    id    pseudo    passe
     
     
    Table 2 :
     
    id    email    site
    Les 2 tables ci-dessus étant "liées" par les champs id.

    Maintenant, je veux récupérer les pseudo, passe, email et site.

    Dans le premier cas, une simple requête suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT pseudo, passe, email, site FROM ma_table WHERE id=monID;
    Mais dans le deuxième cas, la reqête est plus complexe (à peine mais c'était pour l'exemple), ou alors on peut faire 2 requêtes SELECT interrogeants les tables 1 et 2.

    Ma question est la suivante :

    (notez bien que je viens de décrire qu'un exemple, mais pour que les choses soient significatives, il faut imaginer une structure nettement plus complexe)

    En terme d'optimisation (notamment côté serveur sql), quel choix faut-il prendre : accepter des valeurs nulles dans les tables pour simplifier les requêtes, ou construire ses tables correctement quit à utiliser des requêtes plus complexes ?

    Merci pour vos avis avisés !! (j'espère avoir été clair...)

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Si les valeurs nullables ne serviront pas dans les clauses where , il n'y a aucun intérêt à faire 2 tables... du moins c'est mon avis

    Effectivement, cela t'obligerai à insérer/deleter/selectionner 2 tables à chaque fois alors que ces champs ne sont pas significatif

  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 782
    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 782
    Points : 52 783
    Points
    52 783
    Billets dans le blog
    5
    Par défaut
    Lorsque l'on créé une base de données, il faut éviter de concevoir des tables avec des valeurs nulles.
    Affirmation péremptoire et particulièrement absurde !

    Ton postulat de départ étant totalement faux il ne sert a rine de persister dans ton erreur pour cumuler les bétises !!!

    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 à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Absurde et bête...

    Je ne posais qu'une question, et tu aurais pu me faire une explication plutôt qu'une réponse aussi inconstructive.

    Cela doit être la première fois que je me fais répondre comme cela.

    Si j'ai écrit cela, c'est parce que je l'ai lu dans PHP & MySQL (CampusPress) et n'étant pas expert, je l'ai pris à tord pour vrai (ou peut-être est-ce mal compris).

    Merci qd même.

  5. #5
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Citation Envoyé par SQLpro
    Affirmation péremptoire et particulièrement absurde !
    ... et pourtant, la minimisation des non-valeurs dans les tuples est un des buts de la normalisation...

    Ceci etant dit, Dimitri01, la modelisation de ta table unique avec des valeurs nullables et la plus correcte. Compliquer a l'extreme juste pour supprimer des valeurs nulles n'est pas, a ce qu'on pourrait dire, de la normalisation correcte... C'est sans doute ce qu'a voulu dire, SQLPro, en s'emportant un peu Peace !
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  6. #6
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    en fait, c'est surtout un problème d'analyse au départ :
    Si tu as besoin de valeurs, et que ces valeurs sont uniques pour un identifiant, tu fais tout dansune seule table.
    Dans ton exemple,
    -si ton id n'a qu'un seul mail et un seul site, alors, tu fis une seule table.
    -si par contre, il peut y avoir plusieurs mails et/ou un mail par site, alors, il te faudra avoir 2 tables.
    -On pourrait même imaginer que ton gusse a plusieurs pseudos et que chaque pseudo peut être attaché à plusieurs mail/site, auquel cas tu auras 3 tables... voilà.

    Maintenant, tu as intérêt de faire une bonne analyse de ton besoin.
    C'est ton analyse qui déterminera le nombre de tables que tu dois avoir.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos réponses, elles me sont plus utiles effectivement que la deuxième !

    Je pense avoir compris maintenant.

    Encore merci.

    a+

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

Discussions similaires

  1. Optimisation de plusieurs requêtes en une seule ?
    Par Christophe Charron dans le forum Requêtes
    Réponses: 0
    Dernier message: 24/10/2009, 12h42
  2. Réponses: 3
    Dernier message: 05/05/2008, 09h57
  3. [DIVERS] nombre de champs que retourne une requête?
    Par krolineeee dans le forum Interfaces de programmation
    Réponses: 3
    Dernier message: 24/07/2006, 09h18
  4. creer plusieurs requêtes à partir d'une
    Par pixeldargent dans le forum Access
    Réponses: 8
    Dernier message: 18/10/2005, 11h44
  5. [Optimisation] Problème sur une requête UNION.
    Par françois62 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/06/2005, 16h08

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