Връзките много към много са единствената жизнеспособна опция тук. Има причина да я наричат релационна база данни.
Защо?
- Присъединяванията всъщност не са толкова скъпи.
- Множество колони – Броят на колоните във вашите таблици ще бъде ludicris и ще бъде истински ад за разработчици. Тъй като всяка функция добавя миграция, количеството отлив във вашата кодова база ще бъде глупаво.
- Колона с масив – Използването на колона с масив може да изглежда като привлекателна алтернатива, докато не разберете, че това всъщност е само незначително подобрение спрямо натъпкването на нещата в низ, разделен със запетая. нямате референтна цялост и нито едно от предимствата на организацията на кода, които идват от наличието на модели, които представляват обектите във вашето приложение.
О, и всеки път, когато дадена функция бъде изтеглена, трябва да актуализирате всеки един от тези 500k+ потребители. СРЕЩУ само използването на 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