IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Héritage et utilisation de la pk du parent comme une fk


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut Héritage et utilisation de la pk du parent comme une fk
    Bonjour,
    J'ai mis en place un héritage dans la ma base, concrètement le voici. Je la manipule avec pgadmin
    la table parents s'appelle "entité", elle ne possède qu'une colonne pk "id_entité" de type serial.
    la table enfant s'appelle "agent", elle hérite de la table parent et reprend donc le "id_entité", je lui ai toutefois ajouté une colonne pk "id_agent" de type serial, puis des colonnes "nom", "prénom", etc...

    Dans une troisième table "intervention", qui prend "id_entite" de la table "entite" comme clé étrangère (fk).

    Je crée plusieurs agents qui prennent comme pk 1,2,3,4. Automatiquement des pk sont générés sur la table parent également, comme elle est vierge il s'agit aussi de 1,2,3,4

    ci-dessous la table agent
    Nom : table_agent.png
Affichages : 500
Taille : 8,8 Ko

    Lorsque je veux utiliser 1,2 ou 3 comme fk dans la table "intervention", faisant donc référence au "id_entite" de la table "entite", il me dit que la clé n'existe pas, en gros que ni 1, ni 2 ni 3 n'existent dans la table 'entite'.

    ci-dessous le refus d'insertion sur intervention
    Nom : erreur_intervention.png
Affichages : 511
Taille : 14,2 Ko

    Et effectivement alors que pgadmin me les affiche lorsque je fais un select, je peux recréer les entrées 1,2,3 ou 4 dans 'entite" sans que cela ne lui pose de problème.

    ci-dessous la table entite avec des doublons sur la pk qui ne le dérange pas...
    Nom : table_entite.png
Affichages : 471
Taille : 7,7 Ko

    J'ai forcément raté quelque chose sur l'héritage, mais quoi ? Si vous pouviez m'éclairer cela m'aiderait beaucoup. Merci d'avance.

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bonjour,
    Le message dit que entite_id = 4 n'existe pas dans la table entite, correcte car dans cette table c'est id_entite.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    elle s'appelle bien entite_id dans ma table intervention, la contrainte sur la clé étrangère est definie comme suit :
    Nom : cle_etrangere.png
Affichages : 438
Taille : 17,2 Ko

    Il ne semble pas que l'on soit obligé de donner le même nom, si ? Je n'ai jamais eu de souci...

    J'ai refait un test en nommant ma colonne id_entite (ci-dessous), même problèmeNom : erreur_intervention2.png
Affichages : 502
Taille : 14,0 Ko

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bizarre, je ne vois pas bien vous pouvez essayer ceci pour être sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    ALTER TABLE public.intervention2 DROP CONSTRAINT intervention_entite_id_fkey;
     
    ALTER TABLE public.intervention2  ADD CONSTRAINT intervention_entite_id_fkey FOREIGN KEY (entite_id) REFERENCES entite(id_entite) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Merci pour ces conseils... ça ne fonctionne toutefois toujours pas.
    J'ai supprimé la clé étrangère, puis recréé avec vos commandes sur la table intervention2
    Nom : toujours erreur.png
Affichages : 456
Taille : 13,8 Ko

    Par contre, c'est bien un problème avec l'héritage, peut-être tout bête parce que je n'ai pas l'habitude.
    J'ai créé une table agent2, sans héritage, et là les insertions fonctionnent sans problème.
    Nom : agent_sans_heritage.png
Affichages : 435
Taille : 9,5 Ko

    Ma colonne fk est au format integer et je lui applique la contrainte indiquée plus haut.
    Est-ce que les pk d'une table parent seraient d'un autre format ? Ce qui expliquerait que je puisse recréer la même entrée sans qu'il ne me fasse d'erreur, l'une serait en integer (celle que j'ajoute manuellement) et l'autre j'en sais rien un autre format ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Je pense que c'est lié à la question de l'indexation, et du fait que la clé primaire n'est pas indexable sur plusieurs tables, c'est à dire parent et enfants (j'en conclue qu'elle n'est pas indexée du tout sur un parent ?).

    Du moins, c'est ce que je comprends de la doc et de mes recherches sur des sites en anglais.

    Pour le moment, je retire donc mes contraintes, cela me gène un peu, mais comme je maîtriserai la programmation qui se fera sur cette BDD, je pourrai m'assurer que les contraintes soient respectées.

    Toutefois, si quelqu'un trouve une meilleure réponse je reste preneur.

Discussions similaires

  1. Réponses: 15
    Dernier message: 01/03/2015, 13h16
  2. Utilisation du top.frames[] et parent.frames[]
    Par Ghislain dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/11/2009, 18h28
  3. Réponses: 1
    Dernier message: 25/06/2009, 11h18
  4. [SimpleXML] Héritage ou utilisation
    Par juninho269 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/06/2008, 11h48
  5. Réponses: 2
    Dernier message: 01/12/2006, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo