2016-11-09 3 views
1

Сейчас я имею следующую структуру таблицы:Как заменить все внешние ключи?

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 

Так как вы можете видеть все идентификаторы лица данные находятся в таблице USER_DATA. Теперь я должен внести огромные изменения. Теперь идентификаторы данных лица должны быть указаны в таблице USER без потери данных. Таким образом, новая схема должна быть:

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) 

Могу ли я сделать это с помощью простых операторов SQL? Im работает с базой данных H2.

ответ

1
  1. Сначала удалите foreign key, который ссылается USER_DATA(PERSON_DATA_ID) к PERSON_DATA(ID).
  2. Добавить новый столбец на USER Таблица PERSON_DATA_ID.
  3. Скопируйте столбец 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. Удалить USER_DATA(PERSON_DATA_ID) колонку.
  5. Настройка нового foreign key отношения между USER и PERSON_DATA
Смежные вопросы