SQL Server Basico 6 – Constraints

Enfim, depois de muito tempo sem conseguir postar nada, estou agora, voltando a minha rotina normal de posts, e tentar manter a media de ao menos 2 posts por semana.

Como primeiro post pós retorno, quero falar sobre um assunto bem simples, porem que ainda gera muitas duvidas, alem de que, muitas pessoas que estão iniciando no mundo de banco de dados não conhecem: CONSTRAINTS.

O que é uma constraint?
Constraint é uma regra que voce ira aplicar a seus dados

Para que serve?
Uma constraint possui como função principal garantir a qualidade de seus dados, evitando situações do tipo: A, eu tenho uma venda aqui para um cliente que não existe, entre outros….

Quais tipos existem?
– Primary Key: Todas as linhas da coluna devem ser não nulas, e não pode haver repetições
– Foreign Key: O valor a ser inserido deve, obrigatoriamente, existir em uma outra tabela
– Check: O valor inserido deve atender a uma condição como True, para que seja inserido com sucesso
– Nulavel/Não nulavel: Aceitar ou não valores nulos
– Default: Assumi um valor padrão, caso a coluna não seja especificada no insert

--CRIA TABELAS PARA TESTES
CREATE TABLE ConstraintsBlog01
(
	Id INT IDENTITY(1,1) PRIMARY KEY,
	Usuario VARCHAR(100),
	Data_Nascimento DATETIME
)

CREATE TABLE ConstraintsBlog02
(
	Id INT REFERENCES ConstraintsBlog01(Id),
)

CREATE TABLE TesteConstraint03
(
	Id INT IDENTITY(1,1) PRIMARY KEY,
	nm_Usuario VARCHAR(100) DEFAULT 'SEM NOME'
)
---------------------------------------------------PRIMARY KEY---------------------------------------------------------------
--> No caso, ja colocamos o campo Id da tabela ConstraintsBlog01 como PrimaryKey na criação da tabela, porem, para criarmos
--> um campo como PK, devemos executar o seguinte comando:
ALTER TABLE ConstraintsBlog02 ADD CONSTRAINT PK_Id PRIMARY KEY (Id)
--> Por que do erro: O campo Id da tabela ConstraintsBlog02 é nulavel, e como uma PK não pode ser nula ou repetida, devemos
--> executar:
---------------------------------------------------NULL/NOT NULL-------------------------------------------------------------
ALTER TABLE ConstraintsBlog02 ALTER COLUMN Id INT NOT NULL

----------------------------------------------VOLTANDO A PRIMARY KEY---------------------------------------------------------
ALTER TABLE ConstraintsBlog02 ADD CONSTRAINT PK_Id_ConstraintsBlog02 PRIMARY KEY (Id)

------------------------------------------------CONSTRAINT DE CHECK-----------------------------------------------------------
--INSERE O PRIMEIRO VALOR
INSERT INTO ConstraintsBlog01(Usuario, Data_Nascimento) VALUES ('Fabrizzio Antoniaci Caputo', '20100921')
-->Inserido com sucesso, pois não ha nehuma restrição para a data ou o nome

--CRIA CONDIÇÃO DE CHECK PARA DATA
ALTER TABLE ConstraintsBlog01 ADD CONSTRAINT ChecaData CHECK (Data_Nascimento < DATEADD(YEAR, -18, GETDATE()))
--> O que faz: Toda data inserida, deve brigatoriamente ser mais do que 18 anos, em relação ao dia da inserção
--> Por que do erro, ja existe um valor que não respeita essa regra, portanto, temos que executa-la assim:
ALTER TABLE ConstraintsBlog01 WITH NOCHECK ADD CONSTRAINT ChecaData CHECK (Data_Nascimento < DATEADD(YEAR, -18, GETDATE()))

--TENTATIVA DE INSERÇÃO INVALIDA
INSERT INTO ConstraintsBlog01(Usuario, Data_Nascimento) VALUES ('Fabrizzio Antoniaci Caputo', '20100921')
-->Erro por que novos valores inseridor, irão ter de respeitar a constraint

--TENTATIVA DE INSERÇÃO VALIDA
INSERT INTO ConstraintsBlog01(Usuario, Data_Nascimento) VALUES ('Fabrizzio Antoniaci Caputo', '19910921')

----------------------------------------------------FOREIGN KEY-------------------------------------------------------------
--> Uma foreign key, faz que um valor que va ser inserido em um campo de uma tabela, exista previamente em uma outra tabela
--> Se tentarmos inserir o valor
INSERT INTO ConstraintsBlog02 VALUES (5)
--> Teremos um erro de FK, pois o valor 5, não existe na tabela ConstraintsBlog01, cujo campo tem referencia
SELECT * FROM ConstraintsBlog01 --> Temos os valores 1 e 3, portanto, ao executar...
INSERT INTO ConstraintsBlog02 VALUES (3)
--> Temos uma inserção com sucesso

--------------------------------------------------DEFAULT------------------------------------------------------------------
--> Ao inserir valores em uma coluna com uma constraint default, sera inserido e valor espeficicado, porem, se o mesmo não for
--> sera inserido o valor default
--INSERÇÃO SEM VALOR DEFAULT
INSERT INTO TesteConstraint03(nm_Usuario) VALUES ('FABRIZZIO')
SELECT * FROM TesteConstraint03

--INSERT UTILIZANDO O VALOR DEFAULT
INSERT INTO TesteConstraint03 DEFAULT VALUES
SELECT * FROM TesteConstraint03
Anúncios
Post a comment or leave a trackback: Trackback URL.

Comentários

  • Vinicius Henrique  On 24/01/2012 at 10:33

    Hahaha, eu tirei essa duvida pessoalmente hoje, e por incrivel que pareça é o assunto tratado no blog.

    Excelente Fabrizzio ..

    abs.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: