G·Graph Daily Lab 전체 140회
추가 12 / 40 · 심화 · 약 15분

관계형 스키마를 그래프로 옮기기

이미 관계형 DB에 있는 데이터를 그래프로 옮길 때 표·행·열·외래 키가 각각 무엇이 되는지, 그리고 기계적으로 옮기면 안 되는 지점을 봅니다.

속성 그래프 모델

배운 뒤 돌아올 회차

DAY 28에서 JOIN과 순회를 비교했다면, 실제 관계형 스키마를 그래프 모델로 바꾸는 규칙과 예외를 연습하러 옵니다.

시작하면 직접 풀기와 퀴즈 기록이 저장됩니다. 본과정 100회 진도와는 별도입니다.

이번에 더 배울 것

Neo4j의 변환 안내는 기본 대응을 이렇게 정리합니다. 엔터티 표는 레이블, 행은 노드, 열은 노드 속성이 됩니다. 다른 표를 가리키는 외래 키는 관계로 바꾸고, 두 표를 잇는 조인 표도 관계로 바꾸며 그 표의 나머지 열은 관계 속성이 됩니다. 업무에 의미 있는 키(email, doi)는 남겨 유일성 제약을 걸고, 일련번호 같은 기술용 키는 지울 수 있습니다.

예를 들어 person(id, email, name, lab_id), lab(id, name, city), paper(id, doi, title, year), authorship(person_id, paper_id, author_order)가 있다면 :Person·:Lab·:Paper 레이블과 (:Person)-[:WORKS_AT]->(:Lab), (:Person)-[:AUTHORED {order}]->(:Paper)가 됩니다. person.lab_id 외래 키는 사라지고 관계가 그 자리를 대신합니다. email1, email2처럼 번호 붙은 열은 목록 속성의 후보라는 점도 안내서에 있습니다.

기계적으로 옮기면 안 되는 경우가 있습니다. 조인 표가 셋 이상의 표를 가리키거나 다른 표에서 참조되면 관계가 아니라 중간 노드(DAY 42)가 맞습니다. 사람 표에 들어 있지만 실제로는 사람–연구실 관계의 사실인 열(합류일)은 관계 속성으로 옮깁니다. 상태 코드 같은 조회 표는 화면 표시용이면 속성으로, 공유되고 거쳐 가는 값이면 노드로 둡니다. 결국 판단 기준은 그래프가 답할 질문입니다.

작은 예제로 따라가기

1

person 6행은 :Person 노드 6개가 되고, email·name 열은 속성이 됩니다. id는 이관 검증이 끝나면 지워도 됩니다.

2

authorship 7행은 AUTHORED 관계 7개가 되고, author_order는 관계 속성 order가 됩니다.

3

person 표에 있던 joined_on 열은 사람의 성질이 아니라 근무 관계의 사실이므로 [:WORKS_AT {since}]로 옮깁니다.

COMPARE & EXPLAIN

조인 표의 운명

각 표가 그래프에서 관계가 될지, 노드가 될지, 속성이 될지 먼저 예상하세요.

AUTHORED 관계 + 관계 속성 order

외래 키 두 개와 그 쌍에 대한 열 하나뿐이라 관계 하나로 충분합니다.

표는 레이블, 행은 노드, 외래 키와 조인 표는 관계가 되지만, 셋 이상을 잇는 표는 중간 노드로 옮깁니다.

학습을 시작하면 새 문제를 직접 풀고 확인 퀴즈를 마친 뒤 선택한 본과정 회차로 돌아갑니다.