|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Inscription : mars 2005 Messages : 566 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 657 ![]() |
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. |
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
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 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 |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
Citation:
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : mars 2005 Messages : 566 ![]() |
Et il n'existe rien qui dise que lorsque l'on change la cle primaire, les childs changent aussi comme un Update on cascade ?
|
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
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). |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
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 |
|
|
00
|
|
|
#8 |
|
Membre confirmé
![]() Inscription : mars 2005 Messages : 566 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com