簡體   English   中英

SQL:具有版本范圍的對象之間的M:N關系

[英]SQL: M:N relationship between objects with version range

我需要從對象的每個新版本的行中重做當前表示形式的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;

當前關系(每個新對象版本的行)

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關系,其中每個對象都有時間快照,並且它們之間的關系必須在范圍內?

您可能會受益於對數據進行版本控制。 下面是我在她的答案是指大量的附加信息,包括訪問的數據,包括查詢版本控制(歷史)和非版本數據之間的連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM