1

관계 설계의 4원칙

관계·속성·제약 설계

학습 목표
  • 관계를 남발하지도 아끼지도 않는 기준을 세운다
  • 관계 방향과 명명의 일관성 원칙을 적용한다

관계 설계의 4원칙

앞 모듈의 55개 클래스는 아직 섬입니다. 관계가 이들을 대륙으로 만듭니다. 관계를 남발하면 스파게티, 아끼면 답 못 하는 그래프가 되므로 원칙이 필요합니다.

원칙 1: 모든 관계는 CQ 에서 태어난다. 클래스와 같은 규칙입니다. "있으면 좋을 것 같은" 관계는 만들지 않습니다.

원칙 2: 방향은 "소유·발생의 흐름"을 따른다. (Vessel)-[:MAKES_CALL]->(PortCall)처럼 주체→사건, (Container)-[:LOCATED_AT]->(YardSlot)처럼 객체→장소입니다. Neo4j는 양방향 탐색이 공짜이므로 방향은 성능이 아니라 의미의 일관성 문제입니다. 한번 정하면 전 스키마에서 통일합니다.

원칙 3: 관계 이름에 시제를 넣지 않는다. BERTHED_AT(과거형)이 아니라 상태는 속성·이벤트로 표현합니다. 시제를 이름에 넣는 순간 WAS_BERTHED, WILL_BERTH가 증식합니다.

원칙 4: 다대다 + 속성이 필요하면 노드 승격을 검토한다. 앞 모듈 논쟁 ②의 연장입니다 — 관계에 속성이 3개 이상 붙기 시작하면 그것은 노드가 되고 싶어 하는 관계입니다.

용어