Problème de clef etrangère

Problème de clef etrangère - SQL/NoSQL - Programmation

Marsh Posté le 23-06-2005 à 16:09:29    

Hello tout le monde !
Bon alors j'ai un petit problème de FK sous postgresql 8.0, je déclare des contraintes de clef étrangères dans deux tables de façon totalement similaire, sur une cela fonctionne très bien mais sur l'autre pas du tout.
Voila mes 2 tables :
 


CREATE TABLE DonneesProjet (
  -- la clef primaire
  id serial NOT NULL,
 
  -- le fichier  
  fichier integer,
  ligne integer,
 
  PRIMARY KEY(id),
  FOREIGN KEY(fichier) REFERENCES Fichier ON DELETE SET NULL,
  FOREIGN KEY(ligne) REFERENCES Ligne ON DELETE SET NULL
);
CREATE INDEX DonneesProjet_Fichier_INDEX on DonneesProjet(fichier);
CREATE INDEX DonneesProjet_ligne_INDEX on DonneesProjet(ligne);
 
CREATE TABLE LiaisonOptique (
  id serial NOT NULL,
 
  port1 integer,
  port2 integer,
  ligne integer,
 
  PRIMARY KEY(id),
  FOREIGN KEY(port1) REFERENCES Port ON DELETE SET NULL,
  FOREIGN KEY(port2) REFERENCES Port ON DELETE SET NULL,
  FOREIGN KEY(ligne) REFERENCES Ligne ON DELETE SET NULL
) INHERITS (ObjetReseau);
CREATE INDEX LiaisonOptique_port1_INDEX on LiaisonOptique(port1);
CREATE INDEX LiaisonOptique_port2_INDEX on LiaisonOptique(port2);
CREATE INDEX LiaisonOptique_ligne_INDEX on LiaisonOptique(ligne);


 
Mon problème concerne la clef étrangère 'ligne' qui est la même dans les deux tables. Lorsque j'edite mes tables (avec pgAdmin par exemple) et je modifie DonneesProjet.ligne à une mauvaise valeur (il n'y a pas d'enregistrement ligne correspondant) il râle et me dit qu'il y a une contrainte (là c bon) mais lorsque je modifie LiaisonOptique.ligne et que je mets n'importe quoi comme valeur alors il ne me dit rien le bougre ... alors qu'il y a une contrainte d'integrité !
 
Je ne vois pas ou se situe le problème ...  :(

Reply

Marsh Posté le 23-06-2005 à 16:09:29   

Reply

Marsh Posté le 28-06-2005 à 13:56:49    

Personne pour me dépanner ? :/

Reply

Marsh Posté le 28-06-2005 à 17:33:58    

C'est quoi le "INHERITS" ? Connait pas cette clause.

Reply

Marsh Posté le 29-06-2005 à 08:38:46    

Ca permet de faire de l'heritage, d'ou le nom de SGBDRO -> Serveur de Gestion de Base de Données Relationnel Objet

Reply

Marsh Posté le 29-06-2005 à 16:17:37    

Je me demande si ça ne vient pas de ça.
 
Fais juste un test sans, histoire de voir si ça résoud le problème. Si c'est le cas, regarde au niveau de la table "mère" si y'a pas un truc qui pourrait bloquer ta FK

Reply

Marsh Posté le 30-06-2005 à 10:02:21    

http://dev.mysql.com/doc/mysql/en/ [...] aints.html
 
Vérifies que tu réponds (c'est une checklist quoi) bien à toutes les conditions énumérées à cette page (notamment le type des tables, et la syntaxe ... )

Reply

Marsh Posté le 30-06-2005 à 10:07:11    

EDIT : Je viens de relire ton post là   je crois que j'ai pas bien compris ce que tu voulais faire
Tu peux être plus explicite stp ?


Message édité par Zzozo le 30-06-2005 à 10:14:26
Reply

Marsh Posté le 05-07-2005 à 17:02:35    

C'est bon j'ai trouvé la cause de mon problème :

Citation :

A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children. This is true on both the referencing and referenced sides of a foreign key constraint.


issue de la doc postgresql 8.0 : http://www.postgresql.org/docs/cur [...] herit.html


Message édité par Ummon le 05-07-2005 à 17:03:27
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed