Quais são as restrições do banco de dados? [fechadas]

92

Qual é uma definição clara de restrição de banco de dados? Por que as restrições são importantes para um banco de dados? Quais são os tipos de restrições?

bala3569
fonte
12
Esta pergunta tem uma resposta clara. Não é "muito amplo". Seu grande número de votos positivos e favoritos revelam como ele foi útil para muitas pessoas. Eu limpei o texto e o indiquei para reabertura.
La-comadreja
@BasilBourque esta pergunta é muito inadequada para programadores - ela seria rejeitada rapidamente e encerrada lá, consulte meta.programmers.stackexchange.com/questions/6483/… Leitura recomendada: O que se passa em Programmers.SE? Um guia para Stack Overflow
mosquito
1
@gnat Embora essa página me deixe ainda confuso sobre o que está ou não no tópico para Programmers Stack Exchange, posso entender e concordar com um limite mínimo de o autor da postagem ter primeiro lido um artigo diretamente relevante da Wikipedia que fornece o mesmo tipo de visão geral condensada ou resumida solicitada no Stack Exchange.
Basil Bourque
2
O título é muito amplo e as sub-questões são fazer várias perguntas ao mesmo tempo -_- Como TomTom, P ரதீப், greg-449, bummi e Nit querem isso? Por favor explique. Existe alguma maneira de você perguntar sobre as restrições ...?
Lealo de
Embora eu entenda os sentimentos de que as perguntas sejam muito diretas e baseadas em opiniões, não concordo com a exigência da primeira leitura do artigo da wikipedia. Ele NÃO fornece o "mesmo tipo de visão geral condensada ou resumida". A resposta aceita fornece uma resposta muito mais condensada e precisa do que o link da wikipedia acima.
Chris

Respostas:

117

As restrições fazem parte da definição do esquema do banco de dados.

Uma restrição geralmente está associada a uma tabela e é criada com uma instrução CREATE CONSTRAINTou CREATE ASSERTIONSQL.

Eles definem certas propriedades que os dados em um banco de dados devem cumprir. Eles podem se aplicar a uma coluna, uma tabela inteira, mais de uma tabela ou um esquema inteiro. Um sistema de banco de dados confiável garante que as restrições sejam mantidas em todos os momentos (exceto possivelmente dentro de uma transação, para as chamadas restrições adiadas).

Os tipos comuns de restrições são:

  • não nulo - cada valor em uma coluna não deve ser NULL
  • único - o (s) valor (es) na (s) coluna (s) especificada (s) deve (m) ser único para cada linha em uma tabela
  • chave primária - o (s) valor (es) na (s) coluna (s) especificada (s) deve (m) ser único (s) para cada linha em uma tabela e não ser NULL ; normalmente, cada tabela em um banco de dados deve ter uma chave primária - ela é usada para identificar registros individuais
  • chave estrangeira - o (s) valor (es) na (s) coluna (s) especificada (s) deve (m) referenciar um registro existente em outra tabela (por meio de sua chave primária ou alguma outra restrição única )
  • check - uma expressão é especificada, que deve ser avaliada como verdadeira para que a restrição seja satisfeita
Ziga Kranjec
fonte
3
+1 para incluir PK, não nulo, nulo
gbn
1, você ainda pode expandir em cenários de CHAVE ESTRANGEIRA e fornecer alguns links.
Irracional,
2
As restrições de verificação não devem ser avaliadas como falsas. Eles não precisam ser verdadeiros. Desconhecido também está bem.
Martin Smith
2
Uma restrição de tipo também não seria um tipo comum?
Martin
1
Embora normalmente não os chamemos de restrições, eu diria que o tipo de dados é uma forma de restrição. Se eu definir algo como Int ou datetime, isso restringe o tipo de dados que podem ser colocados no campo. A seleção adequada de tipos de dados é uma parte crítica para garantir a integridade dos dados.
HLGEM de
36

Para entender por que precisamos de restrições, você deve primeiro entender o valor da integridade dos dados.

