SQLShack (Português)

0 Comments

No artigo anterior Comumente usado SQL Server Restrições: NÃO é NULO, ÚNICA e CHAVE PRIMÁRIA, nós descrito, em detalhe, os três primeiros tipos do SQL Server restrições; NÃO NULO, ÚNICA e CHAVE PRIMÁRIA. Neste artigo, discutiremos as outras três restrições: chave estrangeira, verificação e DEFAULT, descrevendo cada uma brevemente e fornecendo exemplos práticos.,

restrição de chave estrangeira

Uma chave estrangeira é uma chave de base de dados que é usada para ligar duas tabelas juntas. A restrição de chave estrangeira identifica as relações entre as tabelas de banco de dados por referência a uma coluna, ou conjunto de colunas, na tabela-filhos que contém a chave estrangeira, para a coluna da chave primária ou conjunto de colunas, na tabela-mãe.

a relação entre a criança e as tabelas-mãe é mantida verificando a existência da tabela-filhos valores-chave estrangeiros na chave-mãe da tabela-mãe referenciada antes de inserir estes valores na tabela-filhos., Desta forma, a restrição de chave estrangeira, na tabela-filhos que referencia a chave primária na tabela-mãe, irá impor a integridade referencial do banco de dados. A integridade referencial garante que a relação entre as tabelas de banco de dados é preservada durante o processo de inserção de dados. Recordar que a restrição principal da chave garante que não serão inseridos nessa tabela valores nulos ou duplicados para a coluna ou colunas selecionadas, reforçando a integridade da entidade para essa tabela., A integridade da entidade imposta pela chave primária e a integridade referencial imposta pela chave estrangeira juntos formam a integridade chave.

a restrição de chave estrangeira difere da restrição de chave primária na medida em que, você pode criar apenas uma chave primária por cada tabela, com a capacidade de criar várias restrições de chave estrangeiras em cada tabela, Referenciando a tabela-mãe múltipla. Outra diferença é que a chave estrangeira permite inserir valores nulos se não houver nenhuma restrição nula definida nesta chave, mas a chave primária não aceita NULLs.,

A restrição de chave estrangeira oferece-lhe também a capacidade de controlar as medidas que serão tomadas quando o valor referenciado na tabela-mãe for actualizado ou eliminado, usando as cláusulas de actualização ON e de eliminação. As acções suportadas que podem ser tomadas ao apagar ou actualizar os valores da tabela-mãe incluem:

  • nenhuma acção: quando as cláusulas ‘ON UPDATE’ ou ‘DELETE’ forem definidas como sem acção, a operação de actualização ou remoção realizada na tabela-mãe irá falhar com um erro.,
  • CASCADE: se a opção ON UPDATE ou ON DELETE clauses for CASCADE, a mesma acção realizada nos valores referenciados da tabela-mãe será reflectida nos valores relacionados na tabela-filhos. Por exemplo, se o valor referenciado for deletado na tabela pai, todas as linhas relacionadas na tabela filho também são deletadas.
  • SET NULL: com isto na opção UPDATE e DELETE clauses, se os valores referenciados na tabela-mãe forem apagados ou modificados, todos os valores relacionados na tabela-filhos são configurados como valor nulo.,
  • define o valor por omissão: usando a opção por omissão definida das cláusulas “ON UPDATE” e “DELETE clauses” especifica que, se os valores referenciados na tabela-mãe forem actualizados ou apagados, os valores relacionados na tabela-filhos com colunas de chave estrangeiras serão ajustados ao seu valor por omissão.

você pode adicionar a restrição de chave estrangeira enquanto define a coluna usando a instrução CREATE TABLE T-SQL, ou adicioná-la após a criação da tabela usando a instrução ALTER TABLE T-SQL. Vamos criar duas novas tabelas para entender a funcionalidade de restrição de chave estrangeira., A primeira tabela atuará como a tabela-mãe com a coluna ID definida como uma coluna de chave primária. A segunda tabela atuará como a tabela filhos, com a coluna ID definida como a coluna chave estrangeira que referencia a coluna ID na tabela-mãe.,> ID INT PRIMARY KEY,

Nome VARCHAR(50) NULL
)
IR
CRIAR TABELA ConstraintDemoChild
(
CID INT CHAVE PRIMÁRIA,
ID INT REFERÊNCIAS de CHAVE ESTRANGEIRA ConstraintDemoParent(ID)
)

Depois de criar duas tabelas, vamos inserir três registros para a tabela pai e dois registros para a tabela filho, usando as seguintes instruções INSERT:

O resultado irá mostrar-lhe que os três registros são inseridas com êxito a tabela pai., O primeiro registro que tentamos inserir na tabela-filhos é inserido sem qualquer erro, já que o valor ID 1 já existe na tabela-mãe.,porque o valor de ID de 4 não existe na tabela pai, e devido à restrição de CHAVE ESTRANGEIRA, você não será capaz de inserir um valor de IDENTIFICAÇÃO para a criança tabela que não existe na tabela pai:

Verificando as tabelas pai e filho de conteúdo, você vai ver que apenas um registro é inserido na tabela filho, como você pode ver abaixo:

