Considering a scenario where a member has a account , personal profile , academic profile status (between pre-defined statuses: teacher, student and collaborator) within the system. For each status , the academic profile is different.
The tables (theoretically) follow:
MEMBRO
id (PK)
MEM_CONTA
membro_id (PK) (FK) // referencia id em MEMBRO
email (string)
username (string)
senha (string)
MEM_PERFIL
membro_id (PK) (PK) // referencia id em MEMBRO
MEM_PER_PESSOAL
perfil_id (PK) (FK) // referencia membro_id em MEM_PERFIL
nome (string)
descricao (string)
Now my problem: how to allow a member to change your status (for pre-registered status ) , create a new record for academic profile data (relative to your new status ) and add additional fields in personal profile ?
For this, I imagined:
STATUS
id (PK)
titulo (string)
descricao (string)
MEMBRO_STATUS
membro_id (PK) (FK) // referencia id em MEMBRO
status_id (PK) (FK) // referencia id em STATUS
id (FK)
MEMBRO_PERFIL_PROFESSOR
id (PK) (FK) // referencia id em MEMBRO_STATUS
MEMBRO_PERFIL_PROFESSOR_ACADEMICO
perfil_id (PK) (FK) // referencia id em MEMBRO_PERFIL_PROFESSOR
curso (string)
nivel (string)
entrada (timestamp)
saida (timestamp)
MEMBRO_PERFIL_PROFESSOR_PESSOAL
perfil_id (PK) (FK) // referencia id em MEMBRO_PERFIL_PROFESSOR
url_lattes (string)
MEMBRO_PERFIL_ALUNO
id (PK) (FK) // referencia id em MEMBRO_STATUS
MEMBRO_PERFIL_ALUNO_ACADEMICO
perfil_id (PK) (FK) // referencia id em MEMBRO_PERFIL_ALUNO
bolsa (string)
MEMBRO_PERFIL_ALUNO_PESSOAL
perfil_id (PK) (FK) // referencia id em MEMBRO_PERFIL_ALUNO
url_pessoal (string)
To identify the last status (active status) of a member, then:
MEMBRO
id (PK)
status_id (FK) // referencia id em MEMBRO_STATUS
About this practice, I have several questions:
-
Using a third key (like id ) in a relationship table, is that correct?
-
What does data normalization say about it?
-
Is there any way out of this situation?