PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Hier 17:34:22

Alain V.
Membre

Du bon usage de NUMERIC quand sa valeur attent d'être connue.

Bonjour le forum,


J'ai compris qu'un champs NUMERIC ne peux pas avoir de valeur nulle.
Quelle est donc la bonne pratique pour définir un tel champs lorsque sa
valeur sera connue après l'insertion d'un tuple?


Voici un exemple fictif basé sur le coût de sortie de stock d'un
produit.

-- DROP TABLE sortie_stock;
CREATE TABLE sortie_stock (
produit CHARACTER VARYING(8),
pu_vente NUMERIC(5,2),
taxe_douane NUMERIC(5,2)
);
COPY sortie_stock(
produit,
pu_vente,
taxe_douane) FROM stdin;
carottes    50    0
\.

Lorsque les carottes sortent du stock on connaît leur prix de vente mais
on ne connais pas encore le coût du dédouanement pourtant celui-ci est
un élément des charges.


La solution que j'image c'est de mettre la colonne "taxe_douane" dans
une table séparée. Dans ce cas seules les valeurs douanières déjà
connues y seront présentes. Dans cette table séparée, je n'aurai donc
que des tuples contenant des valeurs déjà connues.


Est-ce la bonne pratique ou est-ce qu'il y a une pratique mieux adaptée
pour définir un champs NUMERIC dont on ne connaît pas encore la valeur
mais dont on est sûr que plus tard il sera différent de 0?


Je vous remercie par avance.

Hors ligne

#2 Hier 19:29:27

pifor
Membre

Re : Du bon usage de NUMERIC quand sa valeur attent d'être connue.

En général dans une base de données relationnelle, le fait qu'une colonne puisse avoir une valeur nulle ne dépend pas du type de la colonne mais de la présence d'une contrainte NOT NULL ou éventuellement d'un trigger.

Si la colonne n'a aucune contraite alors la valeur nulle est autorisée.


Exemple en 15.13:


select version();
                                                 version                        
                          
--------------------------------------------------------------------------------
--------------------------
 PostgreSQL 15.13 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (
Red Hat 8.5.0-26), 64-bit
(1 row)

create table tn(n numeric(5,2));
CREATE TABLE
insert into tn values(null);
INSERT 0 1
Null display is "NULL".
select * from tn;
  n   
------
 NULL
(1 row)

select * from tn where n is null;
  n   
------
 NULL
(1 row)

Précisez votre version de PostgreSQL et la présence éventuelle d'un trigger ou d'une extension qui changerait le comportement de PG.

Dernière modification par pifor (Hier 19:29:49)


Pierre

Hors ligne

Pied de page des forums