Acesse o design do banco de dados ao alterar a taxa do curso após certo período de tempo

0

Atualmente tenho três tabelas:

student

id (pk) , name

course

id (pk) , course_name , course_duration , course_fee

student_course

student_course_id (pk) , student_id (fk) , course_id (fk)

se depois de um certo período de tempo a taxa do curso mudar, então como posso manter o registro do aluno com a taxa do curso anterior?

    
por Ashish Poudel 27.06.2014 / 11:08

1 resposta

0

Você está correto, na especificação do esquema, não pode. você teria que desnormalizar a tabela Course_Fee, de modo que ela também aparecesse na tabela Student_course (já que essa é a única tabela que mapeia 1-para-1 com o fenoma de um aluno específico tendo uma classe específica).

Existe uma alternativa no entanto. Imagine na tabela de cursos que você tinha duas linhas como:

...
2,'Intro to CS', '15 weeks', 2000.00
...
5,'Intro to CS', '15 weeks', 2500.00
...

agora você pode ter registros históricos de alunos fazendo uma versão anterior do curso para 2000 $ empatados com ID = 2, e novos alunos assumindo a nova versão com 2500 $ empatados com ID = 5.

A expressão de esquema, como suas definições de tabela, não informa tudo sobre como um banco de dados funciona. Mesmo depois de considerar campos, chaves, restrições, etc, ainda há a maneira como o aplicativo usa a tabela a ser considerada. Por exemplo, neste caso, o aplicativo pressupõe que haja cursos duplicados e use o Top (1) em suas consultas:

select Top(1) * from Course order by ID DESC

Então, pode expressar isso? sim. É um projeto ruim, sim. Melhor desnormalizar e, melhor ainda, criar uma tabela de taxas de curso com um bit ativo, para que você possa desativar as taxas antigas, mas ainda manter os dados e a integridade referencial.

Eu faria como:

Student(Id, Name)
Fee(Id, Fee)
Course(Id, course_name , course_duration , FeeId)
StudentCourse(StudentId, CourseId, FeeId)
    
por 27.06.2014 / 14:00