/ / DataBase Analysis-junction table - banco de dados, design de banco de dados, chave primária, chave primária composta, tabela de junção

DataBase Analysis - tabela de junção - banco de dados, design de banco de dados, chave primária, chave primária composta, tabela de junção

Este assunto me confunde, Eu tenho uma faculdadeSistema de informação: a tabela de junção entre a tabela de alunos e a tabela de disciplinas (currículo), a chave primária é a chave composta (StudentID, SubjectID) e ambas são chaves estrangeiras, mas o aluno pode falhar no exame e repetir a disciplina, para que tenhamos duplicado PK e precisamos registrar todos os dados. Tenho duas maneiras de resolver esse problema, mas não sei o melhor caminho?

  1. Adicione nova coluna como chave primária em vez de chave composta.
  2. Associe-se à coluna composta Temporada da chave e coluna do ano e a chave composta será (StudentID, SubjectID, Season, Year). Devo mencionar que não preciso dessa chave composta como chave estrangeira.

Qual caminho é melhor para desempenho e integridade do banco de dados?

Respostas:

1 para resposta № 1

O assunto e o exame são separados (se relacionados)conceitos, portanto, você não deve tentar representá-los na mesma tabela. Além disso, o fato de ter sido realizado um exame para o assunto em questão é separado do fato de qualquer aluno em particular ter feito esse exame. Divida todos esses conceitos em suas próprias tabelas, e o modelo se tornará mais natural, por exemplo:

insira a descrição da imagem aqui

Representar um aluno que fez o mesmo exame várias vezes é apenas uma questão de adicionar várias linhas à tabela STUDENT_EXAM.


NOTA: STUDENT_SUBJECT apenas registra o fato de que o aluno se matriculou na disciplina, mas não quando (em que ano / semestre). Manter informações específicas do semestre pode exigir tabelas adicionais e relacionamentos mais complicados dentro do modelo.

NOTA: Existe uma dependência em forma de diamante neste modelo. Como SUBJECT_ID foi passado da "parte superior" (SUBJECT), para baixo dos dois lados (STUDENT_SUBJECT, EXAM) e depois mesclado na "parte inferior" (STUDENT_EXAM) do diamante, um aluno não pode fazer um exame em um assunto ele não se matriculou.