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

Développement SQL Server Discussion :

Problème intégrité référentielle


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Problème intégrité référentielle
    Bonjour,

    Je développe actuellement un programme de gestion d'élèves

    J'ai une table Classe(idClasse...) et une table Eleve.

    la table Eleve est lié à la table Classe avec une clé étrangère.

    Le problème, si je met ON DELETE CASCADE dans ma clé étrangère, lorsque je supprime une classe, il me supprime tous les élèves de la classe.

    Et si je ne met pas ON DELETE CASCADE j'ai un message d'erreur de contrainte référentielle.


    Comment faire pour pouvoir supprimer une classe sans pour autant supprimer les élèves ??

    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Le problème, si je met ON DELETE CASCADE dans ma clé étrangère, lorsque je supprime une classe, il me supprime tous les élèves de la classe.

    Et si je ne met pas ON DELETE CASCADE j'ai un message d'erreur de contrainte référentielle.
    On peut déjà en conclure que votre sgbdr fonctionne correctement

    Les contraintes d’intégrité sont justement faites pour cela. Quand vous définissez une clef étrangère sur la colonne IDClasse de la table Élève, c'est justement pour spécifier qu'un élève appartient à une classe. Il vous est alors impossible de supprimer une classe qui contient des élèves car alors, ces élèves appartiendraient à une classe qui n'existe pas, ce qui poserait un problème d'integrité de vos données !

    C'est donc a vous de définir votre besoin, et le fonctionnement logique qui en découle.
    Si d'un point de vue logique vous estimez qu'il est possible qu'un élève n'appartienne [temporairement] à aucune classe, il vous est possible de spécifier la colonne IDClasse de la table eleve comme nullable, et changer la comportement de votre clef etrangere en cas de suppression à ON DELETE SET NULL
    Si au contraire un élève doit obligatoirement appartenir à une classe, alors laissez votre contrainte sans cascade, et c'est votre application qui doit s'assurer qu'une classe ne contient aucun élève avant d'en permettre la suppression.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    j'ai la réponse à ma question
    Merci pour votre aide.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/03/2012, 09h50
  2. Problème d'intégrité référentielles
    Par Fonzy007 dans le forum Requêtes
    Réponses: 4
    Dernier message: 21/08/2006, 11h38
  3. Problème d'intégrité référentielle
    Par guiguikawa dans le forum Access
    Réponses: 15
    Dernier message: 23/05/2006, 15h25
  4. [Héritage] problème intégrité référentielle
    Par Ouark dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/01/2006, 18h47
  5. Réponses: 5
    Dernier message: 26/10/2005, 14h43

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