Como usar restrições em bancos de dados SQL em Várias

UMA limitação

é uma regra de aplicativo que o DBMS impõe em SQL. Depois de definir um banco de dados, você pode incluir restrições (tais como NÃO NULO) Em uma definição de tabela. O SGBD garante que você nunca pode cometer qualquer transação que viola uma restrição.

Você tem três tipos de restrições:

  • UMA restrição de coluna impõe uma condição em uma coluna numa tabela.

  • UMA restrição de tabela coloca uma restrição especificada em uma tabela inteira.

  • A afirmação é uma restrição que pode afetar mais de uma tabela.

As restrições de coluna

Um exemplo de uma restrição de coluna é mostrado na seguinte Data Definition Language (DDL) declaração:

CRIAR CLIENTE TABLE (NomeCliente CHAR (30) NOT NULL, Address1 CHAR (30), Endereço2 CHAR (30), CityCHAR (25), StateCHAR (2), PostalCode CHAR (10), PhoneCHAR (13), FaxCHAR (13), Contactperson CHAR (30)) -

A declaração se aplica a restrição NÃO NULO ao Nome do cliente coluna, especificando que Nome do cliente não pode assumir um valor nulo. UNIQUE é outra restrição que você pode aplicar a uma coluna. Esta restrição especifica que cada valor na coluna deve ser exclusivo. o VERIFICA restrição é particularmente útil porque pode tomar qualquer expressão válida como argumento. Considere o seguinte exemplo:

Criar testes mesa (TestName CHAR (30) NOT NULL, StandardCharge NUMERIC (6,2) CHECK (StandardCharge> = 0.0AND StandardCharge lt; = 200,0)) -

carga padrão de VetLab para um teste deve ser sempre maior do que ou igual a zero. E nenhum dos testes padrão custa mais de US $ 200. o VERIFICA cláusula se recusa a aceitar todas as entradas que estão fora do intervalo 0 lt; = StandardCharge lt; = 200. Outra forma de dizer a mesma restrição é a seguinte:

CHECK (StandardCharge entre 0,0 e 200,0)

As restrições de tabela

o CHAVE PRIMÁRIA restrição especifica que a coluna a que se aplica é uma chave primária. Esta limitação aplica-se a toda a mesa e é equivalente a uma combinação do NÃO NULO e UNIQUE restrições de coluna. Você pode especificar essa restrição em um CRIO instrução, como mostrado no exemplo a seguir:

CREATE TABLE CLIENTE (NomeCliente CHAR (30) CHAVE PRIMÁRIA, Address1 CHAR (30), Endereço2 CHAR (30), CityCHAR (25), Estado CHAR (2), PostalCode CHAR (10), Telefone CHAR (13), FaxCHAR (13 ), Contactperson CHAR (30)) -

restrições nomeados podem ter alguma funcionalidade adicional. Suponha, por exemplo, que você quer fazer um carregamento em massa de vários milhares de potenciais clientes em sua tabela perspectiva. Você tem um arquivo que contém principalmente perspectivas nos Estados Unidos, mas com algumas perspectivas canadenses polvilhadas durante todo o arquivo.

Normalmente, você quer restringir sua mesa perspectiva para incluir apenas as perspectivas norte-americanas, mas você não quer que esta carga a granel para ser interrompido cada vez que atinge um dos registros canadenses. (Códigos postais canadenses incluem letras e números, mas os códigos postais dos EUA conter apenas números.) Você pode optar por não impor uma restrição sobre Código postal até que a carga a granel é completo, e então você pode restaurar a aplicação da restrição mais tarde.

Inicialmente, sua mesa PROSPECT foi criado com o seguinte CREATE TABLE declaração:

CREATE TABLE PROSPECT (NomeCliente CHAR (30) CHAVE PRIMÁRIA, Address1 CHAR (30), Endereço2 CHAR (30), CityCHAR (25), CHAR Estado (2), PostalCode CHAR (10), Telefone CHAR (13), FaxCHAR (13 ), Contactperson CHAR (30), restrição de verificação postal (PostalCode entre 0 e 99999)) -

Antes do carregamento em massa, você pode desligar a aplicação da Fecho eclair limitação:

ALTER TABLE PROSPECTCONSTRAINT NÃO Zip ENFORCED-

Após a carga a granel é completa, você pode restaurar a aplicação da restrição:

ALTER TABLE PROSPECTCONSTRAINT ENFORCED- Zip

Neste ponto, você pode eliminar todas as linhas que não satisfazem a restrição com:

DELETE FROM PROSPECTWHERE PostalCode NÃO entre 0 e 99999 -

afirmações

A afirmação especifica uma restrição para mais do que uma tabela. O exemplo a seguir usa uma condição de pesquisa elaborado a partir de duas tabelas para criar uma afirmação:

Criar ordens de mesa (OrderNumber inteiro não nulo, NomeCliente CHAR (30), TestOrdered CHAR (30), Vendedor de CHAR (30), OrderDate data) RESULTADOS A Tabela -Criar (ResultNumber inteiro não nulo, OrderNumber Integer, ResultCHAR (50), DATA DateOrdered , PrelimFinal CHAR (1)) -Criar ASSERTIONCHECK (NÃO EXISTE (SELECT * FROM pedidos, RESULTSWHERE ORDERS.OrderNumber = RESULTS.OrderNumberAND Orders.OrderDate> RESULTS.DateReported)) -

Esta afirmação garante que os resultados dos testes não são relatados antes do teste é ordenado.

menu