Mối quan hệ nhiều-nhiều là lựa chọn khả thi duy nhất ở đây. Có một lý do tại sao họ gọi nó là cơ sở dữ liệu quan hệ.
Tại sao?
- Tham gia thực sự không đắt như vậy.
- Nhiều cột - Số lượng cột trong bảng của bạn sẽ là ludicris và đó sẽ là địa ngục thực sự của nhà phát triển. Khi mỗi tính năng thêm một lần di chuyển, số lượng trục trặc trong cơ sở mã của bạn sẽ rất ngớ ngẩn.
- Cột mảng - Sử dụng cột mảng có vẻ như là một sự thay thế hấp dẫn cho đến khi bạn nhận ra rằng nó thực sự chỉ là một cải tiến nhỏ so với việc nhồi mọi thứ vào một chuỗi được phân tách bằng dấu phẩy. bạn không có tích phân tham chiếu và không có lợi ích nào của tổ chức mã đến từ việc có các mô hình đại diện cho các thực thể trong ứng dụng của bạn.
Ồ và mỗi khi một tính năng bị giật, bạn phải cập nhật mỗi một trong số hơn 500k người dùng đó. VS chỉ sử dụng 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