Criar um BD usando chave PK e FK (SQL 2012)

by - 16:13

Vamos a algumas coisas que devemos usar como padrão em um banco.

Quando se refere a chaves primarias é certo usar abreviação PK de primary key.
Já a chave estrangeira usa-se o FK de foreign key.
Mais como saber se seu banco deu certo e está exatamente como foi pedido?
Então uma coisa que costumo fazer é criar um diagrama do banco, para então verificar se está tudo exatamente como eu deseja ou que foi solicitado para mim.
Uma duvida que eu tive logo quando iniciei com banco de dados foi, o que significa essa chave amarela. Ela se refere a relações de 1 para 1 e o simbolo do infinito e relação de N.
O que seria o identity é quando você quer que sua chave primaria tenha auto incremento, no caso do exemplo abaixo ele está contando de 1 em 1.
Observe como estou criando minha chave primaria:
ALTER TABLE Clientes ADD CONSTRAINT       PK_Clientes PRIMARY KEY CLUSTERED
Estou dizendo que minha PK é minha chave primaria e estou indicando qual variável é essa chave primaria.
Mais e a chave estrangeira como seria?
Olhe abaixo como fiz uma chave estrangeira  lembrando que a chave estrangeira é minha chave que tem relação com outra tabela.



ALTER TABLE Vendas ADD CONSTRAINT       FK_Vendas_Produtos FOREIGN KEY       (       FK_Produto       ) REFERENCES dbo.Produtos       (       CodProduto       ) ON UPDATE  NO ACTION        ON DELETE  NO ACTION   

GO

No caso do meu banco ficou assim:
 relação com outra tabela,

Dá uma olhadinha como ficou meu diagrama, somente verificando se esta tudo ok?!

Espero ter tirado algumas duvidas e ter ajudado!!
Caso tenham alguma dúvida, comente no post que responderei o quanto antes.
Vou usar um exemplo da minha atividade de faculdade como exemplo:

CREATE DATABASE BD_ExercicioII
GO

USE BD_ExercicioII
GO

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO

CREATE TABLE Produtos
       (
       CodProduto int IDENTITY (1,1) NOT NULL,
       DescricaoProduto nvarchar(50) NULL,
       ValorProduto decimal(18, 0) NOT NULL,
       QtdEstoque int NOT NULL
       )  ON [PRIMARY]
GO
ALTER TABLE Produtos ADD CONSTRAINT
       PK_Produtos PRIMARY KEY CLUSTERED
       (
       CodProduto
       ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
ALTER TABLE dbo.Produtos SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
select Has_Perms_By_Name(N'Produtos', 'Object', 'ALTER') as ALT_Per, Has_Perms_By_Name(N'Produtos', 'Object', 'VIEW DEFINITION') as View_def_Per, Has_Perms_By_Name(N'dbo.Produtos', 'Object', 'CONTROL') as Contr_Per BEGIN TRANSACTION
GO
CREATE TABLE Clientes
       (
       CodCliente int IDENTITY (1,1) NOT NULL,
       NomeCliente nvarchar(100) NOT NULL,
       CI nvarchar(10) NULL,
       CPF nvarchar(13) NOT NULL,
       Telefone nvarchar(13) NOT NULL,
       Endereco nvarchar(150) NOT NULL
       )  ON [PRIMARY]
GO
ALTER TABLE Clientes ADD CONSTRAINT
       PK_Clientes PRIMARY KEY CLUSTERED
       (
       CodCliente
       ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
ALTER TABLE Clientes SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
select Has_Perms_By_Name(N'dbo.Clientes', 'Object', 'ALTER') as ALT_Per, Has_Perms_By_Name(N'dbo.Clientes', 'Object', 'VIEW DEFINITION') as View_def_Per, Has_Perms_By_Name(N'dbo.Clientes', 'Object', 'CONTROL') as Contr_Per BEGIN TRANSACTION
GO
CREATE TABLE Vendas
       (
       DataVenda datetime NOT NULL,
       FK_Cliente int NOT NULL,
       FK_Produto int NOT NULL,
       QtdVendida int NOT NULL,
       ValorVenda decimal(18, 0) NOT NULL
       )  ON [PRIMARY]
GO
ALTER TABLE Vendas ADD CONSTRAINT
       PK_Vendas PRIMARY KEY CLUSTERED
       (
       DataVenda
       ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
ALTER TABLE Vendas ADD CONSTRAINT
       FK_Vendas_Produtos FOREIGN KEY
       (
       FK_Produto
       ) REFERENCES dbo.Produtos
       (
       CodProduto
       ) ON UPDATE  NO ACTION
        ON DELETE  NO ACTION
      
GO
ALTER TABLE Vendas ADD CONSTRAINT
       FK_Vendas_Clientes FOREIGN KEY
       (
       FK_Cliente
       ) REFERENCES dbo.Clientes
       (
       CodCliente
       ) ON UPDATE  NO ACTION
        ON DELETE  NO ACTION
GO
ALTER TABLE dbo.Vendas SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
select Has_Perms_By_Name(N'dbo.Vendas', 'Object', 'ALTER') as ALT_Per, Has_Perms_By_Name(N'dbo.Vendas', 'Object', 'VIEW DEFINITION') as View_def_Per, Has_Perms_By_Name(N'dbo.Vendas', 'Object', 'CONTROL') as Contr_Per

You May Also Like

0 comentários