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 :

Combien de colonnes par table pour optimiser ma base ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut Combien de colonnes par table pour optimiser ma base ?
    Bonjour,

    Je dois faire une BDD qui indique des caractéristiques sur des personnes.
    Il y a environ une centaine de caractéristiques dont 90% sont sous forme de small integer.
    Je pourrais tout mettre dans une seule base ou découper ces caractéristiques par catégories de caractéristiques. Je peux découper ces caractéristiques en une seule, 5 ou en 20 tables dans tous les cas ce serait cohérent.
    Je compte ensuite afficher ces caractéristiques parfois par groupe de 20 environ, mais parfois aussi par 10 ou 5 et aussi parfois toutes les caractéristiques affichées sur la même page.
    Je souhaite que ma base soit super performante et optimisée.
    J'utilise PostGreSQL et JEE.

    Ma question de noob en BDD : Est-ce qu'il y a une taille optimale en nombre de colonnes par table qui permettrait à ma base d'être plus rapide et économe en ressources puisque je peux aussi bien faire une seule table que 20 pour stocker mes données ?

    Si vous connaissez un article qui traite de ce sujet je suis également preneur.

    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    La réponse à ta demande ne se trouve pas dans le nombre de tables à créer. D'ailleurs le nombre de tables à créer ne se décrète pas, il se construit au fur et à mesure de la modélisation (Merise ou Uml)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je souhaite que ma base soit super performante et optimisée.
    Pour parvenir à ce résultat, il faut impérative normaliser ta base.

    Je serais étonné qu'en créant une seule table, il n'y est pas des redondances dans certains colonnes. Si c'est le cas, alors des difficultés certaines pour les INSERT, UPDATE et DELETE

    A mon avis, tu es dans la mauvaise section, il vaut mieux poster dans ALM

    http://www.developpez.net/forums/f62...sation/schema/

    Mais pour t'aider, il sera nécessaire de fournir plus d'explications et de donner les règles de gestion.

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Dans mon cas le nombre de tables à créer se décrète justement et le MCD que je vais faire va dépendre de la problématique d'optimisation machine.

    Je vais préciser ce que je cherche à faire : une base de personnes ou chaque personne a un ID unique integer en primary key, un pseudo unique en varchar et environ cent réponses à des questions. Chaque réponse est en fait un chiffre compris entre 1 et 10 stocké en smallint notnull avec 0 comme valeur par défaut.

    Un exemple de question : à quel point aimez vous les sushis ?
    Réponse : de 1 à 10, 1 pour pas du tout, 10 pour j'adore.

    Je peux donc garder une table unique "Table_cuisine" ou découper les réponses à ces questions en catégories de questions, par exemple "Table_cuisine_asiatique", "Table_cuisine_Mexicaine", avec en clé primaire ID_personne qui pointe vers la table "Personne"etc...

    Ma question est en fait je crois assez complexe et elle est sur l'optimisation.

    Quel est le nombre optimal de colonnes pour la performance d'une table qui contient un ID en primary et foreign key et des smallint ?
    J'imagine que ça doit dépendre du type de requêtes, du nombre de lignes et d'autres facteurs et j'aimerais en savoir plus sur le sujet.

    Dans l'article : http://sqlpro.developpez.com/OptimSQL/SQL_optim.html sur l'optimisation des bases il est recommandé de créer "des tables les plus petites possible" mais à quel point ? Est-ce que c'est mieux d'avoir cent tables avec seulement un ID et un smallint ? Est-ce que 10 tables avec un ID et 10 smallint c'est mieux, ou une seule table avec un ID et 100 smallint. ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Dans mon cas le nombre de tables à créer se décrète justement et le MCD que je vais faire va dépendre de la problématique d'optimisation machine.
    Expliques moi quand tu développeras pour 10 clients différents ou plus, avec des serveurs différents (processeurs, mémoire, etc), tu feras pour présenter ton MCD en fonction du matériel.

    Certes le matériel a de l'influence, mais faut-il encore que la base comporte des volumes importants ?

    Très souvent, l'optimisation dépend de la conception, de l'indexation, de la construction des requêtes.

    Pour JEE, je ne connais pas, mais pour PostGreSQL, ce n'est quelques tables en plus ou en moins qui vont réduire ou augmenter ses performances d'une façon significative.

    Après, il faut regarder les volumes qui être inclus, mais sur ce point, il n'y a aucune indication.

    Bon courage

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Comment ferez vous lorsqu'une nouvelle question sera ajoutée au questionnaire ? allez vous modifier votre schéma pour ajouter une colonne dans la table ?

    Vous n'avez pas donné beaucoup de détails, mais a priori dans votre cas, il vous faut une table personne, une table question, et une table associative contenant la note.

    PERSONNE :
    - PRS_ID
    - PRS_NOM
    - PRS_...

    QUESTION :
    - QST_ID
    - QST_LIB
    - ...

    PERSONNE_QUESTION :
    - PQ_ID
    - PQ_PRS_ID
    - PQ_QST_ID
    - PQ_NOTE

    Si par la suite vous voulez créer des catégories pour répondre à un besoin particulier, ce sera en plus bien plus facile avec ce modèle, puisqu'il suffira d'ajouter une colonne à la table Question pointant vers votre nouvelle table CATEGORIE_QUESTION

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Merci, à tous.

    Je vais utiliser vos recommandations pour créer ma BDD.

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

Discussions similaires

  1. liste des colonnes et tables pour une foreign key
    Par cbleas dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/06/2014, 08h23
  2. [WD15] désigner une colonne de table pour série
    Par wafiwafi dans le forum WinDev
    Réponses: 6
    Dernier message: 07/09/2011, 11h22
  3. C++ : passer par reference pour optimiser ?
    Par hpfx dans le forum Débuter
    Réponses: 5
    Dernier message: 06/10/2008, 17h23
  4. Quelques conseils pour optimiser ma base
    Par Kaimite dans le forum Débuter
    Réponses: 0
    Dernier message: 11/05/2008, 10h14

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