77 votes

Tinyint vs Bit?

Je ne veux pas déclencher une guerre religieuse ici, mais il semble y avoir deux écoles de pensée sur la manière de représenter les valeurs booléennes dans une base de données. Certains disent que bit est le type de données approprié, tandis que d'autres soutiennent que tinyint est meilleur.

Les seules différences que je connais sont les suivantes :

  • bit : la taille de stockage est de 1 bit, les valeurs possibles sont 0 ou 1
  • tinyint : la taille de stockage est de 1 octet, les valeurs possibles sont de 0 à 255

Quel type de données est le meilleur lorsque vous devez représenter des valeurs booléennes ? tinyint vaut-il la surcharge supplémentaire "au cas où" vous auriez besoin de valeurs > 1 ?

86voto

ScottS Points 5247

Lorsque vous ajoutez une colonne bit à votre table, elle occupera un octet entier dans chaque enregistrement, pas seulement un seul bit. Lorsque vous ajoutez une deuxième colonne bit, elle sera stockée dans le même octet. La neuvième colonne bit nécessitera un deuxième octet de stockage. Les tables avec 1 colonne bit ne bénéficieront d'aucun avantage de stockage.

Tinyint et bit peuvent tous deux fonctionner, je les ai utilisés avec succès et je n'ai pas de préférence marquée.

18voto

Mike Robinson Points 12273

Peu importe... sauf si vous faites partie du clan "vrai / faux / fichier introuvable"

Au cas où vous n'auriez pas compris la référence...

Et dans le cas de Linq2SQL, le bit fonctionne avec vrai/faux ce qui facilite la programmation. Il y a des avantages des deux côtés.

Et il faut également prendre en compte la maintenance de la programmation. Que se passe-t-il si vous (ou un programmeur stagiaire junior) utilisez un 2, 3, 25, 41, 167, 200 etc.? Où est-ce documenté? Les bits sont auto-documentés et assez universels.

15voto

John Rudy Points 16436

J'utilise des bits lorsque cela est approprié. Mis à part le fait que c'est le type sémantiquement correct (les sémantiques comptent!), plusieurs champs de bits (jusqu'à 8) dans une seule ligne (sur SQL Server, en tout cas) peuvent être consolidés en un seul octet de stockage. Après le huitième, un octet supplémentaire est nécessaire pour les 8 suivants, et ainsi de suite.

Références:

5voto

armandino Points 4360

2voto

tvanfosson Points 268301

Boolean, par définition, permet seulement deux valeurs. Pourquoi auriez-vous besoin de plus d'un seul bit pour cela? Si vous avez besoin d'une logique à trois états (ou plus), utilisez un type de données plus grand, mais je resterais (et je reste) avec des champs de bits pour la logique booléenne standard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X