Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 12/05/2005, 11h07   #1
Membre à l'essai
 
Inscription : juillet 2002
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 40
Points : 20
Points : 20
Par défaut Probleme d'heritage curieux

Je possede deux tables : Personne, Homme (qui hérite de personne).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
CREATE TABLE "Personne"
(
  "ID" varchar(32) NOT NULL,
  "NomFamille" varchar(80),
  "Prenom1" varchar(80),
  CONSTRAINT "Personne_pkey" PRIMARY KEY ("ID"),
  CONSTRAINT "Personne_ID_key" UNIQUE ("ID")
) 
WITHOUT OIDS;
ALTER TABLE "Personne" OWNER TO postgres;
 
CREATE TABLE "Homme"
(
  "ID" varchar(32) NOT NULL,
  "NomFamille" varchar(80),
  "Prenom1" varchar(80)
) INHERITS ("Personne") 
WITHOUT OIDS;
ALTER TABLE "Homme" OWNER TO postgres;

Maintenant je voudrais créer une table couple qui possède une clé etrangere sur l'ID de Homme.

Avec le code suivant, ca marche pas

Code :
1
2
3
4
5
6
7
8
9
10
 
CREATE TABLE "Couple"
(
  "HommeID" varchar(32),
  "ID" varchar(32) NOT NULL,
  CONSTRAINT "Couple_pkey" PRIMARY KEY ("ID"),
  CONSTRAINT "Couple_Homme_fkey" FOREIGN KEY ("HommeID") REFERENCES "Homme" ("ID") ON UPDATE NO ACTION ON DELETE NO ACTION
) 
WITHOUT OIDS;
ALTER TABLE "Couple" OWNER TO postgres;
Il me met l'erreur : ERROR: there is no unique constraint matching given keys for referenced table "Homme"


Alors que si je met


Code :
1
2
3
4
5
6
7
8
9
10
 
CREATE TABLE "Couple"
(
  "HommeID" varchar(32),
  "ID" varchar(32) NOT NULL,
  CONSTRAINT "Couple_pkey" PRIMARY KEY ("ID"),
  CONSTRAINT "Couple_Homme_fkey" FOREIGN KEY ("HommeID") REFERENCES "Personne" ("ID") ON UPDATE NO ACTION ON DELETE NO ACTION
) 
WITHOUT OIDS;
ALTER TABLE "Couple" OWNER TO postgres;

Ca marche bien.


Pourtant je croyai qu'une table hérite de tous les champs de la table héritée. Je ne comprend pas où se trouve le problème, je sollicite donc votre aide.


Merci.
viddak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 14h38   #2
Membre habitué
 
Avatar de Tchinkatchuk
 
Homme Sylvain Gourvil
Freelance en développement Web
Inscription : mars 2005
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Gourvil
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Freelance en développement Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2005
Messages : 248
Points : 141
Points : 141
Je ne vois pas la différence entre tes deux derniers codes ! C'est peut-etre moi lol.

Juste une chose. En postgresql, mieux vaut eviter les majuscules dans les noms de tables et de colonnes. Ca amene de serieuses galeres pour peu de choses. J'avais fait pareil et j'ai du tout modifié.
Contrairement à MySQL par exmple, Postgres respecte la casse minuscule/majuscule
Tchinkatchuk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 14h58   #3
Membre à l'essai
 
Inscription : juillet 2002
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 40
Points : 20
Points : 20
Effectivement, y'avai une erreur dans mon copier-coller, mais maintenant c corrigé.
La différence entre les deux codes se trouve dans la définition de contrainte de la clé etrangère.

Et merci pour la précision sur la casse. mais jusqu'a present, ca ne m'a jamais posé de problème (je croise les doigts)

Quelqu'un aurait-il une idée?

Merci.
viddak 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 22h01.


 
 
 
 
Partenaires

Hébergement Web