2011-02-11 3 views
0

J'ai toujours essayé de rendre ma base de données sql aussi simple et compréhensible que possible. Jusqu'à maintenant j'utilisais toujours un nombre limité de colonnes, je crois que je n'en avais jamais plus de 20. Maintenant, il y a une chose qui me faciliterait la vie, si j'avais beaucoup plus de colonnes. Disons 200 colonnes. (pas de rangées). Qu'est-ce que tu en penses? Je veux juste savoir, si c'est une mauvaise idée, pas pourquoi je fais cela ou s'il y a d'autres possibilités, juste si quelqu'un a déjà vécu quelque chose comme ça et si c'est une mauvaise idée de le faire une table.Conception de colonne SQL Server

+0

Pourriez-vous donner un peu plus de contexte sur pourquoi vous avez besoin de tant de colonnes? –

+0

utilisez-vous plus de 100 colonnes dans un sqltable? J'ai l'impression que vous n'avez pas lu mon texte ci-dessus ... – Luke

+4

Si vous en avez plus de 30, vous vous trompez probablement, ou vous avez choisi un projet d'héritage merdique sur lequel travailler. – Phill

Répondre

1

Je ne pense pas que ce soit en noir et blanc. Avoir une grande taille de rangée (impliquée par le grand nombre de colonnes) nuira aux performances (c'est-à-dire, plus d'E/S) - mais il y a des cas où un petit coup de performance à un endroit sera compensé par une performance accrue dans d'autres. Je dirais que cela dépend du nombre de lignes que vous attendez de cette table, de la fréquence à laquelle elle sera interrogée, du nombre de colonnes supplémentaires qui seront vraiment accessibles et de la façon dont elle sera comparée à votre conception alternative. termes d'efficacité et de complexité.

+0

Salut, merci beaucoup. Disons, qu'il y aura, eh bien, une énorme quantité de lignes. Mais la plupart du temps seulement 3 colonnes seront accessibles, et surtout, laissez-moi compter, un nombre maximum de 20 lignes, filtrées par ID. Mais l'accès est fréquent, les données en sortent assez petites – Luke

+0

@Luke - Principalement les mêmes 3 colonnes ou une variable 3 colonnes? –

+0

il serait basé sur le modèle d'héritage linq à sql, donc non, bien sûr, pas les mêmes 3 colonnes, pour seulement 3 colonnes je ne crée pas une table avec 200 colonnes ;-) – Luke

1

Luke--

Cela dépend vraiment du type de système que vous travaillez. Exemple dans les systèmes transactionnels, la plupart des tables ont au plus 50 colonnes ou presque sans attributs de données redondants (si vous avez une date de processus, vous n'avez pas besoin du mois de processus ou de l'année de processus en tant que colonne séparée). Ceci est bien sûr dû au fait que les enregistrements sont fréquemment mis à jour/insérés et que vous devez mettre à jour tous les attributs redondants chaque fois que vous mettez à jour une ligne. Dans les environnements Data Warehouse/reporting, pour les tables Dimension (qui possèdent les attributs d'une entité), il est généralement possible d'avoir 100 colonnes, car il peut y avoir différentes manières de catégoriser une entité donnée. Les mises à jour sont ici pas tellement un problème que les données sont généralement chargées une fois pendant les heures creuses, puis est utilisé principalement dans les sélections.

Jetez un oeil à ces liens pour en savoir plus ..

http://en.wikipedia.org/wiki/Database_normalization

http://en.wikipedia.org/wiki/Star_schema

La réponse est que cela dépend ... Si vous voulez un système parfaitement relationnel, alors peut-être 200 + colonnes est une sorte de drapeau rouge indiquant que vous devriez chercher à normaliser vos données (peut-être pas). Les mises à jour et les index sont deux choses qui devraient vous intéresser dans un tel système.

2

Moins de colonnes de plus petite largeur est préférable à beaucoup de colonnes et/ou de colonnes de grande largeur.

Pourquoi? Plus la taille des lignes est étroite, plus les lignes sont nombreuses sur une page de 8 Ko. Cela signifie que vous faites moins d'E/S et utilisez moins de mémoire pour mettre en mémoire tampon les pages. C'est toujours une bonne chose.

Dans ces (rares) cas où le domaine requiert de nombreux attributs sur un objet (avec la supposition d'un mappage de table objet 1-1), vous devez envisager de scinder en deux tables une relation 1-1, une contenant les colonnes fréquemment utilisées.

Questions connexes