9

제약 3층·인덱스와 Cypher 구현

온톨로지 스펙 작성

학습 목표
  • 제약을 세 층으로 나눠 강제 주체를 정한다
  • 인덱스를 CQ 의 WHERE 절에서 역산한다
  • 스키마를 실제로 세운다

제약 3층 배치

코스 2의 층 구분을 그대로 씁니다. 강제 수단이 다르므로 층을 나눕니다.

내용강제 주체
L1유일성 제약Neo4j (DB)
L2값 형식·범위·카디널리티·존재성적재 파이프라인
L3도메인 규칙(규정 준수 등)질의로 상시 감시

⚠️ 존재성 제약은 L2 입니다. Community 에서 DB 로 걸 수 없다는 사실을 코스 2에서 확인했습니다. L1 에 적어 두면 나중에 "왜 안 걸리지?"로 시간을 씁니다.

인덱스 설계

CQ 의 WHERE 절이 인덱스 목록입니다. MVP 8선의 필터 조건을 먼저 걸고, 나머지는 질의 단계에서 PROFILE 로 증거를 보고 추가합니다.

⚠️ 미리 다 걸지 않습니다 — 인덱스는 쓰기 비용입니다.

실습

  1. L1 제약을 Cypher 로 작성합니다.
CREATE CONSTRAINT vessel_imo IF NOT EXISTS
FOR (v:Vessel) REQUIRE v.imoNumber IS UNIQUE;
  1. 앞 과제에서 내보낸 스키마 Cypher 와 함께 실제로 실행합니다.
  2. 인덱스를 만들고, MVP CQ 하나를 샘플 데이터로 질의해 봅니다.
  3. ⚠️ 이 시점에서 스키마 결함이 처음 드러납니다. 발견한 것을 개정 노트에 기록하고, 스펙 문서와 시각 스키마를 함께 고칩니다 — 한쪽만 고치면 그때부터 문서가 죽습니다.

산출물: 제약·인덱스 Cypher 스크립트 + 실행 결과 + 개정 노트

에디터 로딩 중...
용어