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