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

SQL Oracle Discussion :

clé étrangère non référencée dans la table cible après insertion de données.


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut clé étrangère non référencée dans la table cible après insertion de données.
    Bonjour, Bonne année à tous.

    j'ai un soucis avec mes clés étrangères après insertion de données. en effet, j'ai créé une table groupe avec une clé étrangère qui est l'ID de la table historique. Après insertion de données dans la table historique, je ne retrouve pas l'ID de la table historique comme clé étrangère dans la table groupe alors qu'un index a été créé qui est celui-ci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE UNIQUE INDEX "AIR JAVA"."CHANGEMENT_FK" ON "AIR JAVA"."GROUPE" ("HISTORIQUE_ID");


    Ma question est, comment faire apparaître ma clé étrangère de la table historique dans les données de ma table groupe. Merci

    ps : j'utilise oracle 11g

  2. #2
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut clé étrangère non référencée dans la table cible après insertion de données.
    Bonjour, Bonne année à tous.

    j'ai un soucis avec mes clés étrangères après insertion de données. en effet, j'ai créé une table groupe avec une clé étrangère qui est l'ID de la table historique. Après insertion de données dans la table historique, je ne retrouve pas l'ID de la table historique comme clé étrangère dans la table groupe alors qu'un index a été créé qui est celui-ci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE UNIQUE INDEX "AIR JAVA"."CHANGEMENT_FK" ON "AIR JAVA"."GROUPE" ("HISTORIQUE_ID");


    Ma question est, comment faire apparaître ma clé étrangère de la table historique dans les données de ma table groupe. Merci
    PS: j'utilise oracle 11g

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Par défaut
    Je suis pas sûr d'avoir compris....

    1. tu crées une table "historique" avec un champ "id"
    2. tu crées une table "groupe" avec un champ "historique_id" qui est une clé étrangère sur le champ "id" de la table "historique"
    3. tu insères une ligne dans la table "historique"

    et tu voudrais qu'une nouvelle ligne soit automatiquement insérée dans la table groupe?????

  4. #4
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    exactement, j'illustre la table groupe.
    donc j'ai
    GROUPE_ID
    HISTORIQUE_ID

    ensuite, si j'insers des données dans historique, l'id de cellui-ci doit s'inserer automatiquement dans la table groupe pour constituer ses données.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Par défaut
    Mais la clé étrangère signifie simplement que cette colonne là doit référencer un historique_id qui est forcément existant. Ca ne veut pas dire que ça va te remplir les lignes automatiquement!
    Si tu as 10 champs dans ta table groupe, comment tu veux qu'il insère une nouvelle ligne automatiquement? avec 9 champs à null et 1 champ qui vaut la nouvelle valeur de la clé? je ne vois pas quel intérêt ça aurait, et en plus ce ne serait pas toujours possible (si tu as une clé primaire ou des champs not null....). Dans ton cas, oracle ne pourrait pas deviner tout seul la valeur de group_id.

    La création d'un index signifie simplement que tu pourras accéder rapidement aux données quand tu feras un "select .... where historique_id = 3", mais c'est uniquement de la consultation de lignes qui ont été précédemment insérées, ça ne t'insère rien automatiquement.

  6. #6
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Ok, merci pour ton aide, je vais revois mon MCD est générer un nouvel MPD.

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    ce n'est pas un create index qu'il te faut mais un alter table add constraint.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ALTER TABLE 
      GROUPE 
    ADD CONSTRAINT 
      CHANGEMENT_FK
    FOREIGN KEY 
      (HISTORIQUE_ID) 
    REFERENCES 
      HISTORIQUE(HISTORIQUE_ID);

  8. #8
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    merci oracle vip, mais j'ai déjà ajouter mes contraintes pour les clés étrangères, mais à l'insertion des données, mes clés étrangères ne sont pas dans le table cible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ALTER TABLE "AIR JAVA'."GROUPE" 
    ADD CONSTRAINT "GROUPE_CHANGEMEN_HISTORIQ_FK1" 
    FOREIGN KEY ("HISTORIQUE_ID")
    	  REFERENCES "AIR JAVA"."HISTORIQUE" ("HISTORIQUE_ID") ON DELETE CASCADE ENABLE
    je pensais que la clé étrangère se posait automatiquement dans la table groupe après avoir inséré des données dans la table historique, mais je n'ai rien dans la table groupe.

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tu veux dire, que de la même manière que fonctionne le "ON DELETE CASCADE", tu voudrais aussi un "ON INSERT CASCADE" ?

    Non, les clés étrangère n'insèrent pas "automatiquement" les données, elles ne sont la que pour valider les contraintes d'intégrité.

  10. #10
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    ah ok, alors comment je fais pour insérer des données dans ma table groupe sachant que les seuls données de cette table c'est l'id de l'historique à part bien sure sa clé primaire groupe_id.
    merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/07/2011, 12h16
  2. Récupérer des lignes non enregistrées dans une table
    Par leddy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/04/2008, 15h09
  3. nombre de valeurs non nulles dans une tables
    Par 080983 dans le forum SQL
    Réponses: 33
    Dernier message: 27/08/2007, 12h04
  4. Réponses: 6
    Dernier message: 29/06/2006, 10h36
  5. Réponses: 3
    Dernier message: 19/06/2006, 14h25

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