Précédent   Forum du club des développeurs et IT Pro > Bases de données > PostgreSQL > Outils
Outils Forum d'entraide sur les outils d'administration de PostgreSQL : PgAdmin, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/05/2010, 14h41   #1
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 164
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 164
Points : 41
Points : 41
Par défaut Créer menu déroulant au sein d'une base

[PostgrSQL 8.4 - pgAdmin 3 - OSX 10.6]

Bonjour à tous,

Décidément, ces derniers jours je poste beaucoup. Avant de migrer vers PostgreSQL, j'utilisais MySQL. Celui-ci possède un type de donnée qui s'appelle "enum".

Celui-ci me permettait d'avoir le choix d'une valeur dans une liste qui se déroulait. C'est très pratique pour savoir directement ce qu'on a comme choix et ne pas perdre de temps à se faire ramoner pour viol de contrainte.

Alors, pour contourner le problème j'ai créé d'autres tables pour simuler cet "enum". De par les lectures que j'ai eues, il semble que c'est là le moyen le plus propre de procéder.

Voici une base de donnée factice, dont le but est de savoir si un individu a des cheveux et de définir leur couleur:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- Table: test."Table1"
 
-- DROP TABLE test."Table1";
 
CREATE TABLE test."Table1"
(
  possede_cheveux character varying NOT NULL,
  "Couleur_cheveux" character varying,
  CONSTRAINT "Table1_pkey" PRIMARY KEY (possede_cheveux),
  CONSTRAINT "Table1_Couleur_cheveux_fkey" FOREIGN KEY ("Couleur_cheveux")
      REFERENCES test."Choix_Couleur" ("Couleur") MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT "Table1_possede_cheveux_fkey" FOREIGN KEY (possede_cheveux)
      REFERENCES test."Choix_Possede" ("Choix") MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
  OIDS=FALSE
);
ALTER TABLE test."Table1" OWNER TO postgres;
 
-- Index: test.fki_
 
-- DROP INDEX test.fki_;
 
CREATE INDEX fki_
  ON test."Table1"
  USING btree
  ("Couleur_cheveux");
liée à ces deux tables ci dessous:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
-- Table: test."Choix_Couleur"
 
-- DROP TABLE test."Choix_Couleur";
 
CREATE TABLE test."Choix_Couleur"
(
  "Couleur" character varying NOT NULL,
  CONSTRAINT "Choix_Couleur_pkey" PRIMARY KEY ("Couleur")
)
WITH (
  OIDS=FALSE
);
ALTER TABLE test."Choix_Couleur" OWNER TO postgres;
et

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
-- Table: test."Choix_Possede"
 
-- DROP TABLE test."Choix_Possede";
 
CREATE TABLE test."Choix_Possede"
(
  "Choix" character varying NOT NULL,
  CONSTRAINT "Choix_Possede_pkey" PRIMARY KEY ("Choix")
)
WITH (
  OIDS=FALSE
);
ALTER TABLE test."Choix_Possede" OWNER TO postgres;
La question devient donc:
Peut-on, lorsqu'on ajoute des données à la Table 1, avoir un petit menu déroulant reprenant les valeurs de la table liée par la clé étrangère , et ce pour chaque colonne?

Je vous remercie par avance,

A bientôt,

LeHibou2
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2010, 15h22   #2
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 164
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 164
Points : 41
Points : 41
Bon, je me réponds à moi-même.

Cela est prévu dans les prochaines versions… Wait and see.

A bientôt

LeHibou2
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2010, 12h04   #3
genamiga
Membre du Club
 
Inscription : janvier 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 127
Points : 49
Points : 49
En ce qui concerne le type ENUM, cela existe dans PostgreSQL depuis la version 8.3 je crois...

Code :
1
2
3
4
5
6
7
8
CREATE TYPE "public"."couleurs_cheveux" AS ENUM
  ( 'Blolnd', 'Roux', 'Brun', 'Noir');
 
CREATE TABLE "public"."commandes" (
...
"couleur_cheveux" "public"."couleurs_cheveux", 
...
 );
Par contre le menu déroulant cela dépend du programme dans lequel on encode les données.

Pour ma part j'utilise EMS SQM Manager Lite for PostgreSQL et j'ai en effet un menu déroulant me proposant les choix de l'ENUM.

Si par contre tu crée une application client ou une applet...tu dois alors lister le ENUM et construire avec cela ton menu déroulant.

Pour lister l'ENUM :

Code :
SELECT enum_range(NULL::couleurs_cheveux)
qui dans ce cas te retournera :

{Blond,Roux,Brun,Noir}
genamiga est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h28.


 
 
 
 
Partenaires

Hébergement Web