Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida de sintaxe - Fato_001 e PRIMARY KEYS

Olá! Referente à criação da tabela Fato_001, eu tenho uma dúvida sobre a sintaxe do código.

(Vou excluir linhas do código que não abrangem a dúvida).

Quando desejo utilizar todos os campos de código como PRIMARY KEY, fiz o seguinte código:

[Cod_Cliente] NVARCHAR(50) NOT NULL PRIMARY KEY,
[Cod_Produto] NVARCHAR(50) NOT NULL PRIMARY KEY,
[Cod_Organizacional] NVARCHAR(50) NOT NULL PRIMARY KEY,
[Cod_Fabrica] NVARCHAR(50) NOT NULL PRIMARY KEY,
[Cod_Dia] NVARCHAR(50) NOT NULL PRIMARY KEY

Vejam que eu defini, em cada linha, a coluna a ser criada como PRIMARY KEY.

Porém, o código do professor junta tudo numa linha só:

PRIMARY KEY ([Cod_Cliente], [Cod_Produto], [Cod_Organizacional], [Cod_Fabrica], [Cod_Dia])

Eis que quando eu recompilo o código com a minha metodologia, recebo a seguinte mensagem de erro:

SQL71531: The table or view ([dbo].[Fato_001]) has more than one clustered index. DatawarehouseSucos

SQL71533: A table or table-valued function ([dbo].[Fato_001]) contains more than one primary key

Quando compilo com a do professor, não dá erro (Ainda bem, né?! rs)

Eis a dúvida: Qual a diferença entre as duas sintaxes? Ambas fazem a declaração de PRIMARY KEYS às colunas que devem receber esse atributo. Porém, declarar em cada uma das linhas, não resolve (por mais que o ícone de chave apareça na minha tabela, do mesmo jeito que se for numa linha única). Na minha cabeça, são a mesma coisa. Mas, em termos lógicos, por que não?

Obrigado de antemão!

2 respostas
solução!

Oii Vinicius, tudo bom?

Olhando assim parece que estão fazendo a mesma coisa, porém não estão. Apesar de ser a mesma coisa (confuso não?), mas vamos lá:

[Cod_Cliente] NVARCHAR(50) NOT NULL PRIMARY KEY,
[Cod_Produto] NVARCHAR(50) NOT NULL PRIMARY KEY,
[Cod_Organizacional] NVARCHAR(50) NOT NULL PRIMARY KEY,
[Cod_Fabrica] NVARCHAR(50) NOT NULL PRIMARY KEY,
[Cod_Dia] NVARCHAR(50) NOT NULL PRIMARY KEY

Aqui, está declarando que cada uma dessas colunas é uma chave primária, certo? Mas essa sintaxe é para declararmos apenas UMA coluna como chave primária, por isso é retornado aquele erro pra você.

Porém, o instrutor cria uma chave primária composta, que é a combinação de várias campos quando não há um campo que, por si só, possa ser usado para identificar as linhas da tabela de forma exclusiva, necessitando que seja realizada uma combinação de dois ou mais campos para tal.

PRIMARY KEY ([Cod_Cliente], [Cod_Produto], [Cod_Organizacional], [Cod_Fabrica], [Cod_Dia])

Então, por isso o código do professor roda sem erros, porque essa é a sintaxe para criar uma chave primária composta.

Espero que a explicação te ajude. Qualquer dúvida me fale, tá bom? : )

Excelente, Maria!

Obrigado pelo didatismo e pronto atendimento nesta dúvida!

Sigamos.

Abs!