Le nombre de colonnes est trop de colonnes?
J'ai remarqué que beaucoup de gens ici citer les tables avec 20+ (j'ai vu jusqu'à 55) les colonnes dans une table. Maintenant, je ne prétends pas être une conception de base de données expert, mais j'ai toujours entendu dire que c'est une pratique horrible. Quand je vois cela, j'ai l'habitude de suggérons de diviser en deux tables avec une relation: l'un contenant le plus fréquemment utilisé pour les données, l'autre avec le moins souvent utilisé des données. Si dans le même temps, il y a le problème de la performance (moins de Jointures et tel). Donc ma question est: est-ce
Quand il s'agit de vraiment GRANDE échelle des bases de données, est-il un avantage d'avoir une grande quantité de colonnes, malgré le fait que cela entraîne de nombreuses valeurs NULL?
Qui est plus de performances: beaucoup de colonnes avec beaucoup de Zéros, ou moins de colonnes avec beaucoup de Jointures?
- Semble assez évident que cela dépend entièrement sur les exigences de la base de données et le poids de chaque opération est effectuée sur elle. Merci pour les réponses.
- Je pensais que le processus a été la conception de la base de données et des tables de 3ème ou de la 4ème à la forme normale, puis éliminer pour la performance. N'est pas le processus et le nombre de colonnes, et pas développeur sentiments?
Vous devez vous connecter pour publier un commentaire.
La conception de la table dépend de l'entité qu'elle a besoin de stocker. Si toutes les données appartiennent ensemble, puis de 50 colonnes (ou même 100) pourrait être la bonne chose à faire.
Aussi longtemps que la table est normalisé, il n'y a pas de règle générale concernant la taille, outre les fonctionnalités de base de données et la nécessité d'optimiser.
Je suis d'accord avec Oded. J'ai vu des tables avec 500 colonnes en eux, et toutes les colonnes d'entre eux étaient à la bonne place. Il suffit de considérer le nombre de faits que l'on pourrait le souhaiter stocker sur un objet du quotidien, et vous verrez bientôt pourquoi.
Si elle s'avère gênant pour sélectionner toutes les colonnes, ou pour spécifier les colonnes à sélectionner lorsque vous êtes uniquement intéressé par une faible proportion d'entre eux, vous pouvez trouver qu'il est utile de définir une vue.
Quand vous vous sentez qu'il n'a plus de sens ou est en droit d'ajouter une autre colonne.
Dépend en général de l'application.
odbc a une limite de caractères de 8000 .... donc, c'est une limite physique au-delà de laquelle les choses deviennent extrêmement frustrant.
J'ai travaillé sur une table qui a eu 138 colonnes .. c'était horriblement écrite et pourrait avoir été normalisés. Bien que cette base de données semble d'été de la création de quelqu'un demande pourquoi il y a des conventions de conception de base de données et de décider de toutes les tester à la fois.
D'avoir un très large aplatie tables est assez commun quand vous entrez dans l'entreposage de données et de serveurs de rapports. Ils sont tout simplement beaucoup plus vite et dire que vous n'avez pas à stocker votre base de données entirley dans la mémoire ram pour des performances.
Selon mon expérience, il est préférable d'avoir moins de jointures que ceux qui ont tendance à se produire trop souvent, surtout dans les grandes bases de données. Aussi longtemps que vos tables de base de données sont conçus pour stocker de l'entité unique (des étudiants, des enseignants et ainsi de suite) cela devrait être ok. De sorte que ce sera représenté par un objet en vous code plus tard. Donc, si vous divisez l'entité à plusieurs tables, vous devrez utiliser plusieurs jointures afin de remplir votre objet plus tard. Aussi, si vous utiliser un ORM pour générer votre couche d'accès aux données (telles que Linq dans .Net) est la volonté de générer des classes séparées pour chaque table (avec bien sûr une relation entre eux, mais quand même) et ce sera plus difficile à utiliser.
Une autre chose est que vous pouvez spécifier les colonnes à retourner dans votre requête et cela permettra de réduire les données transmises à votre demande, mais si vous avez besoin, même une seule colonne d'une autre table, vous aurez à faire la jointure. Et dans la plupart des cas que vous avez tellement de nombreuses colonnes, alors la probabilité d'avoir de grandes quantité de données stockées dans la base de données est élevé. Donc cette jointure serait dommage de plus, que les valeurs Null.
Chaque projet, j'ai travaillé sur est différent de sorte que vous devriez trouver l'équilibre pour chaque histoire.
Avoir un trop grand nombre de colonnes de résultats dans un grand nombre de valeurs nulles (le mal) et un lourd objet de la table est mis en correspondance. Ce phénomène nuit à la lisibilité de l'IDE et de l'entrave à l'entretien (augmentation des coûts de développement). Si vous avez besoin de lectures rapides, dans certains cas, l'utilisation anormale des tables par exemple, utilisé uniquement à des fins de reporting ou de requêtes (recherche de la "CQRS" pattern). Oui "Personne" a un million d'attributs, mais vous pouvez briser ces monothilic tables (de la conception précède normalisation) pour correspondre à de plus petites entités ("adresse", "téléphone", "passe-temps") au lieu de l'ajout de nouvelles colonnes pour chaque nouveau cas d'utilisation. Ayant la plus petite taille des objets (et les tables) apporte de nombreux avantages: elles permettent à des choses comme les tests unitaires, la programmation orientée objet, SOLIDES et pratiques.
Aussi, comme on ce qui concerne le regroupement de nombreuses colonnes pour éviter les jointures, je pense que le gain de performance d'éviter les jointures est perdu par l'indice de maintenance, en supposant une charge de travail typique des lectures et des écritures. Ajouter des index sur les champs, pour des raisons de performances de lecture pourrait être le signe d'un besoin de déplacer les champs dans leur propre table.
C'est purement dépend des données que vous stockez, les index que vous faites et ainsi de suite. Personne ne peut vous garantir que l'on travaille mieux qu'un autre, sans savoir à quoi êtes-vous le stockage. Généralement les règles de normalisation va vous forcer à part des données de différentes tables et utilisateur Clefs si vous avez une grande table, mais je suis en désaccord qu'il effectue TOUJOURS mieux qu'une grande table. Vous pouvez en finir avec 6-7 niveau des jointures dans des dizaines de requêtes qui sont parfois provoquer des erreurs car il y a beaucoup plus de chances de créer une erreur dans les requêtes plus que dans celles qui sont simples.
Si vous publiez certaines exigences de ce que vous faites peut-être nous pouvons vous aider avec la conception de la DB correctement.
Il a également dépend fortement du cas d'utilisation pour votre table. Si vous souhaitez l'optimiser pour la lecture alors il pourrait être une bonne idée de les garder dans un seul et même tableau.
Dans le monde SQL (cassandra/hbase par exemple) il n'y a pas de contraintes sur le nombre de colonnes et c'est en fait considérée comme une bonne pratique d'avoir plusieurs colonnes. Cela vient aussi de la façon dont il est stocké (pas de trous). La peine d'enquêter.
Ce dont les entreprises ont besoin nécessite plus de 60 colonnes dans tout ensemble de données, en plus d'une TSQL Table? S'il y a un besoin de l'entreprise, puis un Pivot est dans l'ordre, et les colonnes doivent être rangées. Par exemple, dans l'industrie Minière, il y a peut être de 600 différentes mesures prises dans un essai. Le nom de chaque mesure pourrait être un nom de colonne. Mais pourquoi créer une table avec 600 colonnes et des rangées de mesures? Un géologue de mesurer la mine chaque jour, peut-être, et de remplir le journal de 600 colonnes sur une seule ligne. Qui sonne pour moi comme le géologue va perdre son esprit, et il ne sera pas trouver une feuille de papier assez long. Peut-être un rouleau marcherait, mais alors il aurait à dérouler le rouleau et le rouler à nouveau de retour.
Il est préférable d'utiliser une seule table où vous pouvez éviter l'utilisation de jointures tout en interrogeant cela dépend si les colonnes sont de la même entité ou entité différente.
Par exemple, supposons que vous faites une conception de base de données pour les flux de travail où certains champs seront édités par de jeunes travailleurs, et certains champs par les seniors. Dans ce cas, il est préférable d'avoir toutes les colonnes dans une table unique.