PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

È mai una buona idea archiviare un array come valore di campo o memorizzare i valori dell'array come record?

Penso che dovresti leggere sulla normalizzazione del database e decidi tu stesso. In breve, però, ci sono una serie di problemi con la tua proposta, ma potresti decidere di conviverci.

I più ovvi sono:

  1. Cosa succede se viene aggiunto un tag aggiuntivo alla riga(1)? Devi prima analizzare, controllare se è già presente, quindi aggiornare la riga in modo che sia tags.append(newTag) .
  2. Peggio ancora eliminare un tag? Cerca tag, è presente, ricrea i tag.
  3. E se un tag dovesse cambiare nome, magari un processo di moderazione?
  4. Ancora peggio, che dire di persone diverse che specificano un nome di tag in modo diverso:sarebbe difficile da razionalizzare.
  5. Cosa succede se si desidera eseguire query sui dati in base ai tag? La tua query diventa molto più complessa di quanto dovrebbe essere.
  6. Presentazione:il client deve analizzare il tag per poterlo utilizzare. E il campo separatore? Cambialo e tutti i clienti devono cambiare.

In breve, tutte queste operazioni diventano più difficili e macchinose. La normalizzazione è progettata per superare tali problemi. Probabilmente l'unico motivo per fare quello che dici, IMO, è che stai acquisendo i dati come una tantum ed è solo informativo, cioè ha senso per un utente ma non per un sistema in sé. Questo è un po' come dire che probabilmente è meglio evitarlo (di nuovo, IMO).