Cosa c'è di meglio: più voci sql o una voce sql con un campo lista?

1

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?

    
posta EpsilonVector 04.07.2013 - 07:25
fonte

1 risposta

6

Mai e poi mai cerca di inserire valori digitati in un attributo perché sembra più semplice della creazione di un'altra relazione. Le basi di dati in tempo reale gestiscono i dati relazionali in modo efficiente. A meno che tu non pensi di poter scrivere un metodo di archiviazione migliore rispetto ad es. i manutentori Postgres o Oracle, è una cattiva idea provare a gestire le relazioni serializzandole e elaborandole da soli.

    
risposta data 04.07.2013 - 08:44
fonte

Leggi altre domande sui tag