여럿이 참여하는 사건, 중간 노드
관계는 두 노드만 잇습니다. 세 명 이상이 참여하거나 그 자체에 정보가 많은 사건을 담는 중간 노드 패턴을 봅니다.
이번 회차, 내 속도로.
기초를 더 짚거나 궁금한 주제로 잠깐 넓혀 보세요. 최대 3단계를 거쳐 DAY 42로 돌아옵니다.
난이도·관심 주제 고르기
1/2개 선택 · 새 보충·심화 수업과 본과정 다시 읽기를 선택할 수 있어요.
이렇게 다녀와요 1단계 · 약 12분
- 출발 · DAY 42이벤트 노드·n항 관계
- 1. 관심 주제다중 레이블·레이블 선택추가 17 · 새 추가 수업
- 복귀 · DAY 42원래 회차 이어가기
- 다중 레이블·레이블 선택 · DAY 41에서 값의 자리를 고르는 법을 배운 뒤, 레이블이라는 또 하나의 선택지를 언제 쓰는지 보충하러 옵니다.
선택과 경로 기록은 이 브라우저에 저장됩니다. 본과정의 회차 완료와는 별도입니다.
핵심 개념
‘민수·지아·서준이 2024년 3월 5일 대전 회의실에서 회의했다’에는 사람 셋과 장소, 날짜가 함께 걸려 있습니다. DAY 4에서 본 하이퍼엣지 상황입니다. 속성 그래프의 관계는 정확히 두 노드만 잇기 때문에 이 사실을 관계 하나로 담을 수 없습니다.
쌍 관계로만 적으면 민수–지아, 민수–서준, 지아–서준에 MET_WITH 관계 3개를 만들고 날짜와 장소를 관계마다 복사합니다. 그러면 세 관계가 같은 회의라는 사실이 사라지고, 같은 사람들이 두 번 만난 회의를 구분하기도 어렵습니다. 참석자가 n명이면 쌍은 n(n−1)/2개로 빠르게 늘어납니다.
중간 노드(이벤트 노드)는 사건 자체를 노드로 만듭니다. (:Meeting {date: date('2024-03-05')})를 만들고 참석자마다 (:Person)-[:ATTENDED]->(:Meeting), 장소는 (:Meeting)-[:HELD_AT]->(:Room)으로 잇습니다. 날짜는 한 번만 저장되고, 회의에 안건 논문 같은 다른 대상도 연결할 수 있습니다. 거래(:Transaction)나 고용 기록(:Employment)도 같은 패턴입니다.
대가도 있습니다. ‘누가 누구와 만났나’를 물으려면 사람→회의→사람으로 한 홉이 더 필요합니다. 그래서 모든 관계를 사건 노드로 바꾸지는 않습니다. 참여자가 셋 이상이거나, 사건에 속성이 많거나, 사건 자체를 다른 곳에서 가리켜야 할 때 중간 노드를 씁니다. Neo4j 모델링 안내서도 관계에 담기 어려운 정보를 중간 노드로 푸는 방법을 소개합니다.
작은 예제로 따라가기
쌍 관계로만: 3명이면 관계 3개이고, 날짜가 관계마다 복사되어 3번 저장됩니다.
회의 노드로: ATTENDED 3개 + HELD_AT 1개 = 관계 4개이고, 날짜는 Meeting 노드에 1번만 있습니다.
5명 회의라면 쌍 관계는 5×4/2=10개, 회의 노드 방식은 ATTENDED 5개 + HELD_AT 1개 = 6개입니다.
직접 실험해 보기
Segmented를 ‘쌍 관계로만’과 ‘회의 노드로’로 바꾸며 그래프의 엣지 수와 ‘회의 날짜를 어디에 저장하나’ Result를 비교하고, 두 모델에서 ‘민수와 함께 회의한 사람’을 찾는 홉 수를 적으세요.
여럿이 참여한 회의를 중간 노드로
MATCH (p1:Person {name: '민수'}),
(p2:Person {name: '지아'}),
(p3:Person {name: '서준'})
WITH *, date('2025-03-14') AS d
CREATE (p1)-[:MET {date: d, place: '회의실'}]->(p2),
(p1)-[:MET {date: d, place: '회의실'}]->(p3),
(p2)-[:MET {date: d, place: '회의실'}]->(p3)// 1홉: 쌍 관계를 바로 따라간다
MATCH (:Person {name: '민수'})-[:MET]-(x:Person)
RETURN x.name이번에는 직접 풀어 보세요
정답을 보기 전에 계산과 이유를 적어 보세요. 해설과 비교하고 확인 표시를 남기면 완료할 수 있습니다.
힌트 보기
빌려준 사람, 빌린 사람, 물건, 기간을 한 사건에 모읍니다.
풀이와 비교하기
참여 대상은 지아·민수·장비 3개입니다. (l:Loan {from: date('2024-05-01'), to: date('2024-05-07')}) 노드를 만들고 (:Person {name:'지아'})-[:LENT]->(l), (:Person {name:'민수'})-[:BORROWED]->(l), (l)-[:OF_ITEM]->(:Equipment)로 잇습니다. 기간은 Loan 노드에 한 번만 저장합니다.
풀이와 확인 표시는 이 브라우저에 저장됩니다.
오늘 이해한 것과 다시 볼 것
계산이 달라진 이유, 헷갈린 개념, 다음에 확인할 질문을 남겨 보세요.
메모는 이 브라우저에 저장됩니다. 홈에서 전체 기록을 내려받을 수 있습니다.오늘의 이해 확인
6명이 참석한 회의를 쌍 관계로만 표현하면 관계가 몇 개 필요한가요?
완료 조건: 확인 퀴즈 정답 · / 직접 풀기 0/1
더 깊이 읽기
예제와 실험 데이터는 이 과정을 위해 만든 것입니다. 원문은 선택 자료이며, 강의와 직접 풀기만으로도 다음 회차를 이어갈 수 있습니다.
Modeling designsNeo4j Getting StartedWhat is graph data modeling?Neo4j Getting Started이 자료는 개념 학습용입니다. 실제 데이터베이스·라이브러리·플랫폼의 동작과 설정은 제품과 버전마다 다를 수 있습니다.