Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/05/2011, 10h00   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 9
Points : 4
Points : 4
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.
cyril53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 10h32   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Citation:
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.
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/05/2011, 10h41   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 9
Points : 4
Points : 4
j'ai la réponse à ma question
Merci pour votre aide.
cyril53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h11.


 
 
 
 
Partenaires

Hébergement Web