ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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)에도 설정 가능합니다.

    반응형

    댓글

Designed by Tistory.