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 Firebird Discussion :

Problème CONSTRAINT FOREIGN KEY avec NO ACTION


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Par défaut Problème CONSTRAINT FOREIGN KEY avec NO ACTION
    Bonsoir tout le monde;
    Je veux ajouter une contrainte de clé étrangère à ma table, mais sans lui accorder d'action de suppression ou de mise à jour;
    J'écris pour cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE LIVRAISONS_PRD ADD CONSTRAINT FK_LIVRAISONS_PRD1 FOREIGN KEY (PRODUIT) REFERENCES PRODUIT(COD_PROD) ON DELETE NO ACTION ON UPDATE NO ACTION;
    mais j'obtiens le message d'erreur :
    violation of FOREIGN KEY constraint "FK_LIVRAISONS_PRD1" on table "LIVRAISONS_PRD"
    Foreign key reference target does not exist

  2. #2
    Membre très actif Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Par défaut
    Citation Envoyé par kaouane Voir le message
    J'écris pour cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE LIVRAISONS_PRD ADD CONSTRAINT FK_LIVRAISONS_PRD1 FOREIGN KEY (PRODUIT) REFERENCES PRODUIT(COD_PROD) ON DELETE NO ACTION ON UPDATE NO ACTION;
    C'est la bonne syntaxe, pas de problème.
    Citation Envoyé par kaouane Voir le message
    mais j'obtiens le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    violation of FOREIGN KEY constraint "FK_LIVRAISONS_PRD1" on table "LIVRAISONS_PRD"
    Foreign key reference target does not exist
    C'est pars que la table LIVRAISONS_PRD n'est pas vide et qu'elle possèdent des valeurs dans le champs PRODUIT qui ne sont référencés dans la table PRODUIT(COD_PROD)

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Par défaut
    Effectivement; mais quelle est la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    on delete cascade on update cascade
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    on delete no action on update no action
    Je pense que la dernière permet le fait :
    - supprimer l'information de la table produit même si elle est référencée dans la table livraisons_prd ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 591
    Par défaut
    Bonjour,

    Je vais essayer de te donner une explication.

    Si tu as une table "FACTURE" et une table "LIGNE". Pour une facture, tu auras une plusieurs lignes de facture.

    Dans ta table "LIGNE", l'index de la clé primaire de la table "FACTURE" va constituer une clé étrangère. Ainsi, quand tu appelles ta facture, tu connais toutes les lignes qui la compose.

    Maintenant, tu décides de supprimer ta facture. Si dans ta table "LIGNE", tu as mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON DELETE no action ON UPDATE no action

    lors de la mise en place de ta clé étrangère, tu ne pourras supprimer ta facture seulement et seulement s'il n'existe plus aucune ligne pour la facture que tu veux effacer. En résumé, il faut d'abord supprimer toutes les lignes puis la facture.

    Par contre, si tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON DELETE cascade ON UPDATE cascade

    En cas de suppression de la facture, la base de données effacera automatiquement les lignes de la facture et la facture.

    Dans le premier cas tu fais toi-même, dans le second cas c'est la base qui assure le travail.

    Bon après, il faut savoir pourquoi choisir l'une ou l'autre méthode. Mais il s'agit d'une autre histoire.

    J'espère que mes explications seront suffisamment claires pour répondre à ta question.

    A+

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Par défaut
    Merci beaucoup seabs;
    C'est très bien expliquer et je viens de le confirmer de l'article "le SQL de A à Z".
    Cela veut dire que pour mon cas, je ne doit pas créer une contrainte de clé étrangère.
    Mais comment implémenter un lien entre deux tables sans contrainte d'intégrité?

  6. #6
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut
    Citation Envoyé par kaouane Voir le message
    Mais comment implémenter un lien entre deux tables sans contrainte d'intégrité?
    Comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE LIVRAISONS_PRD ADD CONSTRAINT FK_LIVRAISONS_PRD1 FOREIGN KEY (PRODUIT) REFERENCES PRODUIT(COD_PROD);
    Tout simplement.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour setter une Foreign Key avec TopLink(ValueHolderInterface)
    Par Kcintim dans le forum Persistance des données
    Réponses: 1
    Dernier message: 19/06/2011, 11h40
  2. Problème foreign key avec hibernate
    Par souhait dans le forum Hibernate
    Réponses: 5
    Dernier message: 05/09/2008, 15h23
  3. probleme foreign key avec clé composée
    Par jccanut dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2007, 13h05
  4. problème concernant foreign key de type InnoDB
    Par cel.Saint-Louis dans le forum Outils
    Réponses: 8
    Dernier message: 05/06/2007, 23h30
  5. Foreign Key avec MySQL / phpMyAdmin ?
    Par Tchupacabra dans le forum Outils
    Réponses: 4
    Dernier message: 13/12/2006, 15h59

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