Nombre maximal de colonnes dans une table

Problem1: Quel est le nombre maximal de colonnes que nous pouvons avoir dans une table

Problem2: Quel est le nombre maximum de colonnes que nous devrions avoir dans une table

SQL 2000: 1024

SQL 2005: 1024

SQL 2008: 1024 pour une table non-large, 30k pour une table large.

Les tables larges sont pour quand vous avez utilisé la nouvelle fonctionnalité de colonne clairsemée dans SQL 2008 qui est conçu pour lorsque vous avez un grand nombre de colonnes qui sont normalement vides.

Juste parce que ces limites sont disponibles, ne signifie pas que vous devriez les utiliser cependant, je commencerais par concevoir les tables en fonction des besoins et ensuite vérifier si un partitionnement vertical de 1 table en 2 tables plus petites est requirejs etc.

Réponse 1: Probablement plus que ce que vous avez, mais pas plus que ce que vous deviendrez.

Réponse 2: Moins que vous avez.

Poser ces questions indique généralement que vous n'avez pas bien conçu la table. Vous pratiquez probablement l'antipattern Metadata Tribbles . Les colonnes ont tendance à s'accumuler avec le time, créant un set illimité de colonnes qui stockent essentiellement le même type de données. Par exemple subtotal1 , subtotal2 , subtotal3 , etc.

Au lieu de cela, je suppose que vous devez créer une table dépendante supplémentaire, de sorte que vos nombreuses colonnes deviennent plusieurs lignes. Cela fait partie de la design d'une database normalisée appropriée.

 CREATE TABLE Subtotals ( entity_id INT NOT NULL, year_quarter SMALLINT NOT NULL, -- eg 20094 subtotal NUMERIC(9,2) NOT NULL, PRIMARY KEY (entity_id, year_quarter), FOREIGN KEY (entity_id) REFERENCES Entities (entity_id) ); 

Mon ancien collègue a également écrit un blog à ce sujet:

Comprendre le nombre maximum de colonnes dans une table MySQL

La réponse n'est pas si simple que vous pourriez le penser.

1) http://msdn.microsoft.com/fr-fr/library/aa933149%28SQL.80%29.aspx

1024 semble être la limite.

2) Beaucoup less de 1024 :). Sérieusement, cela dépend de la normalisation de votre DB. Généralement, less vous avez de colonnes dans une table, plus il sera facile à comprendre pour quelqu'un (normalement). Comme pour une table de personnes, vous pouvez stocker l'adresse de la personne dans une autre table (adresse_personne, par exemple). Il est préférable de split vos données en entités qui ont un sens pour votre model d'entreprise et d'aller de l'avant.

2) Il y a beaucoup de lignes direcsortingces là-bas. En particulier en ce qui concerne la normalisation de la database. Le principe primordial est toujours de pouvoir s'adapter. Semblable aux classs, les tables avec un grand nombre de colonnes ne sont pas très flexibles. Certaines des questions que vous devriez vous poser:

  • La colonne A décrit-elle un atsortingbut de l'object (table) qui pourrait / devrait être groupé avec la colonne B
  • Mise à jour des données Gardez à l'esprit que la plupart des SGBDR effectuent un locking de ligne lors de la mise à jour des valeurs. Cela signifie que si vous mettez constamment à jour la colonne A pendant qu'un autre process met à jour la colonne B, ils se battront pour la ligne et cela créera une contention.

La design de database est un art plus qu'une science. Bien que les directives et les limites techniques vous amènent dans la bonne direction, il n'y a pas de règles ssortingctes qui feront fonctionner votre système ou échoueront à 100%.

  1. Je pense que 4096 dans mysql, SQL Server je ne sais pas
  2. J'ai posé la même question il y a quelques mois dans un scénario spécial, peut-être que les réponses vous aident à décider. Habituellement, aussi peu que possible, je dirais.