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

Postgres:molti-a-molti vs colonne multiple vs colonna array

Le relazioni molti-a-molti sono l'unica opzione praticabile qui. C'è un motivo per cui lo chiamano database relazionale.

Come mai?

  • Le iscrizioni in realtà non sono così costose.
  • Più colonne - Il numero di colonne nelle tue tabelle sarà ridicolo e sarà un vero inferno per gli sviluppatori. Poiché ogni funzionalità aggiunge una migrazione, la quantità di abbandono nella tua base di codice sarà sciocca.
  • Colonna array - L'utilizzo di una colonna array può sembrare un'alternativa interessante finché non ti rendi conto che in realtà è solo un miglioramento marginale rispetto all'inserimento di elementi in una stringa separata da virgole. non hai integrità referenziale e nessuno dei vantaggi dell'organizzazione del codice che derivano dall'avere modelli che rappresentano le entità nella tua applicazione.
    Oh, e ogni volta che una funzionalità viene strappata devi aggiornare ognuno di quegli oltre 500.000 utenti. VS usando solo CASCADE.
class Feature
  has_many :user_features
  has_many :users, through: :user_features
end

class UserFeature
  belongs_to :user
  belongs_to :feature
end

class User
  has_many :user_features
  has_many :features, through: :user_features

  def has_feature?(name)
    features.exist?(name: name)
  end
end