Vztahy mnoho k mnoha jsou zde jedinou schůdnou možností. Existuje důvod, proč tomu říkají relační databáze.
Proč?
- Připojení ve skutečnosti není tak drahé.
- Více sloupců – Počet sloupců ve vašich tabulkách bude absurdní a bude to skutečné vývojářské peklo. Vzhledem k tomu, že každá funkce přidává migraci, množství odchodů ve vaší kódové základně bude hloupé.
- Sloupec pole – Použití sloupce pole se může zdát jako atraktivní alternativa, dokud si neuvědomíte, že jde ve skutečnosti jen o okrajové zlepšení oproti vkládání věcí do řetězce odděleného čárkou. nemáte žádnou referenční integritu a žádné výhody organizace kódu, které plynou z toho, že máte modely, které reprezentují entity ve vaší aplikaci.
Ano a pokaždé, když dojde k vytržení funkce, musíte aktualizovat každého z těchto více než 500 000 uživatelů. VS jen pomocí 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