Há uma piada que ouvi há algum tempo:
P Como um codificador BASIC conta até 10?
A 1,2,3,4,5,6,7,8,9,10
P Como um codificador C conta até 10?
A 0,1,2,3,4,5,6,7,8,9
P Como um DBA conta até 10?
A 0,1, muitos
A verdade por trás dessa piada é que, quando você tem duas (ou mais) da mesma coisa em uma estrutura de banco de dados (colunas ou tabelas), está fazendo algo errado.
Um esquema que se parece com:
+----------+
| id |
| name |
| phone1 |
| phone2 |
| |
+----------+
Está errado, porque onde você colocará um terceiro número de telefone, se alguém o tiver?
O mesmo se aplica às próprias tabelas. Também é uma coisa ruim modificar o esquema no tempo de execução, o que a "nova tabela para cada lista" parece implicar. (Relacionado: MVC4: Como criar modelo em tempo de execução? )
E, assim, a solução é criar uma lista de tarefas composta por duas tabelas. Há duas coisas que você tem - listas e itens.
Então, vamos criar uma estrutura de tabela que reflete isso:
+----------+ +-------------+
| List | | Task |
+----------+ +-------------+
| id (pk) <---+ | id (pk) |
| name | +---+ listid (fk) |
| | | desc |
| | | |
+----------+ +-------------+
A lista possui um ID (a chave primária da lista) e um nome. A tarefa possui um ID (a chave primária), um listid (uma chave estrangeira) e a descrição da tarefa. A chave estrangeira está relacionada à chave primária de outra tabela.
Vou salientar que isso não começa a abranger todas as possibilidades em vários requisitos para o software e a estrutura da tabela para suportá-lo. Conclusão, data de vencimento, repetição, etc ... essas são todas as estruturas adicionais que provavelmente precisarão ser consideradas ao projetar a tabela. Dito isto, se a estrutura da tabela não é aquela que está adequadamente normalizada (ou percebendo as compensações que você fez porque não está normalizada), você terá muitas dores de cabeça mais tarde.
Agora, tudo isso se refere a escrever isso como um banco de dados relacional. Mas esse não é o único tipo de banco de dados disponível. Se você considera uma lista um documento, os bancos de dados nosql com estilo de documento também podem oferecer uma abordagem que não está errada.
Enquanto eu não vou me aprofundar muito nisso, existem inúmeros tutoriais por aí para listas de tarefas no sofá. Um desses que surgiu com uma pesquisa é um aplicativo simples da lista de tarefas no CouchDB . Outro aparece no wiki do couchdb: Esquema proposto para listas de tarefas .
Na abordagem apropriada para um sofá, cada lista é um documento JSON armazenado no banco de dados. Você apenas colocaria a lista em um objeto JSON e a colocaria no banco de dados. E então você lê do banco de dados.
O JSON pode se parecer com:
[
{"task":"get milk","who":"Scott","dueDate":"2013-05-19","done":false},
{"task":"get broccoli","who":"Elisabeth","dueDate":"2013-05-21","done":false},
{"task":"get garlic","who":"Trish","dueDate":"2013-05-30","done":false},
{"task":"get eggs","who":"Josh","dueDate":"2013-05-15","done":true}
]
(da criação de uma lista de compras com um arquivo json no Stack Overflow).
Ou algo se aproximando disso. Existem outros registros que o sofá possui como parte do documento.
O problema é que não é a maneira errada de abordar e uma lista de tarefas em um banco de dados de documentos pode ser perfeitamente adequada ao que você está tentando fazer com menos sobrecarga de conceito de como fazê-lo.