Jump to content
Fórum Script Brasil
  • 0

Precisa de tabela intermediário ou não


ViaPocket

Question

É isso ae amigos. Tenho as entidades Curso, Turmas e Inscrições. Sendo que:

Relação UM para N de Curso para Turmas. Acho que isso é o correto.

Minha dúvida é quanto a entidade Inscrições.Quaria saber qual das situações abaixo seria mais adequada.

1) Armazenar na tabela INSCRICOES o ID somente da tabela TURMAS (pois a tab TURMAS já terá o ID da tabela CURSO) junto com o ID da tabela FUNCIONARIOS (que serão os inscritos, no caso)

2) Criar uma tabela intermediária, guardar nela o ID do CURSO e ID de TURMAS. Depois, pegar a PK resultante desta tabela intermediária e armazenar na tabela INSCRICOES, junto com o ID de FUNCIONARIOS (que serão os inscritos, no caso)

Acho que a segunda opção faz mas sentido. Mas quero saber a opinião dos colegas.

É a mesma dúvida que sempre tenho em cadastros.Nunca sei ao certo se num determinado cadastro faz mais sentido armazenar o código do Estado e da Cidade da pessoa, ou se o melhor seria guardar apenas o código da cidade (pois a cidade já tem o código do Estado).

Ó dúvida cruel hehehe

Obrigado!

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Bom dia ViaPocket,

A modelagem vai depender totalmente dos requisitos. Sempre falo q não existe uma modelagem correta. Existe a melhor que se encaixa às regras levantadas.

O "armazenamento" das PK´s e FK´s não será você quem definirá onde, mas sim a modelagem. As regras são:

- A PK de uma tabela migrará para a outra (filha), quando o relacionamento for 1 para N respectivamente. Esta PK será identificada como sendo uma FK na tabela filha.

- Caso o relacionamento seja M para N, haverá a necessidade de se criar outra entidade, onde terá as duas PK´s (normalização).

Na sua modelagem:

- a relação entre Curso e Turmas é de 1 para N (a PK da tabela Curso vai para a tabela Turmas como FK).

Agora vamos a sua dúvida... Regras de negócio:

- Podemos ter várias inscrições para 1 curso - a PK da tabela Curso vai para a tabela Incrições como FK.

- Podemos ter várias inscrições para 1 turma - a PK da tabela Turma vai para a tabela Incrições como FK.

Sendo assim, a opção mais apropriada para sua dúvida seria a criação de uma tabela intermediária, sendo q esta intermediária poderá ser a própria tabela Inscrições.

Mas cuidado: se sua regra de negócio for:

- 1 pessoa pode fazer inscrições para vários cursos - ai terá um relacionamento de M para N - terá que criar nova entidade para realizar a normalização.

No caso do relacionamento entre Estado / Cidade:

- 1 Estado possui várias Cidades: a PK da tabela Estado vai para a tabela Cidade como FK.

- Normalmente, há uma correlação entre Pessoa X Cidade. Desta forma, armazenar o código do Estado e da Cidade na pessoa está incorreto.

Link to comment
Share on other sites

  • 0

Bom dia Fulvio! Agradeço pela explicação detalhada.

Bom, creio que minha situação seja:

- 1 pessoa pode fazer inscrições para vários cursos - ai terá um relacionamento de M para N - terá que criar nova entidade para realizar a normalização.

Isso criará a seguinte estrutura.

CURSO

-IdCurso

TURMAS

-IdTurmas

TAB_INTERMEDIARIA

-IdTab (PK)

-IdCurso(FK)

-IdTurmas(FK)

E finalmente as inscrições.

INSCRICOES

-IdInscricoes (PK)

-IdTab(FK) --> id da tabela intermediária

-IdFuncionario

É isso? Está certo?

Bom, se estiver correto vem outra pergunta.

Tenho uma tab chamada EVENTOS (é o evento que efetiva os cursos, turmas e etc).

Quero saber se a PK de EVENTO vai para a tab INTERMEDIARIA como FK ou se seria o contrário, a PK da tab INTERMEDIÁRIA indo como FK para EVENTO.

Ou então se seria a PK do EVENTO indo para INSCRCIOES como FK.

Acho que seria a PK da INTERMEDIARIA indo como FK para EVENTO. Mas me corrija se eu estiver enganado.

Brigadão!

Link to comment
Share on other sites

  • 0

Para que possamos identificar os relacionamentos, temos q dar nomes mais "sugestivos" para a tabela TAB_INTERMEDIARIA.... rs.

