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 21/05/2003, 18h03   #1
Invité de passage
 
Inscription : mai 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6
Points : 0
Points : 0
Par défaut [Postgresql][Foreygnkey][REFERENCES]

Voici mes tables (Postgres) :

Une table Langue qui decrit differentes langues :
Code :
1
2
3
4
5
 
CREATE TABLE Langue (
id SERIAL PRIMARY KEY,
intitule VARCHAR(30) NOT NULL
);
Une table qui fait reference à Langue, la "clée primaire" est la combinaison de 'id' et 'lang_id' :

Code :
1
2
3
4
5
6
CREATE TABLE Domaine (
id CHAR(3) NOT NULL,
intitule VARCHAR(60) NOT NULL ,
lang_id INTEGER NOT NULL REFERENCES Langue(id) ON DELETE RESTRICT,
CONSTRAINT domaine_langue PRIMARY KEY (id, lang_id)
 );
Et attention une table "Groupe" qui veut faire reference à la "Langue" et à "domaine" :

Code :
1
2
3
4
5
6
CREATE TABLE Groupe (
id CHAR(4) NOT NULL,
intitule VARCHAR(60) NOT NULL,
domaine CHAR(3) NOT NULL :evil:  :twisted:  ,
lang_id INTEGER NOT NULL REFERENCES Langue(id) ON DELETE RESTRICT,
);
Le probleme est au niveau des petits demons, impossible de faire une REFERENCES (Foreign key) sur "id" de "domaine" puisqu'il n'est pas unique ce qui est normal...
Comment pourrait-on faire ?
J'espere que mes explicatoins sont claires...
Merci


[Modéré par Stessy]
Modification du titre + ajout de TAG
Ajout de balises [code]

Prière de lire les règles du forum

Merci
elrik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2003, 11h32   #2
Invité de passage
 
Inscription : mai 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6
Points : 0
Points : 0
Par défaut Deplacement

Merci pour la remise en forme, mais le deplacement est sans objet, ma question n'est pas specifique à postgresql, mais a toute base utilisant les clés etrangères...
elrik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2003, 13h26   #3
Rédacteur
 
Inscription : juillet 2002
Messages : 346
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : juillet 2002
Messages : 346
Points : 455
Points : 455
Tu pourrait par exemple faire un trigger qui vérifierais l'existantce de l'id dans la table domaine (et dans le cas ou il n'existe pas annulerais l'insertion et provoquerait une erreur). Ou sinon regarde la fonction SQL CHECK tu doit pouvoir faire quelque chose comme ça (mais je ne suis pas sur je n'ai pas essayer)
Code :
CHECK id IN (SELECT DISTINCT id FROM domaine)
en espèrant que celà t'a aider
woodwai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2003, 14h46   #4
Invité de passage
 
Inscription : mai 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6
Points : 0
Points : 0
Par défaut Marche pas

Malheureusement PostgreSQL (7.3.2) ne prend pas les sous-requette dans les CHECK
IL va donc falloir se rabattre sur les Trigger...

Il n'y a donc aucun moyen de faire une clé étrangère sur un champs Non Unique ??
elrik 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 02h24.


 
 
 
 
Partenaires

Hébergement Web