Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1535 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PostgreSQL] Clef étrangère sur un parent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PostgreSQL] Clef étrangère sur un parent

n°969106
Ummon
Posté le 02-02-2005 à 11:25:12  profilanswer
 

'jour à tous.
J'ai un petit problème avec postgreSQL, le voici :
 
* J'ai une table 'parent' dont l'identificateur est 'id' (entier) et une table 'enfant' qui dérive de 'parent'.
* J'ai une table 't1' qui référence la table 'parent' par une clef étrangère sur le champs 'id'.
* J'ajoute un enregistrement dans ma table 'enfant' avec 'id' = 1.
(jusque la tout va bien)
* J'ajoute un enregistrement dans ma table 't1' avec ma clef étrangère = '1' et la rien ne va plus :

ERROR:  insert or update on table "t1" violates foreign key constraint "<nom clef étrangère>"
DETAIL:  Key (parent)=(1) is not present in table "parent".


 
Bon alors peut-être que c'est simplement une limitation de postgreSQL mais si c'est le cas alors à quoi sert l'héritage ?!
 
[EDIT]
Pour être plus clair voici le schéma relationnel :
http://pifou.myftp.org/~bordel/exemple_heritage.GIF


Message édité par Ummon le 02-02-2005 à 11:43:09
mood
Publicité
Posté le 02-02-2005 à 11:25:12  profilanswer
 

n°969319
nraynaud
lol
Posté le 02-02-2005 à 13:39:44  profilanswer
 

"hériter" en relationnel-objet, c'est recopier toutes les colones de la table parente dans la table enfant, mais pas recopier les données.
 
ça veut dire que quand tu as créé un enfant, tu n'as pas créé un parent.

n°969369
Ummon
Posté le 02-02-2005 à 14:07:42  profilanswer
 

Argh!, mais alors quelle sont les solutions en sachant que je peux avoir plusieurs 'enfants' ?

n°970213
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-02-2005 à 09:48:41  profilanswer
 

TABLE ENFANT
ENFANT_ID (PK)
PARENT_ID (FK, non unique)
champs...


Message édité par Arjuna le 03-02-2005 à 09:49:32
n°970279
Ummon
Posté le 03-02-2005 à 10:29:53  profilanswer
 

Euh... ouais mais t1 ne peut toujours pas pointer sur les enfants.
Bon j'ai résolu mon problème avec une table intermediaire entre t1 et parent
t1 -(FK)-> table_intermediaire <-(FK)- parent

n°970391
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-02-2005 à 11:52:06  profilanswer
 

Elle te sert à quoi T1 ?
 
Avec la table que je t'ai indiqué, un même père peut avoir plusieurs enfants. C'est ce que tu veux non ?
 
T1 ne sert à rien dans ce cas.

n°970397
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-02-2005 à 11:54:32  profilanswer
 

Une fois de plus, postez un exemple de données quand vous posez ce genre de questions. Parceque vu que les explications sont aussi claires que de la soupe aux légumes mixée, et qu'on ne sait pas quoi conserver des infos car on ne connaît pas votre niveau. Dans ce cas, la structure des données ne suffit pas, un jeu de données en plus est le bienvenu.
 
PS: et pour "T1", là je vois pas comment on peut connaître la structure... Y'a un lien vers Parent, dont je ne connais pas le symbole (peut-être une CIF ?) et pas de lien avec Enfant, donc pour moi elle est carrément hors jeu cette table.

n°970685
Ummon
Posté le 03-02-2005 à 15:27:48  profilanswer
 

>to Arjuna  
Il me semblait pourtant que mes explications étaient suffisantes, d'ailleurs nraynaud à très bien compris mon problème.
 
Re explication :
 
- il y a un type de parent.
- il y a plusieurs type d'enfant dérivant au sens PostgreSQL (INHERITS) du type parent.
- je voudrai référencer n'importe quel type d'enfant depuis la table 't1' à l'aide d'une clef étrangère.
- mais visiblement la notion d'héritage est très simplifiée dans postgreSQL donc impossible à faire comme sur le schéma du premier message.
 
Merci quand même de ton aide.


Message édité par Ummon le 03-02-2005 à 15:28:45
n°970705
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-02-2005 à 15:39:08  profilanswer
 

et le jeu de données, il est où ? Pour moi ça reste un joyeux charabia ce que tu viens d'écrire. Désolé [:spamafote]

n°970709
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-02-2005 à 15:41:13  profilanswer
 

je ne vois toujours pas le lien entre T1 et les tables PARENT et ENFANT.
 
A mon avis, de toute façon, c'est dans tous les cas ta table T1 qui est à remettre en cause, si elle référence des "types d'enfants" je ne vois pas pourquoi tu la lie à la table PARENT.

mood
Publicité
Posté le 03-02-2005 à 15:41:13  profilanswer
 

n°970865
Ummon
Posté le 03-02-2005 à 16:48:42  profilanswer
 

Je n'ai pas de jeu de données, c'était une question théorique quand aux possibilités objets de postgreSQL, nraynaud m'a très bien répondu et j'ai compris mon problème, le sujet est clos.
Par contre je ne suis pas d'accord sur ton "[..]joyeux charabia ce que tu viens d'écrire [..]", il me semble que ce que j'ai écrit est clair et que tu n'as pas compris le fond du problème (problème lié à l'héritage).
 
(juste en passant il n'y a aucun lien explicite à l'aide de clefs étrangères entre le parent et l'enfant)


Message édité par Ummon le 03-02-2005 à 16:50:20
n°970892
nraynaud
lol
Posté le 03-02-2005 à 17:15:10  profilanswer
 

Ummon > j'ai oublié de te donner la solution théorique :
 
parent(id)
enfant(<champs complémentaires>, idparent->parent)
 
chaque enfant a un pointeur vers sa partie "parent" et ne stocke que ce qui est spécifique à son statu d'enfant, c'est extrèmement lourd (c'est ce que fait gobject, le truc de gtk par ex.).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PostgreSQL] Clef étrangère sur un parent

 

Sujets relatifs
Clé étrangère et double contraintes[java] driver jdbc Postgresql
colonne défini comme clef primaire et clef étrangère, possible ??Tester une clef dans la base de registre?
problémes de rep parent (ASP) - (résolu)[POSTGRESQL] lancer sur port 80
[PostgreSql] Index et type[PostgreSQL] vue avec jointures
self parent et blank 
Plus de sujets relatifs à : [PostgreSQL] Clef étrangère sur un parent


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR