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

Administration SQL Server Discussion :

Structure idéal Table "détail"


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2002
    Messages : 57
    Par défaut Structure idéal Table "détail"
    Bonjour,

    Pouvez-vous me dire quel type de structure « idéal », utiliser pour des tables "détail" :
    Table Maitre :
    Primary key : MAITRE_ID int identity

    Table détail
    Structure 1 :
    DETAIL_MAITRE_ID int (Primary Key)
    DETAIL_LIGNE int (Primary Key)

    Structure 2 :
    DETAIL_ID int identity (Primary Key)
    DETAIL_MAITRE int (Index)

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Difficile à dire exactement si vous ne nous parlez pas du domaine d'application.

    Peut-être qu'en ayant :

    - Une table Maitre
    - Une table Detail
    - Une table MaitreDetail

    Ce serait correct.
    Maintenant s'il n'y a qu'un seul detail par maitre, vous pouvez le mettre dans la table Maitre, sauf si vous pensez nécessaire de dénormaliser ...

    @++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2002
    Messages : 57
    Par défaut
    Et bien prenons l'exemple des factures, où nous avons 1 entête et 1..n lignes détail.
    Je me pose cette question surtout pour les index qui seront posés sur la table détail.
    Dans le cas de la structure 1 (reference maitre + n° de ligne), la clef primaire sera stockée avec 2 int
    Dans le cas de la structure 2 (id sur ligne), la clef primaire sera stockée sur 1 seul int.
    Les performances des index seront-elles differentes ?
    L'accés pour avoir toutes les lignes d'une facture est-il plus couteux avec la structure 2 ?

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    On peut faire :

    => Une table FACTURE {IDFacture, autresColonnes} avec IDFacture en clé primaire auto-incrémentée (un index cluster est implicitement créé alors de la création de la contrainte de clé primaire)

    => Une table FACTURE_LIGNE {IDLigne, IDFacture, autresColonnes} avec
    - IDLigne en clé primaire auto-incrémentée (donc index cluster)
    - IDFacture en clé étrangère indexée (index non-cluster)

    Après je ne sais pas si cela convient exactement au métier de votre entreprise ...

    @++

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 50
    Par défaut
    Bonjour,

    Je m'immisce

    Pour les lignes de factures, je suppose que la plupart des lectures porteront sur le numéro de facture, avec listage des lignes dans l'ordre des numéro de ligne.
    Si tel est le cas, ne vaut il mieux pas un index sur (IDFacture + IDLigne) ?
    Si non, merci de m'éclairer sur le pourquoi

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Les recherches sur la table des lignes de facture seront faites par filtre (WHERE IDFacture = @IDFacture) ou par jointure sur la table des factures (FROM dbo.TbFacture AS F JOIN dbo.TbLigneFacture AS L ON F.lIDFacture = L.lIDFacture).
    Comme un index non-cluster est créé sur IDFacture, son niveau feuille pointera sur les lignes de données de l'index cluster, c'est-à-dire la colonne lIDLigne.
    Il faut quand même vérifier que la requête n'effectue par de Lookup ...

    @++

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