programming/database
Neo4j Cypher, 이렇게 쓰면 진짜 프로다: 컨벤션 가이드
jamie91
2025. 2. 25. 19:04
Neo4j의 Cypher 쿼리 언어를 사용할 때 권장되는 컨벤션(Convention)은 코드의 가독성, 일관성, 유지보수성을 높이는 데 도움을 줍니다. 아래는 Cypher를 작성할 때 일반적으로 따르는 컨벤션들입니다.
1. 키워드(Keyword)
- Cypher의 키워드는 대문자로 작성합니다.
- 예:
MATCH
,RETURN
,WHERE
,CREATE
,MERGE
,SET
,DELETE
,WITH
,ORDER BY
,LIMIT
등. - 예시:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) RETURN p.name, m.title;
- 예:
2. 라벨(Labels)
- 라벨은 파스칼 케이스(PascalCase)로 작성합니다.
- 예:
Person
,Movie
,UserProfile
,CustomerOrder
. - 예시:
MATCH (p:Person {name: 'Tom Hanks'}) RETURN p;
- 예:
3. 관계 유형(Relationship Types)
- 관계 유형은 대문자 스네이크 케이스(UPPER_SNAKE_CASE)로 작성합니다.
- 예:
ACTED_IN
,DIRECTED
,IS_FRIEND_OF
,HAS_REVIEWED
. - 예시:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) RETURN p, m;
- 예:
4. 변수(Variables)
- 변수는 소문자 스네이크 케이스(lower_snake_case)로 작성합니다.
- 예:
p
,movie
,user_profile
,customer_order
. - 예시:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) RETURN p.name, m.title;
- 예:
5. 속성(Properties)
- 속성 이름은 소문자 스네이크 케이스(lower_snake_case)로 작성합니다.
- 예:
name
,release_year
,user_id
,created_at
. - 예시:
MATCH (p:Person {name: 'Tom Hanks'}) RETURN p.birth_year;
- 예:
6. 문자열(Strings)
- 문자열은 작은따옴표(
'
)를 사용합니다.- 예:
'Tom Hanks'
,'Apollo 13'
. - 예시:
MATCH (p:Person {name: 'Tom Hanks'}) RETURN p;
- 예:
7. 노드와 관계 표현
- 노드와 관계는 *괄호
()
와 *대괄호[]
로 명확히 구분합니다.- 노드:
(p:Person)
- 관계:
[r:ACTED_IN]->
- 예시:
MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) RETURN p, r, m;
- 노드:
8. 들여쓰기(Indentation)
- 쿼리의 가독성을 높이기 위해 적절히 들여쓰기를 사용합니다.
- 예시:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WHERE m.release_year > 2000 RETURN p.name, m.title ORDER BY m.release_year DESC;
- 예시:
9. 쿼리 종료
- Cypher 쿼리는 세미콜론(
;
)으로 끝냅니다.- 예시:
MATCH (p:Person) RETURN p;
- 예시:
10. 고유 식별자(Unique Identifiers)
- 고유 식별자는 소문자 스네이크 케이스(lower_snake_case)로 작성하며,
id
와 같은 일반적인 이름 대신 도메인에 맞는 이름을 사용합니다.- 예:
person_id
,movie_id
,user_uuid
. - 예시:
MATCH (p:Person {person_id: 123}) RETURN p;
- 예:
11. WITH 절
WITH
절을 사용하여 쿼리를 단계적으로 나눌 때는 적절히 들여쓰기하고, 변수 이름을 명확히 지정합니다.- 예시:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WITH p, COUNT(m) AS movie_count WHERE movie_count > 5 RETURN p.name, movie_count;
- 예시:
12. 함수(Functions)
- 함수는 소문자 스네이크 케이스(lower_snake_case)로 작성합니다.
- 예:
COUNT()
,SUM()
,toLower()
,toString()
. - 예시:
MATCH (p:Person) RETURN COUNT(p) AS total_people;
- 예:
13. 주석(Comments)
- 주석은
//
를 사용하여 추가합니다.- 예시:
// 모든 사람을 찾고 이름을 반환합니다. MATCH (p:Person) RETURN p.name;
- 예시:
14. 패턴 매칭(Pattern Matching)
- 패턴 매칭 시 방향성을 명확히 표시합니다.
- 예:
()-[:ACTED_IN]->()
또는()<-[:DIRECTED]-()
. - 예시:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person) RETURN p, m, d;
- 예:
15. 데이터 타입(Data Types)
- 데이터 타입은 명확히 지정합니다.
- 예:
INTEGER
,STRING
,BOOLEAN
,FLOAT
,DATE
. - 예시:
CREATE (p:Person {name: 'Tom Hanks', birth_year: 1956});
- 예:
16. 인덱스 및 제약 조건(Indexes and Constraints)
- 인덱스와 제약 조건은 명확히 정의하고, 이름은 소문자 스네이크 케이스(lower_snake_case)로 작성합니다.
- 예시:
CREATE INDEX person_name_index FOR (p:Person) ON (p.name); CREATE CONSTRAINT unique_person_id FOR (p:Person) REQUIRE p.person_id IS UNIQUE;
- 예시:
728x90
반응형