9분
제약 3층·인덱스와 Cypher 구현
온톨로지 스펙 작성
제약 3층·인덱스와 Cypher 구현
온톨로지 스펙 작성 > 온톨로지 스펙 작성
학습 목표
- 제약을 세 층으로 나눠 강제 주체를 정한다
- 인덱스를 CQ 의 WHERE 절에서 역산한다
- 스키마를 실제로 세운다
제약 3층 배치
코스 2의 층 구분을 그대로 씁니다. 강제 수단이 다르므로 층을 나눕니다.
| 층 | 내용 | 강제 주체 |
|---|---|---|
| L1 | 유일성 제약 | Neo4j (DB) |
| L2 | 값 형식·범위·카디널리티·존재성 | 적재 파이프라인 |
| L3 | 도메인 규칙(규정 준수 등) | 질의로 상시 감시 |
⚠️ 존재성 제약은 L2 입니다. Community 에서 DB 로 걸 수 없다는 사실을 코스 2에서 확인했습니다. L1 에 적어 두면 나중에 "왜 안 걸리지?"로 시간을 씁니다.
인덱스 설계
CQ 의 WHERE 절이 인덱스 목록입니다. MVP 8선의 필터 조건을 먼저 걸고, 나머지는 질의 단계에서 PROFILE 로 증거를 보고 추가합니다.
⚠️ 미리 다 걸지 않습니다 — 인덱스는 쓰기 비용입니다.
실습
- L1 제약을 Cypher 로 작성합니다.
CREATE CONSTRAINT vessel_imo IF NOT EXISTS
FOR (v:Vessel) REQUIRE v.imoNumber IS UNIQUE;
- 앞 과제에서 내보낸 스키마 Cypher 와 함께 실제로 실행합니다.
- 인덱스를 만들고, MVP CQ 하나를 샘플 데이터로 질의해 봅니다.
- ⚠️ 이 시점에서 스키마 결함이 처음 드러납니다. 발견한 것을 개정 노트에 기록하고, 스펙 문서와 시각 스키마를 함께 고칩니다 — 한쪽만 고치면 그때부터 문서가 죽습니다.
산출물: 제약·인덱스 Cypher 스크립트 + 실행 결과 + 개정 노트
에디터 로딩 중...