A palavra-chave e o conceito-chave que você precisa investigar são banco de dados normalização .
O que você faria, em vez de adicionar informações sobre as atribuições à pessoa ou às tabelas de tarefas, é adicionar uma nova tabela a essa informação de atribuição, com relacionamentos relevantes.
Exemplo, você tem as seguintes tabelas:
Pessoas:
+−−−−+−−−−−−−−−−−+ | ID | Name | +====+===========+ | 1 | Alfred | | 2 | Jebediah | | 3 | Jacob | | 4 | Ezekiel | +−−−−+−−−−−−−−−−−+
Tarefas:
+−−−−+−−−−−−−−−−−−−−−−−−−−+ | ID | Name | +====+====================+ | 1 | Feed the Chickens | | 2 | Plow | | 3 | Milking Cows | | 4 | Raise a barn | +−−−−+−−−−−−−−−−−−−−−−−−−−+
Você criaria uma terceira tabela com Atribuições. Esta tabela modelaria a relação entre as pessoas e as tarefas:
+−−−−+−−−−−−−−−−−+−−−−−−−−−+ | ID | PersonId | TaskId | +====+===========+=========+ | 1 | 1 | 3 | | 2 | 3 | 2 | | 3 | 2 | 1 | | 4 | 1 | 4 | +−−−−+−−−−−−−−−−−+−−−−−−−−−+
Em seguida, teríamos uma restrição de Chave Estrangeira, de modo que o banco de dados imporia que os IDs de PersonId e TaskIds tivessem que ser IDs válidos para esses itens estrangeiros. Para a primeira linha, podemos ver PersonId is 1
, então Alfred é atribuído a TaskId 3
, Vacas leiteiras .
O que você deve conseguir ver aqui é que você pode ter o mínimo ou o número de tarefas por tarefa ou por pessoa que quiser. Neste exemplo, Ezekiel não é atribuído a nenhuma tarefa, e Alfred é atribuído 2. Se você tiver uma tarefa com 100 pessoas, fazer SELECT PersonId from Assignments WHERE TaskId=<whatever>;
produzirá 100 linhas, com uma variedade de diferentes pessoas designadas. Você pode WHERE
no PersonId para encontrar todas as tarefas atribuídas a essa pessoa.
Se você quiser retornar as consultas substituindo os IDs pelos Nomes e pelas tarefas, você poderá aprender a juntar as tabelas.