sql >> Database >  >> RDS >> PostgreSQL

Postgres:veel-op-veel versus meerdere kolommen versus matrixkolom

Veel-op-veel relaties zijn hier de enige haalbare optie. Er is een reden waarom ze het een relationele database noemen.

Waarom?

  • Joins zijn eigenlijk niet zo duur.
  • Meerdere kolommen - Het aantal kolommen in uw tabellen zal ludicris zijn en het zal een ware ontwikkelaarshel zijn. Omdat elke functie een migratie toevoegt, zal de hoeveelheid churn in je codebase belachelijk zijn.
  • Array-kolom - Het gebruik van een array-kolom lijkt misschien een aantrekkelijk alternatief, totdat je je realiseert dat het in feite slechts een marginale verbetering is ten opzichte van het proppen van dingen in een door komma's gescheiden tekenreeks. je hebt geen referentiële integriteit en geen van de voordelen van codeorganisatie die voortkomen uit het hebben van modellen die de entiteiten in je applicatie vertegenwoordigen.
    O, en elke keer dat een functie wordt gerukt, moet je al die 500k+ gebruikers bijwerken. VS gewoon CASCADE gebruiken.
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



  1. MaxListenersExceededWaarschuwing:mogelijk EventEmitter-geheugenlek gedetecteerd. 11 berichtenluisteraars toegevoegd. Gebruik emitter.setMaxListeners() om de limiet te verhogen

  2. Oracle PLSQL-tabellen gebruiken (associatieve array of index-by-tabel)

  3. Java MYSQL-verklaringsfout:controleer de syntaxis voor gebruik in de buurt van '?' op regel 1

  4. Hoe een enkele SQL Server-verbindingsinstantie open te houden voor meerdere aanvragen in C#?