Oracle
 sql >> Base de données >  >> RDS >> Oracle

Des inconvénients aux drapeaux de bits dans les colonnes de la base de données ?

Si vous n'avez qu'une poignée de rôles, vous n'enregistrez même pas de stockage espace dans PostgreSQL . Un integer la colonne utilise 4 octets, un bigint 8 octets. Les deux peuvent nécessiter un rembourrage d'alignement :

  • Comprendre la taille des lignes Postgres
  • Calculer et économiser de l'espace dans PostgreSQL

Un boolean la colonne utilise 1 octet. En effet, vous pouvez adapter quatre colonnes booléennes ou plus pour un integer colonne, huit ou plus pour un bigint .

Tenez également compte du fait que NULL les valeurs n'utilisent qu'un seul bit (simplifié) dans le bitmap NULL.

Les colonnes individuelles sont plus faciles à lire et à indexer . D'autres ont déjà commenté cela.

Vous pouvez toujours utiliser des index sur des expressions ou des index partiels pour contourner les problèmes d'index ("non-sargable"). Déclarations générales telles que :

la base de données ne peut pas utiliser d'index sur une requête comme celle-ci

ou

Ces conditions ne sont pas SARGables !

ne sont pas tout à fait vrais - peut-être pour d'autres RDBMS dépourvus de ces fonctionnalités.
Mais pourquoi contourner alors que vous pouvez complètement éviter le problème ?

Comme vous l'avez précisé, nous parlons de 6 types distincts (peut-être plus). Aller avec un boolean individuel Colonnes. Vous économiserez probablement même de l'espace par rapport à un seul bigint . L'espace requis semble sans importance dans ce cas.

Si ces drapeaux étaient mutuellement exclusifs , vous pouvez en utiliser un colonne de type enum ou une petite table de recherche et une clé étrangère y faisant référence. (Éliminé dans la mise à jour de la question.)