-
Neo4j 제약조건 생성하기(CONSTRAINT: unique, Not Null)Data & ML & AI/GraphDB(Neo4j) 2022. 7. 7. 01:08반응형
SQL에서 특정 칼럼에 unique, Not Null 등의 조건을 설정하듯, Neo4j에서도 제약을 생성할 수 있습니다.
CONSTRAINT문을사용하면 가능합니다.
공식문서에 따르면 다음과 같은 제약이 가능하다고 합니다.
- Unique node property constraints
- Node property existence constraints
- Relationship property existence constraints
- Node key constraints
일반화 해서 제약조건을 생성하는 방법은 다음과 같습니다.
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS] FOR (n:LabelName) REQUIRE n.propertyName IS UNIQUE [OPTIONS "{" option: value[, ...] "}"]
...
우리는 일반화된 공식보다는 실습을 통해서 더 쉽게 습득합니다.
빠른 실습을 위해 데이터 없이 비어있는 DBMS를 생성해서 실습해보겠습니다.
Create (p:Person {name: 'John Doe'}) Create (m:Movie {title: 'Cloud Atlas'}) return p,m
이렇게 데이터 두개만 있는 상태로 실습 시작해 보겠습니다. Unique node property constraints
- 똑같은 이름의 사람을 제한하기 (person의 name을 unique로 제한)
Create CONSTRAINT unique_person_name FOR (p:Person) REQUIRE p.name IS UNIQUE
이렇게 제약조건을 걸어놓으면 이미 있는 데이터인 'John Doe'라는 사람의 데이터가 중복으로 들어가는 것을 막을 수 있습니다.
IF NOT EXISTS
- 똑같은 제약조건의 존재여부로 인한 에러방지
이미 존재하는 제약조건을 다시 설정한다면 에러가 발생합니다.
(DB를 껐다켰다 하면 은근 발생합니다)
이미 동일한 제약조건이 존재한다고 에러를 띄웁니다. 이 경우, if not exists를 추가해주면
1) 제약조건이 없을 경우 조건을 생성하기
2) 이미 제약조건이 존재할 경우 무시하고 넘어가기
가 가능합니다.
이때, 제약조건이 존재하는지 여부를 확인하는 수단은 제약조건의 이름입니다.
(제약의 내용이 달라도 이름이 동일하면 이미 존재하는 것으로 판단합니다.)
기존에 없던 제약조건이라면 새로 생성합니다. 이미 존재했었다면 변화가 없습니다. Node property existence constraints
- 영화이름 누락방지하기(movie의 title을 not null로 제한)
데이터 업무에 따라 입력시 절대 누락되어서는 안되는 데이터들이 있습니다. 제약조건을 걸어두면 실수를 방지할 수 있습니다.
CREATE CONSTRAINT not_null_movie_title FOR (m:Movie) REQUIRE m.title IS NOT NULL
제약조건을 만든 후 실수로 title을 빠뜨리면 에러가 발생합니다 이때, 당연히 기존 데이터가 가지고 있지 않은 항목/속성을 Not Null로 설정하려고 하면 에러가 나타납니다.
'Cloud Atlas'는 year를 가지고 있지 않았으니 당연히 not null 설정이 불가능합니다. 뒤늦게라도 year 데이터를 채워주면 이제는 year를 not null로 제한할 수 있게 됩니다.
위와 같은 제약조건설정은 Node 뿐 아니라 Edge(Relationship)에도 설정 가능합니다.
반응형'Data & ML & AI > GraphDB(Neo4j)' 카테고리의 다른 글
[Neo4j + Python] Python에서 Neo4j DB 접속하고 쿼리하기 (0) 2022.08.28 Neo4j csv파일 열기(LOAD CSV) (0) 2022.07.11 Neo4j Cypher 기본구문(Create, Match, Merge 절) (0) 2022.06.09 Neo4j의 기본 구성요소(Elements of Neo4j; study with Movies Project Tutorial) (0) 2022.06.09 Neo4j와 Cypher 구문의 기본요소 (0) 2022.06.08