On Tue, 16 Jul 2013 17:29:47 -0700 (PDT) Victor Hooi
<victorh...@gmail.com> wrote:
> We have a list of users, who are going to like/dislike various
> widgets.
> 
> My question is regarding how to store the like/dislikes.
> 
> Essentially, there can be three states between a user and a widget -
> like, dislike, and unrated, so it's not just a straight Boolean.
> 
> I'm thinking of just doing a M2M between user and widgets models, and
> then storing an extra field on that M2M.
> 
> I can either store a Boolean, for whether the item is liked/unliked -
> and then an unrated item simply won't be exist in the table.
> 
> Or I can store a integer (with a choice tupled defined), with say 
> 0=unrated, 1=like, 2 = unlike, and all possible combinations are
> listed.
> 
> We'll be doing queries to compare users, and see if their
> likes/dislikes intersect.
> 
> Are there any pros/cons of the two approaches for this given query,
> or is there perhaps a more efficient way of storing this data?

I would probably do this with an explicit many to many relationship.
My first thought would be to use a boolean (true for like, false for
unlike, not a row in the table for unrated). On second thought I would
replace your integer-enum idea by using the integer for a real rating
for example from -5 to 5. While at first you might just map like/unlike
to 5/-5, for the future you could do rows of stars or rows of
thumbs-up/-downs.

Have fun,

Arnold

Attachment: signature.asc
Description: PGP signature

Reply via email to