Como nós não mencionar a restrição de CHAVE EXTERNA nome ao criar a criança tabela, o SQL Server irá atribuir-lhe um nome exclusivo que podemos obter a partir do INFORMATION_SCHEMA.,TABLE_CONSTRAINTS system view using the following query:

1
2
3
4
5
6
7
8

SELECT CONSTRAINT_NAME,
TABLE_SCHEMA ,
TABLE_NAME,
CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.,onstraintDemoChild
ADICIONAR RESTRIÇÃO FK__ConstraintDe__ID
FOREIGN KEY (ID) REFERÊNCIAS ConstraintDemoParent(ID);

A operação irá falhar, como o valor de ID de 4 não existe na tabela pai e rompe a integridade referencial entre a criança e os pais tabelas, como pode ser visto na seguinte mensagem de erro:

Para ser capaz de criar a restrição de CHAVE EXTERNA na tabela filho, temos que eliminar o conflito primeiro por excluir ou atualizar esse registro., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., DEFINIR ID =2 ONDE ID = 4

Agora, a restrição de CHAVE ESTRANGEIRA será criado com êxito, sem qualquer erro, como mostrado abaixo:

UMA restrição de CHAVE ESTRANGEIRA pode ser definido com a ajuda do SQL Server Management Studio ferramenta. Clique com o botão direito na tabela necessária e selecione a opção de projeto.,> A partir da janela exibida, você pode facilmente especificar o nome da restrição de CHAVE ESTRANGEIRA, tabelas e colunas que irão participar nessa relação, clicando nas Tabelas E Colunas Especificação, se verificar os dados existentes é necessário, e, finalmente, a ação executada quando o referido registro é excluído ou modificado o pai da tabela, como mostrado abaixo:

Restrição de VERIFICAÇÃO

UMA restrição de VERIFICAÇÃO é definido em uma coluna ou conjunto de colunas para limitar o intervalo de valores que podem ser inseridos em uma dessas colunas, usando uma determinada condição., A restrição de verificação entra em ação para avaliar os valores inseridos ou modificados, onde o valor que satisfaz a condição será inserido na tabela, caso contrário, a operação de inserção será descartada. É permitido especificar várias restrições de verificação para a mesma coluna.

definir a condição de restrição de verificação é de alguma forma semelhante a escrever a cláusula onde de uma consulta, usando os diferentes operadores de comparação, como e, ou, entre, como e é nulo para escrever sua expressão booleana que irá retornar verdadeiro, falso ou desconhecido., A restrição de verificação irá devolver o valor desconhecido quando um valor nulo estiver presente na condição. A restrição de verificação é usada principalmente para impor a integridade do domínio, limitando os valores inseridos para aqueles que seguem os valores definidos, range ou regras de formato.

vamos criar uma nova tabela simples que tem três colunas; a coluna ID que é considerada como a chave primária dessa tabela, nome e salário. Uma restrição de verificação é definida na coluna de salário para se certificar de que nenhum valor zero ou negativo são inseridos nessa coluna.,v>6

7
8
9
CRIAR TABELA ConstraintDemo4
(
ID INT PRIMARY KEY,
Nome VARCHAR(50) NULL,
Salário INT SELEÇÃO (Salário>0)
)
IR

Se você executar o abaixo três instruções INSERT:

é claro a partir do resultado gerado que o primeiro registro é inserido com nenhum erro, desde o valor do Salário atende a verificação da condição.,rovided Salário valores não atendem a restrição de VERIFICAÇÃO de condição, devido à inserção de zero e negativo Salário valores, como você pode ver na seguinte mensagem de erro:

Verificar os dados da tabela mostra que apenas a primeira linha que passou a restrição de VERIFICAÇÃO de condição será inserido a tabela abaixo:

Nós mencionados anteriormente neste artigo que a restrição de VERIFICAÇÃO permite a inserção de valores NULOS se a participou colunas NULL, e valores NULOS serão avaliados como DESCONHECIDO sem lançar qualquer erro., Isso é claro a partir do abaixo registro inserido com sucesso, embora o valor fornecido do Salário coluna é NULL:

Se você rever a restrição de VERIFICAÇÃO da definição anterior, na instrução CREATE TABLE, você vai ver que não mencionei o nome do definido restrição. Neste caso, o servidor SQL irá atribuir um nome único para essa restrição que pode ser mostrado questionando o INFORMATION_SCHEMA.TABLE_CONSTRAINTS system view para a tabela ConstraintDemo4., O resultado será como mostrado abaixo:

a restrição de verificação pode ser largada usando a instrução ALTER TABLE T-SQL.,onstraint now, with the following ALTER DATABASE … ADD CONSTRAINT T-SQL statement:

1
2
3
4
5

ALTER TABLE ConstraintDemo4
ADD CONSTRAINT CK__Constrain__Salar
CHECK (Salary>0);

Adding the CHECK constraint will fail., Isto é devido ao fato de que, enquanto o SQL Server está a verificar os dados já existentes para a VERIFICAÇÃO de condição de restrição, um ou mais valores que não satisfaçam a condição de restrição são encontrados, como você pode ver na seguinte mensagem de erro:

