Compreendendo Chaves Estrangeiras no SQL Server
Ao projetar um banco de dados relacional, é essencial estabelecer relacionamentos entre tabelas para manter a integridade dos dados. Uma maneira de conseguir isso é através do uso de chaves estrangeiras. Uma chave estrangeira no SQL Server é um campo (ou coleção de campos) em uma tabela que identifica exclusivamente uma linha de outra tabela. Se você vem de outro sistema de banco de dados, como o PostgreSQL, pode encontrar algumas diferenças na sintaxe e na implementação no SQL Server, o que pode levar à confusão.
O Problema: Criando uma Chave Estrangeira
No cenário apresentado, há uma tentativa de criar três tabelas: exams
, question_bank
e answer_bank
. O objetivo é criar uma chave estrangeira na tabela question_bank
que faça referência à tabela exams
. No entanto, um erro ocorre ao executar o código SQL. A mensagem principal do erro é:
Msg 8139, Nível 16, Estado 0, Linha 9 Número de colunas de referência na chave estrangeira difere do número de colunas referenciadas, tabela ‘question_bank’.
Isso indica que há um descompasso na definição da chave estrangeira.
Solução: Definindo Corretamente a Chave Estrangeira
Passo 1: Revisar as Definições das Tabelas
Vamos analisar mais de perto como configurar corretamente a chave estrangeira na tabela question_bank
.
Configuração Atual da Tabela
O SQL original criou a tabela question_bank
assim:
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint question_exam_id foreign key references exams(exam_id)
);
A chave estrangeira está destinada a fazer referência a exam_id
da tabela exams
, mas falta a sintaxe e a estrutura apropriadas.
Passo 2: Atualizar a Definição da Chave Estrangeira
Para definir corretamente o relacionamento da chave estrangeira, especifique como a coluna de chave estrangeira (question_exam_id
) se relaciona com a chave primária da tabela referenciada (exam_id
):
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);
Mudanças Chave:
- Especifique o nome da chave estrangeira: É uma boa prática nomear a restrição da chave estrangeira (por exemplo,
fk_questionbank_exams
) para maior clareza. - Referenciar corretamente a coluna da chave estrangeira: Assegure-se de que a chave estrangeira faça referência à coluna correta na tabela referenciada.
Passo 3: Implementando as Mudanças
Agora, você pode excluir a tabela question_bank
existente (se ela existir) e criá-la novamente com a definição de chave estrangeira corrigida usando:
drop table if exists question_bank;
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);
Conclusão
Configurar chaves estrangeiras no SQL Server é uma etapa crucial para garantir a integridade dos dados e estabelecer relacionamentos entre as tabelas. Ao definir cuidadosamente as restrições de chave estrangeira e corrigir quaisquer problemas de sintaxe, você pode criar um design de banco de dados robusto e eficiente.
Se você encontrar algum erro, sempre verifique as definições da chave estrangeira para garantir que a coluna de referência corresponda corretamente à coluna referenciada. Com este guia, você deve estar bem preparado para implementar chaves estrangeiras com sucesso em seus bancos de dados SQL Server.