Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours 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 01/07/2011, 16h03   #1
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 0
Points : 0
Par défaut Problème de suppression

Bonjour,

Alors voila, j'aimerais supprimer un doublon dans une base de données. Mais avant, il faut fusionner les 2 entrées pour ne pas perdre d'information.

En effectuant cette commande :

delete from collab where id_collab=2444;

j'ai ce message d'erreur
Citation:
ERROR: update or delete on table "collab" violates foreign key constraint "affaire_forecast_collab_id_collab_fkey" on table "affaire_forecast_collab"

DETAIL: Key (id_collab)=(2444) is still referenced from table "affaire_forecast_collab".
Sachant que je ne dois pas changer les contraintes. Comment puis-je faire ?

On m'a dit que normalement si la fusion a bien été effectuée alors la suppression n'est pas un problème. Est-ce vrai ?
Lonex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 16h11   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,

Etes-vous bien sûr que ce soit cette ligne là que vous voulez supprimer ?

Pour schématiser votre problème actuel :


collab
------------------
ID .....
2444


affaire_forecast_collab
------------------------
ID id_collab
X 2444


Là vous avez une clef étrangère sur la colonne id_collab de affaire_forecast_collab qui référence la colonne ID de colab.

Du coup le SGBD vous interdit de supprimer cette ligne de collab.

Vous devez tout d'abord supprimer la (les) ligne(s) de affaire_forecast_collab qui ont id_collab = 2444.



Lisez ceci : http://sqlpro.developpez.com/cours/s.../?page=partie2

Les chapitres 7.1 & 7.2 en particulier.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 16h21   #3
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 0
Points : 0
D'accord j'ai compris.

Il y a t'il une requete qui permet de lister toutes les tables qui posséde une clé étrangère en lien avec la clé primaire id_collab ?
Lonex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 16h26   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Surement mais pour celà il faudrait connaitre votre SGBD.

Et ça sera un peu plus compliqué que ça sachant que votre table affaire_forecast_collab peut, elle aussi, être référencée ailleurs, et ainsi de suite
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 16h36   #5
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 0
Points : 0
Je crois que je vais le faire manuellement ça ira beaucoup plus vite finalement. Parce que je ne suis pas sûr qu'il y a tant d'informations que ça à récupérer.
Lonex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 16h30   #6
Membre habitué
 
Étudiant
Inscription : avril 2008
Messages : 275
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2008
Messages : 275
Points : 139
Points : 139
Ou tu mets "temporairement" (ou pas) le mode "CASCADE ON DELETE" sur la clef primaire pointée par la clef étrangère et tu fais ça rapidement (à tes risques et périls / ! \)

@+
Tidus159 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 16h52   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Si je traduis bien la requête et le message d'erreur reçu, tu souhaites supprimer un collaborateur et le SGBD t'en empêche parce que ce collaborateur a créé au moins une affaire. N'a t-il pas raison de t'empêcher de supprimer une affaire ? Laquelle a peut-être généré des commandes, des factures, des achats, des livraisons, des pointages d'heures de main d'oeuvre...

Bref, réfléchis bien avant de vouloir à tout prix supprimer la ligne relative à ce collaborateur !

Il vaudrait peut-être mieux le laisser et se contenter de renseigner, si elle existe, sa date de départ de l'entreprise ou, si tu ne peux pas toucher aux tables existantes, créer une table pour les collaborateurs disparus qui sera en association avec la table des collaborateurs puis une vue pour ne fournir aux programmes que les collaborateurs encore présent.
Erreur de conception au départ ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h05.


 
 
 
 
Partenaires

Hébergement Web