Visão geral das restrições

O Snowflake oferece a seguinte funcionalidade de restrição:

  • Chaves únicas, primárias e estrangeiras, e colunas NOT NULL.

  • Restrições nomeadas.

  • Restrições de coluna única e de várias colunas.

  • Criação de restrições em linha e fora de linha.

  • Criação, modificação e exclusão de restrições.

Neste tópico:

Tipos de restrições com suporte

O Snowflake oferece suporte aos seguintes tipos de restrição da norma ANSI SQL:

  • PRIMARY KEY

  • FOREIGN KEY

  • UNIQUE

  • NOT NULL

Uma tabela pode ter várias chaves únicas e chaves estrangeiras, mas apenas uma chave primária. Uma restrição PRIMARY KEY implica que a coluna é NOT NULL e UNIQUE.

Todas as chaves estrangeiras devem fazer referência a uma chave primária ou única que corresponda aos tipos de coluna de cada coluna na chave estrangeira. A chave primária para uma chave estrangeira pode estar em uma tabela diferente ou na mesma tabela que a chave estrangeira. Ao definir restrições de chave estrangeira em tabelas híbridas, as tabelas devem estar no mesmo banco de dados.

A tabela a seguir resume as diferenças de comportamento entre tabelas padrão e tabelas híbridas, com relação à aplicação de restrições e se as restrições são necessárias.

  • Uma restrição é imposta quando protege uma coluna de ser atualizada de determinadas maneiras. Por exemplo, uma coluna declarada NOT NULL não pode conter um valor NULL. Uma tentativa de copiar ou inserir um valor NULL em uma coluna NOT NULL sempre resulta em um erro. Para tabelas híbridas, não é possível definir a propriedade NOT ENFORCED nas restrições PRIMARY KEY, FOREIGN KEY e UNIQUE. Definir esta propriedade resulta em um erro de “propriedade de restrição inválida”.

  • Uma restrição é obrigatória quando uma ou mais colunas em uma tabela devem ter tal restrição, o que é verdadeiro apenas para restrições PRIMARY KEY em tabelas híbridas.

Recurso

Tabelas híbridas

Tabelas padrão

Restrições PRIMARY KEY

Obrigatório, imposto

Opcional, não obrigatório

Restrições FOREIGN KEY

Opcionais e impostas (integridade referencial)

Opcional, não obrigatório

Restrições UNIQUE

Opcionais e impostas

Opcional, não obrigatório

Restrições NOT NULL

Opcionais e impostas

Opcionais e impostas

Consulte também CREATE | ALTER TABLE … CONSTRAINT.

Restrições de tabela

O Snowflake oferece suporte a restrições em tabelas permanentes, transitórias, temporárias e híbridas. É possível definir restrições em colunas de todos os tipos de dados e pode incluir qualquer número de colunas em uma única restrição.

  • Quando você copiar uma tabela usando CREATE TABLE … LIKE ou CREATE TABLE … CLONE, todas as restrições existentes na tabela, incluindo chaves estrangeiras, são copiadas para a nova tabela. (CREATETABLE … CLONE não é compatível com tabelas híbridas.)

  • Comandos e funções adicionais, como DROP / UNDROP e GET_DDL são aceitos para tabelas com restrições. Eles também são aceitos para esquemas e bancos de dados.

    Para o Snowflake Time Travel, quando versões anteriores de uma tabela são copiadas, a versão atual das restrições na tabela é usada porque o Snowflake não armazena versões anteriores de restrições nos metadados da tabela.

Restrições de coluna única e de várias colunas

As restrições podem ser definidas em uma única coluna ou em várias colunas da mesma tabela.

Para restrições de múltiplas colunas (chaves primárias compostas ou chaves exclusivas), as colunas são ordenadas e cada coluna tem uma sequência de chave correspondente.

Restrições em linha e fora de linha

As restrições são definidas como em linha ou fora de linha durante a criação ou modificação da tabela:

  • As restrições em linha são criadas como parte da definição da coluna e só podem ser usadas para restrições de coluna única.

  • Restrições fora de linha são definidas usando uma cláusula separada que especifica a coluna ou colunas nas quais a restrição é criada. Elas podem ser usadas para criar restrições de coluna única ou de várias colunas, bem como para criar restrições em colunas existentes.

Restrições em GET_DDL

As instruções SQL que GET_DDL retorna incluem as cláusulas que definem as restrições; no entanto, observe o seguinte:

  • Restrições de coluna única, como NOT NULL e DEFAULT, são reconstruídas em linha com a definição da coluna.

  • As restrições de tabela, como chaves únicas/primárias/estrangeiras, são sempre reconstruídas como restrições fora de linha, mesmo que consistam em uma única coluna.

  • Para restrições sem nome (ou seja, restrições com um nome gerado pelo sistema), GET_DDL não retorna o nome gerado pelo sistema.