Modeling Users in Battle-Game App?

Dear List,

I’d welcome some opinions on a modeling challenge I have.

I’m working on a game-app.

Each user in this app has many friends.

Also the user has many enemies.

These friends and enemies are user objects.

So we have 2 possible HABTM (Has And Belongs To Many) relationships.

A user HABTM friends.
A user HABTM enemies.

But, I dont like HABTM.

I’d prefer to have a HMT (Has Many Through).

I think it might be typical that when I replace a HABTM with a HMT,
that I use a model with “Membership” in its name.

So for example, I might Have-Many-Friends in England.

So perhaps I’d have a FriendsLocationMembership model.

Or, I might Have-Many-Enemies because I am a mutant.

So it looks like a Membership model could have an attribute name
“reason” which helps me understand why a particular user might be my
enemy or friend.

So it seems reasonable that I might have 2 or 3 groups of friends for
different reasons:

  • I have money
  • I am a good warrior
  • I am trustworthy
    etc…

Obviously the same goes for my enemies.

Also another question I need to answer is related to battles.

In any battle I’d like to know who are my friends and who are my
enemies.

And of course if I see a friend/enemy I want to know who his friends
and enemies are.

I’m looking for help/ideas on how I might code up the associations in
the models and the syntax in the migrations.

What makes this difficult for me is I only see 2 models:

User
Membership

Or possibly 3 models:

User
FriendMembership
EnemyMembership

Do any of you think this is an interesting topic?

–Audrey