PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres :plusieurs à plusieurs contre plusieurs colonnes contre une colonne de tableau

Les relations plusieurs-à-plusieurs sont la seule option viable ici. Il y a une raison pour laquelle ils l'appellent une base de données relationnelle.

Pourquoi?

  • Les jointures ne sont en fait pas si chères.
  • Colonnes multiples - Le nombre de colonnes dans vos tableaux sera ridicule et ce sera un véritable enfer pour les développeurs. Au fur et à mesure que chaque fonctionnalité ajoute une migration, le taux de désabonnement dans votre base de code sera ridicule.
  • Colonne de tableau :l'utilisation d'une colonne de tableau peut sembler une alternative attrayante jusqu'à ce que vous réalisiez qu'il ne s'agit en fait que d'une amélioration marginale par rapport au remplissage d'éléments dans une chaîne séparée par des virgules. vous n'avez aucune intégrité référentielle et aucun des avantages de l'organisation du code qui vient d'avoir des modèles qui représentent les entités dans votre application.
    Oh et chaque fois qu'une fonctionnalité est retirée, vous devez mettre à jour chacun de ces 500 000+ utilisateurs. VS simplement en utilisant 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