제약 조건의 개요

Snowflake는 다음과 같은 제약 조건 기능을 제공합니다.

  • 고유, 기본 및 외래 키와 NOT NULL 열.

  • 명명된 제약 조건.

  • 단일 열 및 다중 열 제약 조건.

  • 인라인 및 아웃오브 라인으로 제약 조건 만들기.

  • 제약 조건 만들기, 수정, 삭제.

이 항목의 내용:

지원되는 제약 조건 유형

Snowflake는 ANSI SQL 표준에서 다음과 같은 제약 조건 유형을 지원합니다.

  • PRIMARY KEY

  • FOREIGN KEY

  • UNIQUE

  • NOT NULL

테이블에는 여러 개의 고유 키와 외래 키가 있을 수 있지만, 기본 키는 하나만 있을 수 있습니다. PRIMARY KEY 제약 조건은 열이 NOT NULL이자 UNIQUE임을 의미합니다.

모든 외래 키는 외래 키에 있는 각 열의 열 유형과 일치하는 해당 기본 키나 고유 키를 참조해야 합니다. 외래 키의 기본 키는 외래 키와 다른 테이블이나 같은 테이블에 있을 수 있습니다. 하이브리드 테이블 에 걸쳐 외래 키 제약 조건을 정의하는 경우 테이블은 동일한 데이터베이스에 있어야 합니다.

다음 표에는 제약 조건의 적용과 제약 조건이 필요한지 여부와 관련하여 표준 테이블과 하이브리드 테이블 간에 동작의 차이점이 요약되어 있습니다.

  • 제약 조건은 특정 방식으로 열이 업데이트되지 않도록 할 때 적용 됩니다. 예를 들어, NOT NULL로 선언된 열은 NULL 값을 포함할 수 없습니다. NULL 값을 NOT NULL 열에 복사하거나 삽입하려고 하면 항상 오류가 발생합니다. 하이브리드 테이블의 경우 PRIMARY KEY, FOREIGN KEY, UNIQUE 제약 조건에 NOT ENFORCED 속성을 설정할 수 없습니다. 이 속성을 설정하면 “invalid constraint property” 오류가 발생합니다.

  • 제약 조건은 테이블에서 하나 이상의 열에 그와 같은 제약 조건이 반드시 있어야 하는 경우 필수적 이며, 이는 하이브리드 테이블의 PRIMARY KEY 제약 조건에만 해당됩니다.

Feature

하이브리드 테이블

표준 테이블

PRIMARY KEY 제약 조건

필수, 적용됨

선택 사항, 적용되지 않음

FOREIGN KEY 제약 조건

선택 사항, 적용된 (참조 무결성)

선택 사항, 적용되지 않음

UNIQUE 제약 조건

선택 사항, 적용됨

선택 사항, 적용되지 않음

NOT NULL 제약 조건

선택 사항, 적용됨

선택 사항, 적용됨

CREATE | ALTER TABLE … CONSTRAINT 도 참조하십시오.

테이블 제약 조건

Snowflake는 영구적 테이블, 일시적 테이블, 임시 테이블, 하이브리드 테이블에 대한 제약 조건을 지원합니다. 모든 데이터 타입의 열에 대한 제약 조건을 정의할 수 있으며, 단일 제약 조건에는 열을 몇 개라도 포함할 수 있습니다.

  • CREATE TABLE … LIKE 또는 CREATE TABLE … CLONE을 사용하여 테이블을 복사하면 외래 키를 포함하여 테이블의 모든 기존 제약 조건이 새 테이블에 복사됩니다. (하이브리드 테이블에는 CREATE TABLE … CLONE이 지원되지 않습니다.)

  • 제약 조건이 있는 테이블에 대해 DROP/UNDROP 및 GET_DDL과 같은 추가적인 명령과 함수가 지원됩니다. 이들 명령과 함수는 스키마와 데이터베이스에도 지원됩니다.

    Snowflake Time Travel의 경우, Snowflake는 테이블 메타데이터에 이전 버전의 제약 조건을 저장하지 않으므로 이전 버전의 테이블을 복사할 때 테이블에서 현재 버전의 제약 조건이 사용됩니다.

단일 열 및 다중 열 제약 조건

같은 테이블의 단일 열 또는 다중 열에서 제약 조건을 정의할 수 있습니다.

다중 열 제약 조건(복합 기본 키 또는 고유 키)의 경우, 열이 정렬되고 각 열에는 해당 키 시퀀스가 있습니다.

인라인 및 아웃오브 라인 제약 조건

제약 조건은 테이블 만들기 또는 수정 중에 인라인 또는 아웃오브 라인으로 정의됩니다.

  • 인라인 제약 조건은 열 정의의 일부로 생성되고 단일 열 제약 조건에만 사용할 수 있습니다.

  • 아웃오브 라인 제약 조건은 제약 조건을 만든 열을 지정하는 별개의 절을 사용하여 정의됩니다. 단일 열 또는 다중 열 제약 조건 만들기뿐 아니라, 기존 열에 대한 제약 조건 만들기에도 이러한 제약 조건을 사용할 수 있습니다.

GET_DDL의 제약 조건

GET_DDL 에서 반환하는 SQL 문에는 제약 조건을 정의하는 절이 포함되지만, 다음 사항에 유의하십시오.

  • NOT NULLDEFAULT 와 같은 단일 열 제약 조건은 열 정의와 함께 인라인으로 재구성됩니다.

  • 고유/기본/외래 키와 같은 테이블 제약 조건은 단일 열로 구성되어 있더라도 항상 아웃오브 라인 제약 조건으로 재구성됩니다.

  • 명명되지 않은 제약 조건(즉, 시스템에서 생성된 이름이 있는 제약 조건)의 경우 GET_DDL 은 시스템에서 생성된 이름을 반환하지 않습니다.