Проблема
Предположим, что таблица выглядит так:
CREATE TABLE parent (
parent_id INTEGER PRIMARY KEY,
col1 REAL,
col2 REAL
);
Затем требования системы меняются и parent
требует наличия информации col1
и col2
на двух разные моменты времени. Одним из возможных вариантов может быть создание отдельной таблицы для col1
и col2
:
CREATE TABLE child (
child_id INTEGER PRIMARY KEY,
col1 REAL,
col2 REAL
);
CREATE TABLE parent (
parent_id INTEGER PRIMARY KEY,
current_child INTEGER,
previous_child INTEGER,
FOREIGN KEY (current_child) REFERENCES child (child_id),
FOREIGN KEY (previous_child) REFERENCES child (child_id)
);
вопросов
Есть ли способ создать миграцию SQL сценарий для перемещения данных из исходной таблицы parent
в child
и установки правильного внешнего ключа в current_child
?
previous_child
может изначально оставаться пустым, это не проблема. - Меня пока не волнует удаление столбцов
col1
и col2
из parent
. - Я избегаю использования вспомогательных скриптов на других языках (например, в Python), чтобы упростить процесс миграции.
Есть ли лучшая альтернатива дизайна?
- Я мог бы просто добавить два новых столбца
previous_col1
и previous_col2
, но в реальном сценарии у меня гораздо больше столбцов.
PS: Вероятно, уместно знать, что я использую SQLite.
Update
@Felix.leg задал отличный вопрос, и я заметил, что я застрял с идеей всегда используя автоматически сгенерированные значения PK для обеих таблиц. Правда в том, что child_id
можно определить из parent_id
:
current_child = 2 * parent_id - 1
previous_child = 2 * parent_id
При таком подходе я полагаю, что можно было бы написать единственный SQL сценарий миграции для создания новой таблицы, перемещения данных и установки правильных значений внешнего ключа.