问题
假设一张这样的table:
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
,但我在真实场景中有更多的列。
注:知道我使用的是sqlite可能是相关的。
更新
@felix.leg问了一个很好的问题,我注意到我一直坚持对两个表都使用自动生成的pk值的想法。事实是 child_id
可以从定义 parent_id
:
current_child = 2 * parent_id - 1 previous_child = 2 * parent_id
通过这种方法,我相信可以编写一个sql迁移脚本来创建新表、移动数据和设置正确的外键值。
暂无答案!
目前还没有任何答案,快来回答吧!