Integridade de dados refere-se à validade dos dados. Seus dados são válidos? Os seus dados representam aquilo para que você os projetou?

Que perguntas estranhas eu faço você pode pensar, mas infelizmente, muitas vezes, os bancos de dados estão cheios de dados de lixo, referências inválidas a linhas em outras tabelas, que já se foram ... e valores que não significam nada para a lógica de negócios da sua solução por mais tempo.

Todo esse lixo não tende por si só a reduzir seu desempenho, mas também é uma bomba-relógio sob a lógica de seu aplicativo que eventualmente irá recuperar dados que não foi projetado para entender.

Restrições são regras que você cria em tempo de design que protegem seus dados de serem corrompidos. É essencial para a longa sobrevivência de seu coração filho de uma solução de banco de dados. Sem restrições, sua solução definitivamente se deteriorará com o tempo e o uso intenso.

Você deve reconhecer que projetar o design do seu banco de dados é apenas o nascimento da sua solução. Depois disso, ele deve viver (espero) muito tempo e suportar todos os tipos de comportamento (estranho) de seus usuários finais (ou seja, aplicativos cliente). Mas esta fase de design no desenvolvimento é crucial para o sucesso duradouro de sua solução! Respeite-o e preste-lhe o tempo e atenção de que necessita.

Um homem sábio disse uma vez: "Os dados devem se proteger!" . E é isso que as restrições fazem. São regras que mantêm os dados em seu banco de dados tão válidos quanto possível.

Existem muitas maneiras de fazer isso, mas basicamente elas se resumem a:

  • As restrições de chave estrangeira são provavelmente a restrição mais usada e garantem que as referências a outras tabelas só sejam permitidas se realmente existir uma linha de destino para fazer referência. Isso também torna impossível quebrar esse relacionamento, excluindo a linha referenciada, criando um link inativo.
  • As restrições de verificação podem garantir que apenas valores específicos sejam permitidos em determinada coluna. Você pode criar uma restrição permitindo apenas a palavra 'Amarelo' ou 'Azul' em uma coluna VARCHAR. Todos os outros valores gerariam um erro. Obtenha ideias para o uso de restrições de verificação, verifique a sys.check_constraintsexibição no banco de dados de exemplo AdventureWorks
  • As regras no SQL Server são apenas reutilizáveis ​​Verificar restrições (permite que você mantenha a sintaxe em um único lugar e torna mais fácil implantar suas restrições em outros bancos de dados)

Como sugeri aqui, são necessárias algumas considerações completas para construir a melhor e mais defensiva abordagem de restrição para o design de seu banco de dados. Primeiro, você precisa conhecer as possibilidades e limitações dos diferentes tipos de restrições acima. Outras leituras podem incluir:

Restrições FOREIGN KEY - Microsoft

Restrição de chave estrangeira - w3schools

CHECK Constraints

Boa sorte! ;)

Alex
fonte
Como um necro-comentário, parece que as regras estão sendo defecadas pela Microsoft.
Gary
6

As restrições nada mais são do que regras sobre os dados. Quais dados são válidos e quais são inválidos podem ser definidos usando restrições. Assim, essa integridade dos dados pode ser mantida. A seguir estão as restrições amplamente utilizadas:

  1. Chave primária : que identifica os dados de maneira única. Se esta restrição foi especificada para determinada coluna, então não podemos inserir dados duplicados nessa coluna
  2. Verifique : como NOT NULL. Aqui podemos especificar quais dados podemos inserir para aquela coluna específica e o que não é esperado para essa coluna.
  3. Chave estrangeira : referências de chave estrangeira para a linha de outra tabela. Para que os dados referidos em uma tabela de outra tabela estejam sempre disponíveis para a tabela de referência.
user3107247
fonte
3

As restrições podem ser usadas para impor propriedades específicas de dados. Um exemplo simples é limitar uma coluna interna a valores [0-100000]. Esta introdução parece boa.

