Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mbpp

Multi ou uma Tabela

Recommended Posts

Oi tudo bem? Espero que me possam aconselhar a melhor forma de poder ter o resultado pretendido. Tenho um formulário que consiste nos utilizadores preencherem a disponibilidade para fazer treino fisico, basicamente no primeiro campo eles selecionam quanto tempo por dia pode treinar (1 hora, 2 horas, etc) e o segundo campo sao várias caixas de selecão que sao os dias da semana, de segunda-feira a domingo, ele poderá selecionar mais que uma. A minha intenção seria só usar uma tabela, que seria essa abaixo:


disponibilidade:

- id_disponibilidade;

- id_aluno;

- tempo_dia;

- dias_semana;


Mas o problema é que os dias da semana serão multi-registos, e uma outra opção seria criar outra tabela, mas não queria ter que criar outra tabela so por causa dos dias da semana, existe uma forma de poder inserir todos esses dados numa so coluna (dias_semana)?



Compartilhar este post


Link para o post
Compartilhar em outros sites

Buenas tchê.

Você pode inserir os dados como um array. O insert ficaria assim:

insert into disponibilidade (id_disponibilidade, id_aluno, tempo_dia, dias_semana)
values (1,1,3,"2,3,4,5")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim isso é verdade, mas o problema depois seria para recolher os dados para pdoer depois querer editar. Talvez esteja a complicar, mas obrigado Marlon.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A resposta pode ser Normalização de Dados.

 

Você cria uma tabela com os dias da semana:

CREATE TABLE dias_semana (
  id TINYINT UNSIGNED AUTO_INCREMENT,
  dia VARCHAR(7) NOT NULL,
  PRIMARY KEY (id)
)

Depois cria outra tabela para cruzar as informações da tabela `disponibilidade` com a `dias_semana`:

CREATE TABLE disponibilidade_x_dia_semana (
  id_disponibilidade INT UNSIGNED NOT NULL, # deve ser exatamente do mesmo tipo do campo da tabela disponibilidade
  id_dia_semana TINYINT UNSIGNED AUTO_INCREMENT,  # também deve ser exatamente igual ao campo da tabela dias_semana
  PRIMARY KEY (id_disponibilidade, id_dia_semana)
)

Aí você tem o cadastro da disponibilidade e depois insere os dias do treino.

Para consultar, basta utilizar JOIN:

SELECT d.id_disponibilidade, d.id_aluno, d.tempo_dia, s.dia AS dia_semana
FROM disponibilidade AS d
INNER JOIN disponibilidade_x_dia_semana AS x ON x.id_disponibilidade = d.id_disponibilidade
INNER JOIN dias_semana AS s ON s.id = x.id_dia_semana
WHERE d.id_aluno = 1 # ou retire o WHERE para ver todo mundo

PS: Ainda estou estudando sobre normalização de dados, não sei se dessa forma pode ser considerado normalização, hehe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agredeço pela sua participação lokaodomau, eu sei que essa é uma das soluções, mas como já tinha referido no inicio do post, não queri abordar por essa solução que abordou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu iria pela solução do lokaodomau , se duvida comece a pensar como responder perguntas do tipo

 

Quantos "utilizadores" tem treinamento numa quarta-feira ?

 

E veja que tipo de modelagem tem queries mais simples.

 

E mais pensaria em modelar por data e não dia da semana, existem feriados, férias etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu iria pela solução do lokaodomau , se duvida comece a pensar como responder perguntas do tipo

 

Quantos "utilizadores" tem treinamento numa quarta-feira ?

 

E veja que tipo de modelagem tem queries mais simples.

 

E mais pensaria em modelar por data e não dia da semana, existem feriados, férias etc.

Aqui ninguem está duvidando ninguem Motta...Não estou a dizer que a solução do lokaodomau seja a melhor ou pior, eu simplesmente fiz uma pergunta relativa a hipotese de poder inserir os dados todos numa coluna, agora quanto á melhor solução é outra questão que não foi posta nesse post. Mas agradeço pelo seu contributo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe @mbpp, por qualquer equivoco ou mal entendido de minha parte, primeiramente pensei ser um problema quanto a informação do banco de dados, pois foi postado no fórum do MySQL, mas acredito que simplificando a base de dados, torna o trabalho mais fácil para qualquer pessoa, abrindo um leque maior de possibilidades e mais agilidade para atingir o objetivo, independente do tamanho do sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.