Flux rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Modifier une clé primaire d'une table

minos11, le mercredi 16 juillet 2008 à 11:50:00
Bonjour,
Est ce que vous pouvez me dire comment modifier la clé primaire d'une table sou oracle sachant que cette colonne est une clé etrangère dans d'autres tables?
par exemple:
j'ai une table direction avec clé primaire numéro de bureau et contenant une colonne numero_direction
je veux supprimer la colonne numero_de_bureau et la colonne numero_direction devient clé primaire.
Configuration: Windows XP
Internet Explorer 6.0
Répondre à minos11  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cchristian, le mercredi 16 juillet 2008 à 16:17:11
Bonjour,

Clé primaisre :
Pour rester cohérent, toutes situations et tous SGBD ou méthodes d'accès confondus , j'ai tendance à penser qu'il est préférable :
1) de sauvegarder les données de l'enregistrement (la ligne, le tuple, .......) à annuler,
2) de procéder à l'annulation physique de cet enregistrement (ligne, tuple, .........) sur la valeur de clé primaire existante.
3) puis de créer le "nouvel" enregistrement (ligne, tuple, ......) avec les données sauvegardées et la nouvelle valeur de clé primaire.
Mais il est possible ave certains SGBD(R) (notamment avec l'instruction UPDATE en SQL/DB2) de procéder directement à la modification d'une clé primaire (sauf si une contrainte d'intégrité référencielle a été définie) .
Foreign key (SGBDR) :
Si une contrainte d'intégrité référencielle (option ON DELETE CASCADE de l'instruction CONSTRAINT en SQL/DB2) est définie sur une colonne (correspondante à la clé primaire à annuler de la table parente) de une ou plusieurs autres tables les lignes (tuples) seront autoatiquement détruites à la phase 2) ci-dessus. Dans le cas contraire (pas de contrainte type DELETE) il faut explicitement les détruire. Cordialement.

Cchristian.
Répondre à cchristian

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 cchristian, le jeudi 17 juillet 2008 à 19:31:07
Bonjour,

En complément à mon dernier message je te propose ces quelques réflexions sur le problème posé. En ce sens elles ne constituent pas une solution mais plutôt un thème de discussion.

NB. Ce qui suit est traité dans une optique SQL/DB2, donc à actualiser sous ORACLE (que je ne connais pas).

Le changement que tu souhaites effectuer s'apparente davantage à une réorganisation (fonctionnelle) de plusieurs tables d'une base de données. En effet il est question de substituer à la colonne clé primaire "numero_de_bureau" de la table parente "direction" (colonne parente qui se trouve être clé étrangère de plusieurs autres tables dépendantes), une autre colonne "numero_direction" de cette même table.
La colonne "numero_de_bureau" n'étant pas reconduite dans la table "direction".
Remarque à propos de cette dernière supposition : Plusieurs « no_de_bureau » sont probablement rattachés à un même « no_direction » ? (et .......... une clé primaire n’admet pas les doublons)
Si tel est le cas et afin de contourner cette impossibilité il convient de conserver en suffix de la clé primaire, la colonne "numero_de_bureau" qui de ce fait assurera l’unicité de la nouvelle clé primaire, laquelle devra être constituée des colonnes : "numero_direction" + "numero_de_bureau".
Dans cette hypothèse il s'agirait d'une permutation de colonnes, où plus précisément d'une modification de la clé primaire.

Illustration :
table parente "direction" actuelle (2 no_bureau00x pour un même no_direction01):
col. bureau : col. direction :

no_bureau001 no_direction01 .....................
no_bureau002 no_direction01 .....................
no_bureau003 no_direction02 .....................
....................... ...................................

table dépendante col. bureau_dep (foreign key)

........................... no_bureau001 .........................
........................... ...................... .........................
qui est décrite vraisemblablement d'une manière analogue à ce qui suit :
CREATE TABLE table_dépendante
..................
Intégrité référencielle (SQL/DB) :
CONSTRAINT no_bur FOREIGN KEY (bureau_dep)
REFERENCES direction (bureau) ON DELETE NO ACTION (par exemple),

_____________________________________________________________

table "direction" après restructuration (éventuelle car il n'est pas obligatoire de permuter les colonnes) :
col. direction col. bureau :

no_direction01 no_bureau001 .....................
no_direction01 no_bureau002 .....................
no_direction02 no_bureau003 .....................
...............................................................

Il restera malgré tout à :

Foreign keys :
- actualiser (une foreign key doit avoir le même nombre de colonnes que la clé primaire de la table parente)
- ou à faire disparaître (si elles sont devenues obsolètes).
les foreign key sur les table(s) dépendante(s).

Modifications :
- Effectuer les modifications à apporter à l’existant. Cordialement.
Cchristian.
Répondre à cchristian
Sql...connaitre la cle primaire dune table (Résolu)Bonjour, voila je cherche, au moyen dune requete dans une page php, a connaitre quelle est champ clé primaire de la table donnée. ou bien sans forcement connaitre son nom au moins pouvoir lappeler. en vous remerciant, xav www.commentcamarche.net/forum/affich-6732680-sql-connaitre-la-cle-primaire-dune-table
[BD] Clef primaire (Résolu)Bonjour, J'aimerais savoir si une clef primaire est obligatoire dans une table ... En fait j'ai une table "RSSI" : -- Structure de la table `rssi` -- CREATE TABLE `rssi` ( `RSSI_ID` int(10) NOT NULL auto_increment, `ACTIVITE_ID` int(3) NOT... www.commentcamarche.net/forum/affich-2393167-bd-clef-primaire
Modifier les infos dans une table , phpmysql (Résolu)Bonjour, j'ai un petit problème. J'ai fait un formulaire d'extrait les infos de la base de données. Je voulais modifier les infors dans les lignes de la table qui correspond à la clé primaire sélectionnée. Je ne sais pas si je dois... www.commentcamarche.net/forum/affich-3344930-modifier-les-infos-dans-une-table-phpmysql
MySQL - Update avec jointureSi vous avez deux tables possédant une clé commune (dans le cas ci-dessous il s'agit de la clé primaire "id"), il est possible de mettre à jour un champ d'une des deux tables (update_table) grâce aux données de la seconde (reference_table) à l'aide... www.commentcamarche.net/faq/sujet-10426-mysql-update-avec-jointure
Duplicate entry '127' for key 1Vous tentez de faire une insertion dans une table de votre base de données Mysql et vous obtenez l'erreur Mysql suivante: Duplicate entry '127' for key 1 Ceci provient très probablement du fait que la clé primaire de votre table est de type TINYINT... www.commentcamarche.net/faq/sujet-10644-duplicate-entry-127-for-key-1
Clé WPA / WEP perdue ou oubliéeSi vous n'arrivez plus à vous connecter à votre réseau WiFi car vous avez oublié la clé WEP ou la clé WPA, la seule solution est de les modifier sur votre point d'accès ou votre routeur WiFi. Changer la clé WEP La première solution suppose que vous... www.commentcamarche.net/faq/sujet-11362-cle-wpa-wep-perdue-ou-oubliee
Phpmysql, un formulaire avec 2 boutons (Résolu)Bonjour à tous, J'aimerais regrouper deux formulaire en une. C'est à dire, j'ai une table qu'on peut soit modifier soit supprimer les données dans la ligne correspondant à sa clé primaire. Je compte de faire: echo "\n www.commentcamarche.net/forum/affich-3454581-phpmysql-un-formulaire-avec-2-boutons
[SQL] Requête "mouvante" (Résolu)Bonjour, voila mon problème : je code un tableau, avec la possibilité pour n'importe qui de le modifier. Pour faire simple, la table se présente comme suit : - champ index (clé primaire), auto incrément - champ num (saisi par l'utilisateur,... www.commentcamarche.net/forum/affich-2323178-sql-requete-mouvante
Parcourir une table (mysql/php) (Résolu)Bonjour à tous, Je viens de créer une table dans une base de donnée Mysql. La table contient 3 champs : Date (la clé primaire) , titre, description. Ensuite , j'ai une page PHP qui affiche des dates. Je voudrais trouver une fonction ou une... www.commentcamarche.net/forum/affich-6925071-parcourir-une-table-mysql-php
Télécharger Crystal ClearCrystal Clear est changera entièrement l'apparence de votre Windows XP en modifiant les fichiers système. Le pack Crystal Clear intègre un style visuel qui apportera de la fraicheur dans votre Windows. Afin de répondre à toutes vos attentes, ce... www.commentcamarche.net/telecharger/telecharger-34055074-crystal-clear
Télécharger ClearTweakClearTweak vous permet de modifier la manière dont Windows affiche le texte à l'écran: sans lissage: avec lissage: avec ClearType (pour les moniteurs LCD uniquement): Cela permet d'améliorer la lisibilité du texte à... www.commentcamarche.net/telecharger/telecharger-34055129-cleartweak
SQL - Création de table Le SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. Le création de tables se fait à l'aide du couple de mots-clés CREATE TABLE. La syntaxe de définition... www.commentcamarche.net/sql/sqlcreate.php3
SQL - Mise à jour d'informations Le SQL permet la modification d'une table par un utilisateur (pour peu qu'il ait les droits suffisants...). La modification d'une table consiste à: ajouter des tuples modifier des tuples existants ou bien supprimer des tuples L'insertion de nouvelles... www.commentcamarche.net/sql/sqlmaj.php3
Oracle - Les séquences Cet article s'appuie sur la version 8.1.6 d'Oracle. Une séquence est un objet de base de données Oracle, au même titre qu'une table, une vue, etc... Autrement dit, il appartient à un utilisateur, on peut le manipuler, le modifier, à condition d'avoir... www.commentcamarche.net/oracle/oracseq.php3
Toutes les réponses pour « modifier une clé primaire d'une table »