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
signature.asc
Description: PGP signature