Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 31/07/2007, 14h00   #1
Membre confirmé
 
Avatar de Contrec
 
Inscription : mars 2005
Messages : 566
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mars 2005
Messages : 566
Points : 264
Points : 264
Par défaut Modification d'une cle primaire chaine de charactere

Bonjour,

J'ai une table "Programme" possedant une cle primaire en chaine de charactere NOMPROGRAMME.

2 Autres tables sont rattachees par des cles etrangeres :

- UTILISATEUR avec cle etrangere NOMPROGRAMME.

- LIMITE avec cle etrangere NOMPROGRAMME.

puis-je changer le nom d'un programme rattache a d'autres tables ? (c'est a dire mise a jour de la cle primaire dans PROGRAMME et des cles etrangeres dans UTILISATEUR et LIMITE).

De plus, est-il conseille davoir des cles primaires en chaine de charactere ?

Merci
Contrec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 14h14   #2
Membre régulier
 
Inscription : novembre 2004
Messages : 657
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 657
Points : 81
Points : 81
1-oui tu peux. Si nécessaire tu peux modifier les enregistrementscorrespondants dans les deux autres tables.
2-avant tu peux faire un essaie en créant trois tables de test liées de la même façon.
Cdt.
big1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 15h12   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Moi je dirais plutôt non tu ne peux pas.
Les contraintes vont sortir en erreur
Code :
ORA-02292: integrity constraint (NOM_CONTRAINTE) violated - child record found
Pour se faire, tu as plusieurs choix :
1/ Désactiver les contraintes, faire tes updates dans toutes les tables, réactiver les contraintes
2/ Duppliquer l'enregistrement père avec la nouvelle PK, modifier les enregistrements fils sur le nouvelle PK, supprimer l'enregistrement père d'origine
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 15h13   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Citation:
Envoyé par Contrec
De plus, est-il conseille davoir des cles primaires en chaine de charactere ?
Ca ne pose aucun problème.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 16h20   #5
Membre confirmé
 
Avatar de Contrec
 
Inscription : mars 2005
Messages : 566
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mars 2005
Messages : 566
Points : 264
Points : 264
Et il n'existe rien qui dise que lorsque l'on change la cle primaire, les childs changent aussi comme un Update on cascade ?
Contrec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 17h18   #6
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
L'habitude veut que l'on ait en clef primaire un ID du type nombre plus un libellé associé.
Du coup, quand on veut changer le libellé, on n'est pas embêté par les foreign keys.

Mon intervention ne résoud pas ton problème mais jusitifie pourquoi on évite d'utiliser des chaines de caractères en clefs primaires, même si c'est techniquement faisaible (et souvent utile).
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 17h23   #7
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Ca c'est super au niveau modelisation.
Par contre pour lire les données directement, c'est galère.
Mais logiquement une PK ne devrait pas changer souvent.

Et non il n'y a pas d'UPDATE CASCADE sur Oracle.

Si tu dois juste modifier la PK d'un programme, le plus simple c'est de duppliquer en modifiant la PK (le cas 2)
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 08h15   #8
Membre confirmé
 
Avatar de Contrec
 
Inscription : mars 2005
Messages : 566
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mars 2005
Messages : 566
Points : 264
Points : 264
Bon ben merci pour toutes ces infos, je pense que je vais dupliquer la cle avec le nouveau nom, mettre a jour les enregistrements enfants et supprimer l'anciennne cle.

L'avantage avec les cles en chaine de caracteres c'est que pour avoir l'information je n'ai pas a faire de jointures car j'ai deja l'info dans la cle etrangere.

L'inconvenient est que le changement d'une cle primaire necessite de dupliquer celle ci, de faire les bons updates et de supprimer l'ancienne.

Dommage qu'Oracle ne puissse pas automatiquement mettre a jour les childs records lorsque l'on change la cle primaire...

Merci pour vos messages.
Contrec 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 08h22.


 
 
 
 
Partenaires

Hébergement Web