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

MS SQL Server Discussion :

Question de Modelisation


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Par défaut Question de Modelisation
    Salut,

    J'aimerais avoir votre avis ou un retour d'experience sur la facon optimale
    de modeliser une base afin d'obtenir les meilleurs performances en terme de temps de reponse sur requete.
    Je vais essayer de vous donner tous les infos sans en faire une tonne.
    Je dois mettre en place une base de données gerant des contacts.
    pas mal de contacts puisqu'il y en aura entre 6 et 7 millions.
    cela se traduira par une table contact contenant entre autre le nom,prenom,la civilite, l'adresse(quoi que cela fera peut etre l'objet d'une autre table)
    Je dois egalement stocké associé a ces contacts tout un ensemble d'informations tel que le telephone,l'email mais aussi la csp et des infos sur les gouts ou activité d'achat, activité sportive.
    Ces données ne sont pas toutes renseignés pour tous les contacts.
    Ma question j'y arrive, c'est comment stocker ces données ?
    ma facon de faire serait de creer une table info_contact avec evidemment une cle etrangere vers la table contact. un champ Id_type_info qui permettra de savoir quel type d'info on trouve et un champ valeur contenant la valeur elle meme.
    Cette table vous l'aurez compris risque de contenir au bas mot 40 à 50 millions de ligne. Du coup j'ai peur que cela ne permette pas d'avoir des temps de reponse rapide lors du requete et c'est justement ce qui m'importe.
    il y aura tres souvent des interrogations du type "donnez les contacts dont la csp est employé, qui ont un email de renseigné et qui ont acheté dans les 12 derniers mois."
    je vais me lancer dans des tests avec un generateur de données afin de pouvoir tester quelques requetes pour voir le temps de reponse.
    Si vous avez des conseils , je suis preneur.

    Merci

    Maveric

    P.S : désolé pour la longueur du message

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Bonjour,

    Je travaille avec des tables de plusieurs milliards de records.

    Voici mes conseils:

    Liste toutes les colonnes nécessaires. Sépare-les en trois catégories: Contenu unique, Contenu non-unique et Contenu marginal.

    Contenu unique: Comment puis-je identifier mon record à même le contenu? L'adresse email garantie l'unicité et est un standard. Tu peux ajouter des choses comme le nom, des éléments de l'addresse. Uniquement les champs obligatoires doivent être choisis. Si l'adresse email n'est pas obligatoire, elle vous est inutile dans cette catégorie.

    Contenu non-unique: Le contenu que je voudrai aller chercher et qui n'est pas déjà dans le première catégorie.

    Contenu texte marginal: des informations qui sont peu souvent utilisées.

    Le contenu unique doit être combiné pour construire la clé unique "clustered" avec l'aide d'un identifiant unique incrémental si l'unicité n'est pas garantie à 100%.

    Le contenu non-unique est combiné avec les première colonnes pour former la table principale.

    Le contenu marginal doit être stocké dans une table différente de façon tabulaire, c'est-à-dire qu'un record dans la table principale peut être lié 0 à n records dans cette table dépendemment s'il possède le contenu marginal en question.

    Table 1
    Contact_id int (pk)
    email nvarchar(255) (pk)
    firstname
    lastname
    phonenumber

    Table 2
    Contact_id int (pk)
    field_id int (pk)
    field_content ntext

    Table 3
    field_id int (pk)
    field_description

    Ensuite, d'après les besoins de données prévus, il faut contruire des index non-clustered en joignant la clé logique (Contact_id) avec les éléments de la requête et en stipulant en premier les champs-catégories (pays, sexe, etc.) qui aideront les seeks à éliminer les plus de données le plus vite possible. Une erreur à ne pas commettre: il ne sert à rien de mettre tous les champs dans un index en pensant accélérer les requêtes globales.

    Vérifie bien que tes index sont bien utilisés en regardant l'Execution plan.

    Commence avec ça.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Par défaut
    Merci Babyneedle pour tes elements de réponse.
    Je ne suis pas sur t avoir bien compris tes conseils.
    La séparation des colonnes en trois colonnes, ok
    Concernant les tables, ta table 1 est donc la table principale que tu enonces a un moment donné c'est cela ? elle contient le contenu dit unique.
    LA table 2 est celle qui contient le contenu non unique.
    tu utilises le type ntext pour le champ field_content qui certe peux accepter beaucoup de chose mais j'ai un peur de l'utilisation de celui ci car il va server souvent dans les requetes. Si le type nvarchar est suffisant pour stocker ce que j'ai a y mettre, me conseille tu plutot d'utiliser celui ci ?
    cette table est stocké de facon tabulaire, il y a n records pour 1 record dans la table principale.
    Enfin la table 3 est juste la table de description du contenu de la table 2.
    Il y a donc une table 4 pour le contenu marginal ?
    Est je bien tout compris ?
    J'ai comme un doute...

    J'en profite pour demander si quelqu'un connait un generateur de données
    pour sql server qui serait gratuit.

    Merci encore en tout cas Babyneedle d'avoir pris du temps pour repondre a ma demande un peu inhabituel sur ce forum.

    Maveric

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    A lire : http://sqlpro.developpez.com/cours/modelisation/merise/

    http://sqlpro.developpez.com/cours/optimiser/#L5


    Qu'est ce que vous appelez par générateur de données ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Par défaut
    Je connaissais les liens que tu donnes.
    Sqlpro donne de tres bons conseils.
    J'aurais aimé d'ailleurs avoir son avis sur mon probleme.

    J'entends par generateur de données un outil qui permet
    de generer de facon aleatoire des données dans des tables.
    Cela me permettra de me mettre en situation presque reel
    au niveau de la quantité de donnée et d'avoir le temps de reponse
    des futurs requetes.

    Eric

Discussions similaires

  1. modelisation question multi choix
    Par devhafid dans le forum Modélisation
    Réponses: 4
    Dernier message: 06/08/2013, 15h36
  2. Divers questions
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 06/08/2002, 21h57
  3. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11
  4. Question de faisabilité
    Par lisarasu dans le forum CORBA
    Réponses: 3
    Dernier message: 14/05/2002, 11h26
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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