Definição de chaves para tabelas e restrições

Chave primária: Primary key

É uma coluna ou um conjunto de colunas que identificam univocamente a cada fila. Deve ser única, não nula e obrigatória. Como máximo, podemos definir uma chave primária por tabela.
Esta chave pode ser referenciada por uma coluna ou colunas. Quando se cria uma chave primária, automaticamente se cria um índice que facilita o acesso à tabela.

Formato de restrição de coluna:

CREATE TABLE NOME_TABELA
(COL1 TIPO_DADO [CONSTRAINT NOME_RESTRICAO] PRIMARY KEY
COL2 TIPO_DADO

)[TABLESPACE ESPACO_DE_TABELA];

Formato de restrição de tabela:

CREATE TABLE NOME_TABELA
(COL1 TIPO_DADO,
COL2 TIPO_DADO,

[CONSTRAINT NOMERESTRICAO] PRIMARY KEY (COLUNA [,COLUNA]),

)[TABLESPACE ESPACO_DE_TABELA];

Chaves alheias: Foreign Key:

Está formada por uma ou várias colunas que estão associadas a uma chave primária de outra ou da mesma tabela. Pode-se definir tantas chaves alheias quantas se necessite, e podem estar ou não na mesma tabela que a chave primária. O valor da coluna ou colunas que são chaves alheias deve ser: NULL ou igual a um valor da chave referenciada (regra de integridade referencial).

Formato de restrição de coluna:

CREATE TABLE NOME_TABELA
(COLUNA1 TIPO_DADO
[CONSTRAINT NOMERESTRICAO]
REFERENCES NOMETABELA [(COLUNA)] [ON DELETE CASCADE]

)[TABLESPACE ESPACO_DE_TABELA];

Formato de restrição de tabela:

CREATE TABLE NOME_TABELA
(COLUNA1 TIPO_DADO,
COLUNA2 TIPO_DADO,

[CONTRAINT NOMERESTRICAO]
FOREIGN KEY (COLUNA [,COLUNA])
REFERENCES NOMETABELA [(COLUNA [,
COLUNA])]
[ON DELETE CASCADE],
)[TABLESPACE ESPACO_DE_TABELA];

Notas:

  • Na cláusula REFERENCES indicamos a tabela a qual remite a chave alheia.
  • Há que criar primeiro uma tabela e depois aquela que lhe faz referência.
  • Há que apagar primeiro a tabela que faz referência a outra tabela e depois a tabela que não faz referência.
  • Eliminado em cascata (ON DELETE CASCADE): Se eliminarmos uma fila de uma tabela mãe, todas as filas da tabela detalhe cuja chave alheia seja referenciada se eliminarão automaticamente. A restrição se declara na tabela detalhe. A mensagem “n filas eliminadas” só indica as filas eliminadas da tabela mãe.

NOT NULL: Significa que a coluna não pode ter valores nulos.
DEFAULT: Proporcionamos a uma coluna um valor padrão quando o valor da coluna não se especifica na cláusula INSERT. Na especificação DEFAULT é possível incluir várias expressões: constantes, funções SQL e variáveis UID e SYSDATE.
Verificação de restrições: CHECK: Atua como uma cláusula where. Pode fazer referência a uma ou mais colunas, porém não a valores de outras filas. Em uma cláusula CHECK não se podem incluir sub-consultas nem as pseudo-consultas SYSDATE, UID e USER.

Nota: A restrição NOT NULL é similar a CHECK (NOME_COLUNA IS NOT NULL)

UNIQUE: Evita valores repetidos na mesma coluna. Pode conter uma ou várias colunas. É similar à restrição PRIMARY KEY, salvo que são possíveis várias colunas UNIQUE definidas em uma tabela. Admite valores NULL. Assim como em PRIMARY KEY, quando se define uma restrição UNIQUE se cria um índice automaticamente.

Vistas do dicionário de dados para as restrições:

Contém informação geral as seguintes:

USER_CONSTRAINTS: Definições de restrições de tabelas propriedade do usuário.
ALL_CONSTRAINTS: Definições de restrições sobre tabelas as quais pode acessar o usuário.
DBA_CONSTRAINTS: Todas as definições de restrições sobre todas as tabelas.

Criação de uma tabela com dados recuperados em uma consulta:

CREATE TABLE: permite criar uma tabela a partir da consulta de outra tabela já existente. A nova tabela conterá os dados obtidos na consulta. Realiza-se esta ação com a cláusula AS colocada ao final da ordem CREATE TABLE.

CREATE TABLE NOMETABELA
(COLUNA [,COLUNA]
)[TABLESPACE ESPACO_DE_TABELA]
AS CONSULTA;

Não é necessário especificar tipos nem tamanho das consultas, já que vêm determinadas pelos tipos e os tamanhos das recuperadas na consulta.
A consulta pode ter uma sub-consulta, uma combinação de tabelas ou qualquer sentença select válida.
As restrições COM NOME não se criam em uma tabela desde a outra, só se criam aquelas restrições que carecem de nome.

Fonte: http://www.criarweb.com/artigos/815.php

Deixe um comentário