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 :

Modèle de données standard, ou améliorable ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 15
    Points
    15
    Par défaut Modèle de données standard, ou améliorable ?
    Bonjour à tous,
    Je m'interroge sur la viabilité d'un modèle de données. C'est un cas très classique (je pense) et je me demande si ma conception est optimum.
    Il s'agit de publications qui contiennent des articles. Nous avons donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE publications (id INT, ...)
    CREATE TABLE articles (id INT, publication INT, titre TEXT, ...)
    Si je veux tous les articles d'une publication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM article WHERE publication=???
    Jusqu'ici, rien que de très normal.
    Mon soucis intervient lorsque je veux afficher n publications avec leurs articles. Cela implique n*2 requêtes : n pour récupérer les données de publications, et n pour celles des articles. Evidemment, on peut condenser cela en une seule requête du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM articles 
    INNER JOIN publications ON (publications.id=articles.publication)
    WHERE publications.id=??? OR publications.id=???, etc.
    Toutefois, deux soucis à cette méthode :
    - si x est le nombre d'articles, on a x fois la même information à propos de la publication. Dépense de mémoire inutile.
    - il peut arriver que dans un contexte donné, dont je vous épargne les détails, il ne soit pas possible de faire ce type de requête.

    D'où ma question : mon schéma est il le seul valable ? Y a t'il quelque chose de plus adapté ?

    Merci
    Antoine

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut une table intermédiaire ?
    Et en créant une autre table qui fait le lien entre la publication et l'article ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE publications (id INT, ...)
    CREATE TABLE articles (id INT, titre TEXT, ...)
    CREATE TABLE pubart (pubid, artid)
    si tu veux tous les article d'une publication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select artid from pubart where pubid=1
    si tu veux tous les articles de différentes publication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select pubid, artid from pubart where pubid in (1,2,3,...) order by pubid
    De plus en admettant que tu aies une publication spéciale 10ème anniversaire reprennant les meilleurs articles des dernières années, tu ne dois pas dupliquer les articles, juste rajouter une publication, et lier avec les articles existant via la table pubart.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Si un article ne peut pas appartenir à plusieurs publications, restez en à votre modèle de départ, sans table d'association. Si un article peut appartenir à plusieurs publications, la solution proposée par rafuoner sera plus adaptée.

    Et je ne comprends pas bien pourquoi vous ne pouvez parfois pas lancer "ce type de requêtes". Qu'a-t-elle de spécial votre requête?

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/03/2007, 14h04
  2. Réponses: 2
    Dernier message: 18/10/2006, 16h03
  3. Schéma du modèle de données : reverse engineering
    Par slefevre01 dans le forum Designer
    Réponses: 2
    Dernier message: 20/08/2005, 09h38
  4. [JTree] Quel modèle de données utiliser ?
    Par speedster dans le forum Composants
    Réponses: 2
    Dernier message: 11/07/2005, 20h44
  5. [retro-conception] Passage au modèle de données
    Par liliboc dans le forum Outils
    Réponses: 5
    Dernier message: 09/07/2004, 11h01

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