问题:
我在表A
和另一个表B
之间有一个:m关系,并且需要具有此关系的完整历史记录,换句话说,我必须能够重现状态过去的任何一点。
思路:
我的第一个尝试是通过插入虚拟表来解析关系到1:m和m:n关系,以便在发生某些变化时在任何给定时间保存关系的状态。像这样:
TABLE A TABLE B
-------- ---------
ID INT ID INT
TABLE HIST TABLE CROSS_REF
---------- -----------------
ID INT REF_B_ID INT
REF_A_ID INT REF_HIST_ID INT
VERSION TIMESTAMP
Pro:查询所需信息很容易。 Con:此尝试将创建大量冗余数据,尤其是当" B" -Side很大且只有很小的变化时。 (例如在用例"公司 - 员工")
第二种方法是维持两个n:m关系,一个用于当前状态,一个用于发生的变化。
TABLE A TABLE B
-------- ---------
ID INT ID INT
TABLE CHANGES TABLE CROSS_REF
---------- -----------------
REF_A_ID INT REF_A_ID INT
REF_B_ID INT REF_B_ID INT
ACTION_TIME TIMESTAMP
ACTION_TYPE VARCHAR
Pro:没有冗余数据。 Con:过去很难查询特定时间点的状态。
问题
答案 0 :(得分:2)
这个常用的模型怎么样?
QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/packages"),
QStandardPaths::LocateDirectory);
(注意我和你一样使用create table cross_ref
( a_id references a
, b_id references b
, from_ts timestamp
, to_ts timestamp
, primary key (a_id, b_id, from_ts)
);
;通常我会使用timestamp
)