Anders Abel
fonte
3

As restrições determinam quais valores são válidos para os dados do banco de dados. Por exemplo, você pode impor que um valor não seja nulo (uma NOT NULLrestrição), ou que exista como uma restrição única em outra tabela (uma FOREIGN KEYrestrição), ou que seja único nesta tabela (uma UNIQUErestrição ou talvez PRIMARY KEYrestrição dependendo de seus requisitos ) Restrições mais gerais podem ser implementadas usando CHECKrestrições.

A documentação do MSDN para as restrições do SQL Server 2008 é provavelmente seu melhor ponto de partida.

Jon Skeet
fonte
2
  1. UNIQUErestrição (da qual uma PRIMARY KEYrestrição é uma variante). Verifica se todos os valores de um determinado campo são exclusivos na tabela. Esta é a Xrestrição -eixo (registros)

  2. CHECKrestrição (da qual uma NOT NULLrestrição é uma variante). Verifica se uma determinada condição é válida para a expressão nos campos do mesmo registro. Esta é a Yrestrição do eixo (campos)

  3. FOREIGN KEYlimitação. Verifica se o valor de um campo é encontrado entre os valores de um campo em outra tabela. Esta é a Zrestrição -axis (tabelas).

Quassnoi
fonte
Restrições exclusivas e restrições de chave estrangeira podem ser escritas usando CHECKrestrições, então por que classificá-las de forma diferente? ou seja, " Y-eixo" (o que quer que isso signifique).
dia em
2
@onedaywhen: como você implementa um FOREIGN KEYusando uma CHECKrestrição?
Quassnoi,
1
@onedaywhen: tente criar uma tabela com esta restrição.
Quassnoi,
1
@onedaywhen: é tão difícil tentar? Dica: isso não funcionará.
Quassnoi,
3
@onedaywhen: a consulta que você escreveu não cria uma restrição de verificação. É uma mera SELECTconsulta. Você não pode usar subconsultas (ou qualquer outra construção que se refira a valores fora do registro atual) em CHECKrestrições em SQL Server.
Quassnoi,
2

Um banco de dados é a representação lógica computadorizada de um modelo conceitual (ou de negócios), que consiste em um conjunto de regras de negócios informais. Essas regras são o significado dos dados compreendido pelo usuário. Como os computadores compreendem apenas representações formais, as regras de negócios não podem ser representadas diretamente em um banco de dados. Eles devem ser mapeados para uma representação formal, um modelo lógico, que consiste em um conjunto de restrições de integridade. Essas restrições - o esquema do banco de dados - são a representação lógica no banco de dados das regras de negócios e, portanto, são o significado dos dados entendido pelo DBMS. Segue-se que, se o SGBD desconhece e / ou não impõe o conjunto completo de restrições que representam as regras de negócios, ele tem um entendimento incompleto do que os dados significam e, portanto,

Nota: O SGBD - significado “compreendido” - restrições de integridade - não é idêntico ao significado compreendido pelo usuário - regras de negócios - mas, apesar da perda de algum significado, ganhamos a capacidade de mecanizar inferências lógicas a partir dos dados.

"An Old Class of Errors" por Fabian Pascal

um dia quando
fonte
2

Existem basicamente 4 tipos de restrições principais no SQL:

  • Restrição de domínio: se um dos valores de atributo fornecidos para uma nova tupla não for do domínio de atributo especificado

  • Restrição de chave: se o valor de um atributo de chave em uma nova tupla já existe em outra tupla na relação

  • Integridade referencial: se um valor de chave estrangeira em uma nova tupla faz referência a um valor de chave primária que não existe na relação referenciada

  • Integridade da entidade: se o valor da chave primária for nulo em uma nova tupla

Ragu
fonte
-1

restrições são condições que podem validar uma condição específica. As restrições relacionadas ao banco de dados são integridade de domínio, integridade de entidade, integridade referencial, restrições de integridade definida pelo usuário, etc.

Prashant Kumbharkar
fonte