Articles

Definir restrições dentro da tabela CREATE em Oracle 12c

você pode usar a declaração de tabela CREATE para impor vários tipos diferentes de restrições em uma tabela: chaves candidatas, chaves primárias, chaves estrangeiras e condições de verificação. Uma cláusula de restrição pode restringir uma única coluna ou grupo de colunas em uma tabela. O ponto destas restrições é obter Oracle para fazer a maioria do trabalho em manter a integridade de seu banco de dados. Quanto mais restrições você adicionar a uma definição de tabela, menos trabalho você tem que fazer em aplicações para manter os dados. Por outro lado, quanto mais restrições houver em uma tabela, mais tempo leva para atualizar os dados.

pode indicar restrições de uma de duas formas: como parte da definição da coluna (conhecida como uma restrição de coluna) ou no final da instrução CREATE TABLE (conhecida como uma restrição de tabela). As cláusulas que restringem várias colunas devem ser restrições de tabela.

a chave candidata

uma chave candidata é uma combinação de uma ou mais colunas, cujos valores identificam unicamente cada linha de uma tabela. A seguinte listagem mostra a criação de uma restrição única para a tabela de problemas:

A chave para esta tabela é a combinação de CIDADE e SAMPLE_DATE. Note que ambas as colunas também são declaradas não nulas. Esta funcionalidade obriga-o a indicar os valores para certas colunas, para que as linhas sejam inseridas. Claramente, a informação sobre temperatura e precipitação não é útil sem saber onde ou quando foi recolhida. Esta técnica é comum para colunas que são a chave primária da tabela, mas também é útil se certas colunas são críticas para que a linha de dados seja significativa. Se não for NULL não é especificado, a coluna pode ter valores nulos.

Quando você cria uma restrição única, Oracle cria um índice único para impor a unicidade dos valores. Dentro de uma restrição de chave primária, pelo menos uma das colunas da chave primária para cada linha não deve ser nula.

a chave primária

a chave primária de uma tabela é uma das chaves candidatas que você dá algumas características especiais. Você pode ter apenas uma chave primária, e uma coluna chave primária não pode conter NULLs.

A seguinte instrução CREATE TABLE tem o mesmo efeito que o anterior, exceto que você pode ter várias restrições UNIQUE, mas apenas uma restrição de CHAVE PRIMÁRIA:

Para uma única coluna primárias ou chaves de candidatos, você pode definir a chave na coluna com uma restrição de coluna em vez de uma restrição de tabela:

neste caso, o AUTHOR_NAME coluna é a chave primária, e o Oracle irá gerar um nome para a restrição de CHAVE PRIMÁRIA. Isto não é recomendado se você quiser impor um padrão de Nomenclatura Comum para chaves, como discutido mais tarde em “Regras de nomenclatura.”

Designing Index Tablespaces

unique and PRIMARY KEY constraints create indexes. A menos que você diga à Oracle de forma diferente, esses índices são colocados em seu tablespace padrão. Para especificar uma tabela diferente, use a cláusula de indexação do comando CREATE TABLE, como mostrado na seguinte listagem:

o índice associado à restrição de chave primária AUTHOR_PK será colocado na tabela de utilizadores.

nota

na maioria das instalações predefinidas, o tabuleiro dos utilizadores é criado e é o quadro predefinido.

a chave estrangeira

uma chave estrangeira é uma combinação de colunas com valores baseados nos valores primários de outra tabela. Uma restrição de chave estrangeira, também conhecida como uma restrição de integridade referencial, especifica que os valores da chave estrangeira correspondem aos valores reais da chave primária na outra tabela. Na tabela da montra de livros, por exemplo, a coluna CATEGORY_NAME refere-se a valores para a coluna CATEGORY_NAME na tabela de categorias:

pode referir-se a uma chave primária ou Única, mesmo na mesma tabela. No entanto, você não pode se referir a uma tabela em um banco de dados remoto na cláusula de referências. Você pode usar o formulário de tabela (que é usado anteriormente para criar uma chave primária na tabela problemas) em vez do formulário de coluna para especificar chaves estrangeiras com múltiplas colunas.

por vezes, poderá querer apagar estas linhas dependentes quando apagar a linha de que dependem. No caso da montra de livros e da categoria, se remover um nome de categoria da categoria, poderá querer fazer com que os valores correspondentes da coluna da montra de livros sejam nulos. Em outro caso, você pode querer apagar toda a linha. A cláusula de apagar CASCADE adicionada à cláusula de referências diz à Oracle para apagar a linha dependente quando apagar a linha correspondente na tabela-mãe. Esta ação mantém automaticamente a integridade referencial.

a restrição de verificação

muitas colunas devem ter valores que estão dentro de um determinado intervalo ou que satisfazem certas condições. Com uma restrição de verificação, você pode especificar uma expressão que deve ser sempre verdadeira para cada linha na tabela. Por exemplo, a tabela de CLASSIFICAÇÃO de lojas válido classificações; limitar os valores disponíveis, além dos limites imposta pela definição de coluna, você pode usar uma restrição de VERIFICAÇÃO, conforme mostrado na lista a seguir:

Uma coluna de nível de restrição de VERIFICAÇÃO não pode se referir a valores em outras linhas; ela não pode usar o pseudo-colunas, tal como o SYSDATE, USUÁRIO, CURRVAL, NEXTVAL, NÍVEL, e ROWNUM. Você pode usar o formulário de restrição da tabela (em oposição ao formulário de restrição da coluna) para se referir a várias colunas em uma restrição de verificação.

restrições de nomeação

pode indicar as suas restrições. Se você usar um esquema de nomenclatura eficaz para seus nomes de restrições, você será mais capaz de identificar e gerenciar as restrições. O nome de uma restrição deve identificar a tabela onde atua e o tipo de restrição que representa. Por exemplo, a chave primária na tabela de problemas pode ser chamada de TROUBLE_PK.

pode indicar um nome para uma restrição quando criar a restrição. Se você não especificar um nome para a restrição, Oracle gera um nome. A maioria dos nomes de restrições gerados pela Oracle são da forma SYS_C###### (por exemplo, SYS_C000145). Como o nome da restrição gerada pelo sistema não lhe diz nada sobre a tabela ou a restrição, você deve nomear suas restrições.

no exemplo seguinte, a restrição de chave primária é criada e nomeada, como parte do comando Criar tabela para a tabela de problemas (observe a cláusula de restrição):

a cláusula de restrição do comando CREATE TABLE nomeia a restrição (neste caso, TROUBLE_PK). Poderá usar este nome de restrição mais tarde ao activar ou desactivar as restrições.