Conseils et aide pour une suppression en cascade dans une base de donnée

Résolu
cs_ethan94 Messages postés 27 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 15 juin 2010 - 27 déc. 2008 à 16:43
ririchouchou Messages postés 10 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2013 - 15 juin 2010 à 12:53
Bonjour :)

Je vais travailler sur un petit programme de gestion d'utilisateurs et de dossiers de travail, sous Visual Studio 2005, avec une base de donnée sous SQL Server. Je vais avoir une table "utilisateur", une table "dossier" et une table "travailler" dont la clé primaire sera composée du code utilisateur et du numéro de dossier.

Dans mon programme, je souhaiterai pouvoir faire des suppressions en cascade. Exemple: je supprime un utilisateur, ce qui aurait pour effet de supprimer toutes les lignes de la table "Travailler" qui comportent le code de cet utilisateur.

Comme je n'ai jamais fait de suppression en cascade, je ne sais pas comment celà fonctionne. J'aimerais donc savoir s'il faut créer la base de donnée d'une manière spécifique et si la suppression en cascade se gère sous SQL Server (avec un trigger par exemple ou une procédure stockée) ou bien si cela doit être fait dans les dataset/data adapter du programme sous visual studio.

Merci par avance pour votre aide :)

10 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
27 déc. 2008 à 18:41
Salut,

Le moteur en lui même peut gérer ce genre de choses : Contraintes d'intégrité référentielle en cascade
Je ne l'ai jamais utilisé par contre.

/*
coq
MVP Visual C#
CoqBlog
*/
3
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
28 déc. 2008 à 16:04
Re,

En fait tu dois quand même pouvoir poser cette relation par un script.

ALTER TABLE [dbo].[LaTableFille]
ADD CONSTRAINT [LeNomDeLaRelation]
  FOREIGN KEY ( [LeNomDeLaColonneDeLaTableFille])
  REFERENCES [dbo].[LaTableMere] ([LeNomDeLaColonneDeLaTableMére])
ON UPDATE CASCADE

Avant de lancer ce script il faut détruire la relation existante.

C# is amazing, enjoy it!
3
cs_ethan94 Messages postés 27 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 11:53
Salut :)

Il faut faire un clic droit sur une table puis cliquer sur Modifier. Ensuite il faut faire un clic droit sur une des colonnes de la table n'importe laquelle) et choisir Relations.

Après avoir généré ta relation entre ta table et une autre table, clique sur cette relation et dans la partie droite de la fenêtre, clique sur la croix à côté de la ligne Spécification Insert et Update et là tu peux définir le mode cascade :)
3
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
27 déc. 2008 à 19:28
Bonsoir

en effet, Sql server gère ça très bien sans avoir a créer un trigger
Dans entreprise manager, dans la base crée un diagram avec tes tables,
Ajoute les relations si ce n'est dèjà fait (clicke sur la colonne clef primaire de la table fille et glisse là sur la colonne clef secondaire de la table mére) dans les propriétés de la relation il y a un "check box" "Cascade delete related records" (désolé je l'ai en anglais).

C# is amazing, enjoy it!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ethan94 Messages postés 27 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 15 juin 2010
28 déc. 2008 à 11:37
Bonjour et merci pour vos réponses :)

J'ai installé entreprise manager. J'ai crée mes tables. Mais je ne trouve pas comment créer le diagramme de ma base de donnée. J'ai bien une ligne "schéma de base de donnée" lorsque je développe la base de donnée dans l'explorateur d'objets à gauche, mais lorsque je clique dessus, j'ai un message d'erreur.

----------------------------
Les objets de prise en charge du schéma de base de données ne peuvent pas être installés car la base de données n'a pas de propriétaire valide. Pour continuer, définissez le propriétaire de la base de données à un nom de connexion valide dans la page Fichiers de la boîte de dialogue Propriétés de la base de données ou à l'aide de l'instruction ALTER AUTHORIZATION, puis ajoutez les objets de prise en charge du schéma de base de données.
----------------------------

Pourtant je suis administrateur de mon système et bien propriétaire de la base de donnée : /
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
28 déc. 2008 à 15:35
Désolé, je ne vois pas.
ça meriterait une question sur le forum SQL.

C# is amazing, enjoy it!
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
28 déc. 2008 à 16:06
oops,

ON DELETE CASCADE  bien entendu, (pour le delete)

C# is amazing, enjoy it!
0
cs_ethan94 Messages postés 27 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 15 juin 2010
28 déc. 2008 à 16:10
Merci pour l'explication :)

J'ai trouvé une autre méthode pour créer ces contraintes. En cliquant droit sur les tables, on peut lancer un semi-assitant pour créer des contraintes :) J'ai testé et ça à l'air de fonctionner. Si jamais ça ne fonctionne pas pour tous, j'essaierai ton modèle.

Encore merci :)
0
ririchouchou Messages postés 10 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2013
15 juin 2010 à 10:38
bonjour ethan94 ,
vous pouvez m'expliquer un peu encore la méthode car je veux effectuer une suppression en cascade , vous avez dit click droit sur les tables mais j ai pas réussie a voire la semi assistance et quelles sont les constraits que je doit créer ,répondez moi vite svp
0
ririchouchou Messages postés 10 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2013
15 juin 2010 à 12:53
merci bieen ca a marché ^^
0
Rejoignez-nous