Pages: 1
- Sujet précédent - Quel type de champ pour des valeurs multiples dans PostgreSQL ? - Sujet suivant
#1 Tue 02 February 2010 14:46
- Wheintz
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 12 Sep 2005
- Messages: 43
Quel type de champ pour des valeurs multiples dans PostgreSQL ?
Bonjour à tou(te)s,
Je souhaiterais créer dans une table Postgresql un champ contenant une liste de valeurs prédéfinies (type ENUM) et pour lequel il soit possible de sélectionner plusieurs valeurs pour un même enregistrement.
Ce type existe dans Mysql (SET) et je me demandais s'il y avait un équivalent dans Postgresql (je n'ai pas l'impression qu'ENUM permette le choix multiple).
Merci beaucoup pour votre aide.
Wilfried
Hors ligne
#2 Tue 02 February 2010 19:21
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3175
- Site web
Re: Quel type de champ pour des valeurs multiples dans PostgreSQL ?
Bonjour,
A relire la doc il me semble que ce n'est pas possible, ENUM ne permet effectivement pas le choix multiple.
Par contre il y a la possibilité de faire un type défini par l'utilisateur ce qui impose de créer les fonctions d'entrée et de sortie.
A user-defined type must always have input and output functions. These functions determine how the type appears in strings (for input by the user and output to the user) and how the type is organized in memory.
Pour ma part j'opterais pour un type chaîne de caractère ou entier long où je coderai les valeurs multiples comme on le fait classiquement en programmation. Par exemple: FontStyle= Bold OR Underline ce qui donne du gras souligné comme format de texte, si j'ai huit valeurs possible j'affecte un rang de bit pour chaque valeur ce qui me donne un entier pour chaque valeur, et un OR sur deux ou huit valeur me donne un entier qui représente la combinaison des valeurs, donc du choix multiple. D'une manière ou d'une autre je pense qu'il faut nécessairement du code.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#3 Thu 04 February 2010 09:08
- JRM
- Participant assidu
- Lieu: Arras
- Date d'inscription: 15 Apr 2009
- Messages: 521
Re: Quel type de champ pour des valeurs multiples dans PostgreSQL ?
Les champs multivalués finissent généralement par devenir galère à gérer, pourquoi ne pas opter pour relation un-vers-plusieurs puis utiliser une vue et une agrégation ? Voici un vieil exemple passé sur la liste pgsql-sql :
une relation 1-n Doc > Auteur
CREATE AGGREGATE textcat_all
(
basetype = text,
sfunc1 = textcat,
stype1 = text
);
puis :
SELECT da.DocId, textcat_all( a.Auteur_non || ',' )
FROM docs_auteurs da, auteurs a
WHERE da.auteurId = a.id
GROUP BY da.DocId;
Pour un doc ça te retournera une liste d'auteurs séparé par une virgule
Hors ligne
#4 Fri 05 February 2010 15:40
- Wheintz
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 12 Sep 2005
- Messages: 43
Re: Quel type de champ pour des valeurs multiples dans PostgreSQL ?
Bonjour,
Merci pour vos réponses ... J'avoue que je souhaitais utiliser les champs multivalués pour ne pas me compliquer la tache ... C'est pas gagné !
wilfried
Hors ligne
Pages: 1
- Sujet précédent - Quel type de champ pour des valeurs multiples dans PostgreSQL ? - Sujet suivant