// 새로운 시나리오 'SCN04' 생성 및 순서 변경 // 1. 새로운 시나리오 'SCN04' 노드 생성 (SCN01 기반) CREATE (s4:Scenario {id: 'SCN04', name: 'SCN01 순서 변경 시나리오', description: 'SCN01에서 Job 2와 Job 1의 순서를 변경'}); // 2. SCN01에 포함된 Job들을 SCN04에도 INCLUDES 관계로 연결합니다. MATCH (s1:Scenario {id: 'SCN01'})-[r:INCLUDES]->(j:Job) WITH s1, j MATCH (s4:Scenario {id: 'SCN04'}) CREATE (s4)-[:INCLUDES]->(j); // 3. SCN01의 순서를 기반으로 SCN04의 초기 순서를 복제합니다. // - STARTS_WITH 관계 복제 MATCH (s1:Scenario {id: 'SCN01'})-[sw:STARTS_WITH]->(start_job:Job) WITH s1, start_job MATCH (s4:Scenario {id: 'SCN04'}) CREATE (s4)-[:STARTS_WITH]->(start_job); // - NEXT 관계망 복제 (SCN04 시나리오에 종속된 NEXT 관계 생성) MATCH (s1:Scenario {id: 'SCN01'})-[:STARTS_WITH]->(start_job:Job) MATCH path = (start_job)-[:NEXT*]->(end_job:Job) WHERE NOT (end_job)-[:NEXT]->() WITH nodes(path) AS jobs UNWIND range(0, size(jobs)-2) AS i WITH jobs[i] AS from_job, jobs[i+1] AS to_job MATCH (s4:Scenario {id: 'SCN04'}) // MERGE를 사용하여 SCN04의 Job들을 가져와서 NEXT 관계 생성 MERGE (j1:Job {id: from_job.id}) MERGE (j2:Job {id: to_job.id}) CREATE (j1)-[:NEXT {scenario: 'SCN04'}]->(j2); // 4. SCN04에서 Job 1과 Job 2의 순서를 변경합니다. (기존 1->2->3 ... 을 2->1->3 ... 으로) // - 기존 관계 삭제: (s4)-[sw:STARTS_WITH]->(j1), (j1)-[n1:NEXT {scenario: 'SCN04'}]->(j2) MATCH (s4:Scenario {id: 'SCN04'})-[sw:STARTS_WITH]->(j1:Job {id: '1'}) DELETE sw; MATCH (j1:Job {id: '1'})-[n1:NEXT {scenario: 'SCN04'}]->(j2:Job {id: '2'}) DELETE n1; MATCH (j2:Job {id: '2'})-[n2:NEXT {scenario: 'SCN04'}]->(j3:Job {id: '3'}) DELETE n2; // - 새로운 관계 생성: (s4)-[:STARTS_WITH]->(j2), (j2)-[:NEXT]->(j1), (j1)-[:NEXT]->(j3) MATCH (s4:Scenario {id: 'SCN04'}), (j1:Job {id: '1'}), (j2:Job {id: '2'}), (j3:Job {id: '3'}) CREATE (s4)-[:STARTS_WITH]->(j2), (j2)-[:NEXT {scenario: 'SCN04'}]->(j1), (j1)-[:NEXT {scenario: 'SCN04'}]->(j3); RETURN "SCN04가 성공적으로 생성되었습니다.";