J'ai un oracle db qui n'a pas de clé étrangère, toutes les relations de table sont gérées par le logiciel. Par exemple, une table Customer
avec des colonnes Customer.customercode
, Customer.Name
où customercode
est la clé primaire et une table Order
avec des colonnes Order.ordercode
(PK), Order.customercode
où customercode
n'a pas de contrainte de clé étrangère. Jusqu'à présent, l'application gère toutes les transactions et prend en charge toutes les relations de table afin que les données soient cohérentes. J'ai besoin de changer ceci à une implémentation de DB relationnelle correcte, donc j'ai besoin de modifier Order.customercode
pour être un FK de la table Customer
. Toute instruction sqlplus pour le faire sans perdre mes données?Modification d'une colonne existante à une clé étrangère
1
A
Répondre
2
Dans Oracle, la création d'une clé étrangère ne perdra jamais de données, mais elle échouera si les données ne correspondent pas à la nouvelle contrainte. Si l'on suppose que vos données sont OK, vous pouvez utiliser une instruction alter table
:
ALTER TABLE order
ADD CONSTRAINT order_customer_fk FOREIGN KEY (customercode)
REFERENCES customer(customercode)
si toutes les données sont cohérentes alors il n'y a pas de problème, 'alter table pour ajouter la contrainte ord_cust_fk client références clés étrangères (de customercode) (de customercode);' et vous avez terminé. Heureusement, il existe déjà un index sur 'order.customercode' sinon il est temps d'en ajouter un. –