Para ser capaz de definir a restrição de VERIFICAÇÃO novamente, devemos modificar ou eliminar os dados que impede a restrição que está sendo criado.,de484761″>

1
2
3
ATUALIZAÇÃO ConstraintDemo4 CONJUNTO Salário =300 WHERE ID IN (2,3)

Agora, a restrição de VERIFICAÇÃO pode ser definido com nenhum problema, como mostrado abaixo:

o SQL Server permite-lhe desactivar a restrição de VERIFICAÇÃO para casos especiais, como inserir enorme quantidade de dados sem se preocupar com a reunião da condição de restrição para fins de teste, ou devido à mudança na lógica de negócios., Este caso é válido apenas para a verificação e restrições de chave estrangeiras que você pode desativar temporariamente.,escrevendo o nome da restrição, como no comando T-SQL abaixo:

1
2
3

ALTER TABLE ConstraintDemo4 NOCHECK RESTRIÇÃO de TODOS os

a Partir de uma restrição de VERIFICAÇÃO de definição, você pode especificar que a restrição será criado sem a verificação de linhas existentes, mas a restrição será marcado como não confiáveis., pode activar todas as restrições de VERIFICAÇÃO, todos de uma vez,usando o comando T-SQL abaixo:

1
2
3

ALTER TABLE ConstraintDemo4 RESTRIÇÃO de VERIFICAÇÃO de TODOS os

Enquanto permitindo que o anterior restrição de VERIFICAÇÃO, você vai ver que o SQL Server não vai reclamar sobre o não verificado dados, que rompe com a condição de restrição., Neste caso, a integridade do domínio dos dados não é mantida.

para corrigir este problema, o comando DBCC CHECKCONSTRAINTS pode ser facilmente usado para identificar os dados que violam a condição de restrição em uma tabela ou restrição especificada, tendo em consideração não executar esse comando nas horas de pico, pois isso afetará o desempenho do servidor SQL devido a não utilizar um instantâneo de banco de dados.,v id=”ff419aa09d”>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

O resultado irá mostrar-lhe a dois Salários valores que quebrar a restrição de VERIFICAÇÃO de condição, como mostrado abaixo:

UMA restrição de VERIFICAÇÃO também pode ser criado com a ajuda do SQL Server Management Studio ferramenta, clicando com o botão direito na tabela e selecionando a opção de Design., Na janela de Desenho, clique com o botão direito do mouse e escolha Restrições de Verificação de opção da seguinte forma:

a Partir da Verificação de Restrições de janela, você pode especificar a restrição de VERIFICAÇÃO de nome, de expressão e de se verificar os dados existentes é necessário, como mostrado abaixo:

PADRÃO de Restrição

UM PADRÃO de restrição é utilizada para fornecer um valor de coluna predefinido para as linhas inseridas se nenhum valor for especificado para a coluna na instrução INSERT., A restrição padrão ajuda a manter a integridade do domínio, fornecendo valores adequados para a coluna, no caso de o Usuário não fornecer um valor para ele. O valor padrão pode ser um valor constante, um valor de função do sistema ou nulo.,elow:

1
2
3
4

ALTER TABLE ConstraintDemo5
Adicionar Restrição DF__Restringir__Emplo PADRÃO (GETDATE()) PARA EmployeeDate

além disso, o PADRÃO de restrição pode ser definida usando o SQL Server Management Studio, clicando com o botão direito na tabela e escolher a opção de Design., Em seguida, seleccione a coluna para a qual irá atribuir um valor por omissão, navegando pela janela de Propriedades da coluna, como se mostra abaixo:

i esperava que este artigo, e o anterior, tivessem ajudado a explicar os seis tipos de restrições do servidor SQL. Por favor, sinta-se livre para fazer quaisquer perguntas nos comentários abaixo.,unigénito do SQL Server usados Restrições: NÃO é NULO, UNIQUE e PRIMARY KEY

links

  • Criar Restrições de Verificação
  • Limitações
  • Predefinições
  • Criar Relações de Chave Estrangeira
  • Restrições de VERIFICAÇÃO

  • Autor
  • Posts Recentes
Ahmad Yaseen é um Microsoft Big Data engenheiro com profundo conhecimento e experiência em SQL BI, Banco de dados SQL Server de Administração e Desenvolvimento de campos., he is a Microsoft Certified Solution Expert in Data Management and Analytics, Microsoft Certified Solution Associate in SQL Database Administration and Development, Azure Developer Associate and Microsoft Certified Trainer.
Também, ele está contribuindo com suas dicas de SQL em muitos blogs.,
Ver todos os posts por Ahmad Yaseen

posts mais Recentes por Ahmad Yaseen (ver todas)
  • Como monitor Azure Dados de Fábrica – em 15 de janeiro de 2021
  • Usando o Controle de Origem no Azure Dados de Fábrica de 12 de janeiro, 2021
  • Usando Modelos no Azure Dados de Fábrica, 8 de janeiro de 2021


Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *