Problem d'unicité

cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 - 20 nov. 2009 à 11:02
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 - 14 déc. 2009 à 11:43
Bonjour,
je voudrais que le champ numero_facture d'une table soit unique mais uniquement quand il est non null

c'est a dire que tant que ma facture est pas validée , il peut etre nul (facture ne attente de validation) puis on lui attribue un numéro qui doit etre unique.
ma facture contient deja un champ id qui est sa clé primaire
Pour l'instant quand je mets unique a numero_facture , je ne peux pas en avoir deux null ....

Comment puis je faire ?

3 réponses

Afisse Messages postés 4 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 10 décembre 2009
10 déc. 2009 à 23:10
Quel intérêt puisque ton champs id te garantie l'unicité de tes entrées ?
Et puis, une facture n'est pas censé avoir un numéro unique ?
Est-ce que tu peux donner le schéma de tes tables afin d'y voir plus clair.
Car à priori, en SQL, je ne vois pas comment assuré l'unicité sur un sous-ensemble de n-uplets.
Toutefois sur Oracle, il existe les triggers qui resolvent ton problème.
Mais les triggers n'existe pas en SQL :/
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
11 déc. 2009 à 11:41
Une facture est bien censé avoir un numéro unique mais disons que le numero dont je parle est la reference en comptabilite par laquelle on va retrouver la facture . Donc tant quej'ai pas valider ma facture (elle est pas en compta...) j'ai pas besoin de numero, je la retrouve par l'id
mais une fopis que j'ai verifié que tous les leements sont corrects je l'enregsitre en compta avec un numéro de facture que je désire unique ( comme ca si je demande au programme de me sortir les elements de la facture n° tant a partir de la compta, je usis sur de pas en avoir plusieurs mélangés. Voila
0
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 2
14 déc. 2009 à 11:43
Salut,

Tu crées une séquence que tu utilisera pour l'attribution d'un numéro. Exemple (SQL standard):
CREATE SEQUENCE seq_num_fact INCREMENT 1 START 1


Et pour appeler une nouvelle valeur (par exemple dans un update):
UPDATE factures set numfact= NEXTVAL(seq_num_fact);


Evidemment, tu vires la contrainte d'unicité sur ton champ pour pas avoir le problème avec les valeurs nulles. De toute façon tu as une autre clé primaire, et la séquence te garantira d'avoir une nouvelle valeur pour chaque enregistrement.

@+

Si l'envie te prend de travailler, assied-toi et attend qu'elle te passe! (vieux -et faux!- dicton corse)
0
Rejoignez-nous