Pensei em chamá-la de ALUNO, uma vez q uma Pessoa é aluno quando se tem uma inscrição ativa.

Assim ficaria:

CURSO

-IdCurso

TURMAS

-IdTurmas

-IdCurso (FK)

ALUNO

-IdAluno (PK)

-IdTurmas (FK)

INSCRIÇÕES

-IdInscricoes (PK)

-IdAluno(FK)

-IdFuncionario

O modelo ficou bem parecido. Apenas acrescentei a FK na entidade Turmas, e retirei a IdCurso(FK) da tabela Aluno (que é a intermediária). você conseguirá resgatar o curso através da turma.

Agora não entendi ao certo a entidade EVENTOS...

Link to comment
Share on other sites

  • 0

Olá Fulvio. Perfeito! Consegui entender tudo. Boa didática.

Agora falarei sobre a entidade EVENTO.

Uma das funcionalidades do meu sistema é gerenciar a realização de eventos (palestras, treinamentos, workshops e etc)

Guardo nesta tabela informaões como data e horário de realização, local, lotação e por aí vai.

Este modelo que me ajudou a criar estará associado a entidade EVENTO para que eu possa ter:

-dados do evento em geral,

-o curso que foi realizado neste evento

-o número da turma que que fez o curso no evento

-e os alunos que participaram.

Minha regra é que um evento só poderá comportar a realização de UM curso (relação N para N, certo?)

Então se estiver tudo certo vem a pergunta.

Como associo EVENTO com as demais entidades?

Devo guardar a PK de ALUNO no EVENTO ou o contrário, a PK de EVENTO em ALUNO?

Link to comment
Share on other sites

  • 0

Bom dia ViaPocket,

Um evento só poderá comportar a realização de UM curso, mas o curso poderá estar em vários eventos (relação 1 para N).

Como o curso se associa ao evento, a chave do Curso deve ir para o Evento (guardar a PK do Curso no Evento).

Neste caso, você terá q cadastrar o Curso. Após o cadastramento, você conseguirá associar algum Evento ao Curso.

Se associar o Evento ao Aluno, você poderá ter alunos de vários Cursos no evento cadastrado. Perceba q a informação do Curso será "irrelevante" para esta correlação.

Outra coisa importante: nesta correlação você terá q ter alunos para cadastrar um Evento. Isto está incorreto, pois o Evento é criado para depois os alunos serem inseridos.

O que pode-se pensar também, é associar a Inscrição com o Evento também (guardar a PK da Inscrição no Evento). Desta forma, conseguirá ter inscrições não somente dos alunos das Turmas/Cursos, mas também inscrições de pessoas (que não são alunos) que possam participar dos Eventos (no caso de palestras).

Ai você quem decidirá de acordo com as regras, ok? :.)

Link to comment
Share on other sites

  • 0

Olá Fulvio! Mais uma vez, obrigado pelos esclarecimentos.

Tive uma "surpresa" ao rodar um select para exbir os dados da entidade TURMA fazendo um JOIN com a entidade CURSO e por fim outro JOIN com a entidade EVENTOS.

Meu objetivo é visualizar os atributos de TURMA, o CURSO a que está associada e por fim o EVENTO que o CURSO está associada. Trocando em miúdos quero uma visão partindo da entidade mais fraca (TURMA) para a mais forte (EVENTO).

O resultado foi que carregou dois registros. Isso é esperado visto que existe uma relação 1 para N entre EVENTOS e CURSO. Porém o curioso é que passei um parâmetro para a consulta, no caso o ID da TURMA. Deveria trazer apenas uma linha.

Isso me fez pensar se não faria (também) sentido associar ALUNOS com EVENTO numa relação 1 para 1, considerando que a entidade ALUNO nada mais é do que o ID de TURMA (FK) mais a PK de ALUNO.

Veja este print. Pode ajudar a explicar melhor.

https://skydrive.live.com/redir.aspx?cid=48...ANqSQr55190rZJ8

Obrigado mais uma vez!

Link to comment
Share on other sites

  • 0

Bom dia ViaPocket,

Desculpe pela demora da resposta, mas estava de férias... rs.

Houve uma duplicação do resultado provavelmente por causa do evento, não? Verifique as informações nas linhas duplicadas para identificar o motivo.

A modelagem deve ser montada / alterada de acordo com as necessidades do uauário. Se não houver sentido o relacionamento, então está correto o seu raciocínio.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...