Hubungan banyak-ke-banyak adalah satu-satunya pilihan yang layak di sini. Ada alasan mengapa mereka menyebutnya database relasional.
Mengapa?
- Bergabung sebenarnya tidak terlalu mahal.
- Beberapa kolom - Jumlah kolom di tabel Anda akan menjadi ludicris dan itu akan menjadi neraka pengembang sejati. Karena setiap fitur menambahkan migrasi, jumlah churn di basis kode Anda akan menjadi konyol.
- Kolom larik - Menggunakan kolom larik mungkin tampak seperti alternatif yang menarik sampai Anda menyadari bahwa ini sebenarnya hanya sedikit peningkatan dibandingkan memasukkan sesuatu ke dalam string yang dipisahkan koma. Anda tidak memiliki integritas referensial dan tidak ada organisasi kode yang diuntungkan karena memiliki model yang mewakili entitas dalam aplikasi Anda.
Oh dan setiap kali fitur ditarik, Anda harus memperbarui setiap 500k+ pengguna tersebut. VS hanya menggunakan 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