我需要为每个新版本的对象重新处理当前表示M:N关系,因为生成了许多重复的行:
对象表
create table tmp_objects(id_obj number, version number, other_data varchar2(100));
-- Object 1
insert into tmp_objects(id_obj, version, other_data) values (1,1,'something');
insert into tmp_objects(id_obj, version, other_data) values (1,2,'something else');
insert into tmp_objects(id_obj, version, other_data) values (1,3,'nothing');
commit;
-- Object 2
insert into tmp_objects(id_obj, version, other_data) values (2,1,'2 something');
insert into tmp_objects(id_obj, version, other_data) values (2,2,'2 something else');
insert into tmp_objects(id_obj, version, other_data) values (2,3,'2 nothing');
commit;
Curent关系(每个新对象版本的行数)
create table tmp_old_rels(id_rel number, id_obj_1 number, version_1 number,id_obj_2 number, version_2 number, rel_data varchar2(100));
-- Data
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (1, 1, 1, 2, 1, 'same');
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (2, 1, 2, 2, 1, 'same');
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (3, 1, 1, 2, 2, 'same');
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (4, 1, 2, 2, 2, 'same');
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (5, 1, 2, 2, 1, 'different');
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (6, 1, 2, 2, 2, 'different');
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (7, 1, 2, 2, 3, 'different');
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (8, 1, 3, 2, 1, 'different');
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (9, 1, 3, 2, 2, 'different');
insert into tmp_old_rels(id_rel, id_obj_1, version_1, id_obj_2, version_2, rel_data) values (10, 1, 3, 2, 3, 'different');
commit;
新计划的关系(每个唯一的id_obj_1行,id_obj_2,带版本范围的rel_data)
create table tmp_new_rels (id_rel number, id_obj_1 number, version_1_from number,version_1_to number,id_obj_2 number, version_2_from number,version_2_to number, rel_data varchar2(100));
-- Data
insert into tmp_new_rels(id_rel, id_obj_1, version_1_from, version_1_to, id_obj_2, version_2_from, version_2_to, rel_data) values (1,1, 1, 2, 2 , 1, 2, 'same');
insert into tmp_new_rels(id_rel, id_obj_1, version_1_from, version_1_to, id_obj_2, version_2_from, version_2_to, rel_data) values (2,1, 2, 3, 2 , 1, 3, 'different');
commit;
是否有更好的方式来表示M:N关系,其中每个对象都有及时的快照,它们之间的关系必须是范围?