Il.add_index question

I have a table that is modeling a friendship between two players. I’d
like it so that there can only be one record for this friendship in
the table. I have added an index to the table to make sure that a
record is unique like so …

id1 id2
1 2
1 2 # Error, record isn’t unique

add_index(:friendships, [:friend_id1, :friend_id2], :unique => true)

I would also like to add an index to take care of the following
situation…

id1 id2
1 2
2 1 # Error, since it’s the same as the first record

How would I do this?
Thanks.
Steve

2009/10/13 steveb56 [email protected]:

add_index(:friendships, [:friend_id1, :friend_id2], :unique => true)

I would also like to add an index to take care of the following
situation…

id1 Â id2
1 Â Â 2
2 Â Â 1 Â # Error, since it’s the same as the first record

Could you setup your code so that for a friendship record id1 is
always less than id2? If there is no way in the code that id1=2 and
id2=1 can occur then you do not need to protect against it.

Colin

Colin L. wrote:

2009/10/13 steveb56 [email protected]:

add_index(:friendships, [:friend_id1, :friend_id2], :unique => true)

I would also like to add an index to take care of the following
situation…

id1 Â id2
1 Â Â 2
2 Â Â 1 Â # Error, since it’s the same as the first record

Could you setup your code so that for a friendship record id1 is
always less than id2? If there is no way in the code that id1=2 and
id2=1 can occur then you do not need to protect against it.

And if you really want to make this bulletproof, you can enforce id1 <
id2 with a check constraint in the DB.

Colin

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Yeah that’s true, thanks.

Steve

On Tue, Oct 13, 2009 at 9:17 AM, Marnen Laibow-Koser <

I see what your saying yeah, that could work. Before I add it to the
table, I would get it in the form id1 < id2 & then my previous index
would work the same way essentially catching both of the cases I was
describing.

Thanks for the help.
Steve