Supponiamo di avere le seguenti informazioni logiche: (tag_name, id). Ad esempio: (cibo, 1), (cibo, 2), (cibo, 3), (bevanda, 1), (bevanda, 2)
Sto cercando di decidere qual è il modo migliore per archiviarlo in un database. Posso semplicemente usare una tabella (STRINGA, INTEGER) come nell'esempio, o una più compatta (STRING, INTEGER_LIST), in questo modo: (cibo, [1,2,3]), (bevanda, [1,2]) . Questo metodo è decisamente più compatto, ma l'altro metodo sembra più banalmente flessibile (ad esempio, posso fare un join per tag_name o id con un'altra tabella, e non ho bisogno di analizzare i risultati delle mie query SQL).
Quale metodo è migliore e perché? La ridondanza del primo metodo è estremamente dispendiosa o i database SQL sono abbastanza intelligenti da riuscire a trovare uno spazio di archiviazione efficiente? L'elaborazione post-query di cui ha bisogno il secondo metodo (come verificare se un ID è già associato a un tag prima di aggiungerlo) è più costosa rispetto a mettere questo carico sul database nel primo metodo?