Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Modelagem de tabela Listas [MYSQL]

Preciso criar uma lista de itens, onde cada usuário pode criar a sua, estou em duvida na modelagem da tabela . Pensei em 2 formas :

1 - criar uma tabela normal , porem com uma coluna onde eu coloco todos os itens que o usuário add em um array (colocar somente o id do item e quantidade). `

lista_iduser_iditens
0101Array({item_id=124,quantidade=2},{item_id=354,quantidade=5})
0202Array({item_id=124,quantidade=2},{item_id=354,quantidade=5})
`

2 - Criar uma tabela, onde eu declaro quase a mesma coisa porém na vez de eu criar uma coluna" item" eu crio uma coluna "item_id" e outra quantidade ! `

lista_iduser_iditem_idquantidade
01011242
02013545
03021242
04023545
`

A minha dúvida é qual a melhor opção, pois surgiu o seguinte pensamento (posso estar errado), caso eu crie a 2 tabela aparentemente vai ter muito mais dados, pois vamos dizer que tenho 50 users e cada users tem 100 itens na lista, isso daria 5000 linhas na tabela, já no primeiro modelo eu só teria 50.

Por favor me ajudem e desculpem minha ignorância.

Obs: Se puder explicar as vantagens e desvantagens das duas, pois particularmente eu prefiro usar o segundo método pela facilidade de manipular os registros !

Desde já agradeço !

4 respostas
solução!

Bom dia Bruno Brante Até que você tem uma boa preferência, sendo esta a mais sensata. Na normatização das tabelas, nos devemos evitar que dados que não estejam realmente conectados com o restante da tabela ou que não depende dela, estes não precisam estar em sua tabela. Você deve criar uma FK (Foreign Key) para referenciar estes dados.Na segunda tabela você pode ter ter ai 3 tabelas diferentes sendo cada uma estará referenciando a outra (se quiser pesquisar por lista, ou por usuário, ou pelos itens comprados tanto pelo usuário quanto pela lista através dos JOIN). Agora, se vai ocupar mais espaço com certeza vai sim, porém banco de dados é isso mesmo, pois se espera uma quantidade de dados muito maior para trabalhar. Na primeira tabela você vai estar forçando ela a trabalhar com registros únicos que no momento de solicitar uma busca, você teria que especificar melhor, e assim gerando um erro no seu Select (creio que em uma coluna você estaria pensando em colocar texto e número o que não é muito correto)

Muito obrigado Tassiano, em questão de tabelas conectadas eu tenho uma pequena dúvida:

Por exemplo :

Tenho a tabela "listas" :

lista_id | item_id

E outra tabela "item" :

item_id | item_nome

Minha duvida é se quando eu leio a coluna "item_id" da primeira tabela eu tenho acesso a tabela "item" sem mesmo ler ela . Ou seja ler 2 tabelas, mas no código apenas ler 1.

Lembrando que uso PHP com Mysql !

Desde já agradeço .

Boa tarde Bruno

Eu acho que entendi a sua dúvida e vou tentar explicar.

No momento que você for fazer a requisição para ler todas a 3 colunas em uma só tabela, você deve solicitar que o seu SELECT chame as três através do Join.

Agora contando que você ver todos os itens da coluna 'item_id' você pode selecionar como:

...

select (campos que você queria buscar) from item join left (campo que trás todas as listas) on lista.item_id = item.id and (algum critério que vai forçar a trazer todos os resultados como "lista_id =1")

...

Isso vai forçar a trazer todos os dados que estejam na tabela item mesmo que não tenha nenhum vinculo.

Se caso não seja isso poste aqui a estrutura da sua database! Um abraço!

Show, vou testar e te falo qualquer coisa aviso ! Brigadão pela ajuda .