2016-11-09 3 views
1

Im Moment habe ich die folgende Tabellenstruktur:Wie alle Fremdschlüssel zu ersetzen?

USER 
    ID BIGINT NOT NULL 
    USER_DATA_ID BIGINT NOT NULL REFERENCES USER_DATA(ID) 

USER_DATA 
    ID BIGINT NOT NULL 
    PERSON_DATA_ID BIGINT NOT NULL REFERENCES PERSON_DATA(ID) 

PERSON_DATA 
    ID BIGINT NOT NULL 

So wie Sie alle Personendaten-IDs sind in der USER_DATA Tabelle sehen können. Ich muss jetzt eine große Veränderung vornehmen. Die IDs der Personendaten sollten jetzt in der Tabelle USER referenziert werden, ohne die Daten zu verlieren. Das neue Schema muss also lauten:

USER 
    ID BIGINT NOT NULL 
    USER_DATA_ID BIGINT NOT NULL REFERENCES USER_DATA(ID) 
    PERSON_DATA_ID BIGINT NOT NULL REFERENCES PERSON_DATA(ID) 

Kann ich es mit einfachen SQL-Anweisungen tun? Ich arbeite mit H2-Datenbank.

Antwort

1
  1. Löschen Sie zuerst die foreign key die USER_DATA(PERSON_DATA_ID) zu PERSON_DATA(ID) verweist.
  2. Fügen Sie eine neue Spalte USER Tabelle PERSON_DATA_ID hinzu.
  3. Kopieren Sie die Spalte PERSON_DATA_ID-USER: INSERT INTO USER(PERSON_DATA_ID) SELECT ud.PERSON_DATA_ID FROM USER_DATA AS ud INNER JOIN USER AS u ON ud.ID = u.USER_DATA_ID
  4. löschen USER_DATA(PERSON_DATA_ID) Spalte.
  5. Eine neue foreign key Beziehung zwischen USER und PERSON_DATA
Verwandte Themen