2017-08-23 3 views
1

Ich habe eine Oracle-DB, die keine Fremdschlüssel hat, alle Tabellenbeziehungen werden von der Software behandelt. Zum Beispiel Tabelle Customer mit Säulen Customer.customercode, Customer.Name wo customercode ist der Primärschlüssel und Tabelle OrderOrder.ordercode mit Säulen (PK), wo Order.customercodecustomercode keine Fremdschlüssel aufweisen. Bisher behandelt die Anwendung alle Transaktionen und kümmert sich um alle Tabellenbeziehungen, so dass die Daten konsistent sind. Ich muss dies in eine ordnungsgemäße relationale DB-Implementierung ändern, also muss ich Order.customercode zu einem FK aus Tabelle Customer ändern. Irgendeine sqlplus-Anweisung, um dies zu tun, ohne meine Daten zu verlieren?Ändern einer vorhandenen Spalte zu einem Fremdschlüssel

+1

, wenn alle Daten konsistent sind, dann ist es kein Problem, 'nur Tabelle hinzufügen, um ändern Einschränkung ord_cust_fk Fremdschlüssel (customercode) Referenzen Kunde (customercode);' und du bist fertig. Hoffentlich gibt es bereits einen Index für 'order.customercode', wenn es nicht an der Zeit ist, einen hinzuzufügen. –

Antwort

2

In Oracle würde das Erstellen eines Fremdschlüssels niemals Daten verlieren, aber es wird fehlschlagen, wenn die Daten nicht der neuen Einschränkung entsprechen. Angenommen, Ihre Daten in Ordnung ist, können Sie eine alter table Anweisung:

ALTER TABLE order 
ADD CONSTRAINT order_customer_fk FOREIGN KEY (customercode) 
REFERENCES customer(customercode) 
Verwandte Themen