Denormalize DB by adding redundant foreign keys to tables

Hi,

I have 3 models: User, Order(user_id), Membership(order_id).

I'd like to know if a given user has a valid membership, i.e: the
order.status == 'paid' and membership.expires_at > Time.now

I could use a User has_many memberships :through => :order, and put a
condition but that adds membership and order logic to the User model
which I don't want.

So my idea is to add a redundant user_id to membership, and to set an
expires_at for a membership only when the order gets paid. This way I
can't easily query and it keeps the encapsulation of each model where it
belongs to.

What do you think?

Hi,

I have 3 models: User, Order(user_id), Membership(order_id).

I’d like to know if a given user has a valid membership, i.e: the

order.status == ‘paid’ and membership.expires_at > Time.now

I could use a User has_many memberships :through => :order, and put a

condition but that adds membership and order logic to the User model

which I don’t want.

I would always, as a first solution, look at what the question being asked is. You want to know if ‘a given user has a valid membership’, therefore use the User has_many memberships option, I would not try to turn the question on it’s head to answer it.