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.