Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/12/2010, 14h44   #1
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Par défaut Comment convertir un boolean?

Bonsoir;
Lors de ma première conversion de ma base de données qui était en paradox vers Firebird, j'ai convertis mes champs boolean en champs smallint.
Mais je me pose, maintenant, la question si ce n'est pas beaucoup mieux de les convertir en char(1)?
Pourtant je pense que char(1) est beaucoup plus léger que smallint mais la plus part des outils de conversion vers Firebird convertissent les champs boolean en smallint ou même integer .
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 18h19   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Tout simplement que le smallint ou integer se rapproche le plus de ce que pourrait être un vrai boolean.

Le plus souvent les langages de programmation code les boolean sur un octet (mais certain le code sur plus : un mot, un double voir même un long (4 octets)).

D'un point de vue binaire, en utilisant les valeurs 0 pour faux, et 1 (ou -1) pour vrai, le bit le plus faible sera a zéro pour faux et a 1 pour vrai. Ce qui est parfait pour les opérateurs binaires.

Si votre question c'est de savoir si un char ou un smallint (integer) sera plus performant, je dirais que c'est du pareil au même...

Si c'est une question d'occupation disque ou mémoire, vous vous embêtez pour rien, car CHAR(1) ne prend pas forcément 1 octet cela dépend du charset utilisé et de la lettre mise dedans.

Donc a mon avis le mieux c'est d'utiliser un smallint et même de créer un domaine. En attendant firebird 3.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
/* Null pour indéterminé , 0 pour faux et 1 pour vrai */
CREATE DOMAIN BOOLEAN
AS SMALLINT
CHECK (value IS NULL OR value IN (0, 1));
 
/* Utilisation : */
CREATE TABLE Ma_Table
(
ECHU      BOOLEAN, /* Absence de valeur (null) (indeterminé) ou 0 (faux) ou 1 (vrai) */
AFinir    BOOLEAN NOT NULL, /* Valeur obligatoire 0 (faux) ou 1 (vrai)*/
...
);
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 18h52   #3
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Citation:
Envoyé par Barbibulle Voir le message
Si c'est une question d'occupation disque ou mémoire, vous vous embêtez pour rien, car CHAR(1) ne prend pas forcément 1 octet
C'est de ça que je parle, mais même s'il ne prend pas 1 octet, je pense qu'il ne va pas prendre la même taille mémoire que integer. Non?
Et quelque soit la différence minime entre les deux tailles, elle sera considérable si l'on arrive au nombre de centaines de milliers d'enregistrements.
Citation:
Envoyé par Barbibulle Voir le message
cela dépend du charset utilisé et de la lettre mise dedans.
Comment choisir le charset et la lettre mise dedans?
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 19h29   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
non

Smallint est au moins sur 2 octets

Char(1) CHARACTER SET NONE est au moins sur 1 octet

Reste à savoir comment ils sont enregistrés sur un disque il est très probable que ces deux types occupent la même place.

De plus même s'il y avait un octet de différence quelle importance ?
Si vous avez une base avec des millions d'enregistrements ca ne ferait que quelques Mega octets. Sachant que les disques actuelles font des centaines de Giga pour les plus petits...
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 19h54   #5
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Alors vous opter pour smallint?
pourquoi pas alors integer?
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h45.


 
 
 
 
Partenaires

Hébergement Web