Not quite. What I am saying is that it is best to define the questions you want to answer before picking a solution and building a model.
Look at Josef scenarios, a tagging table with fields [user_id][tag_id][bookmark_id][created_at] gives you tag activity streams and is not complex at all. I found a hybrid solution worked best for me. 90% of my questions were answered with a table and the other 10% with a simple graph model. Be pragmatic and don't limit yourself to having to choose. On Thu, Jun 9, 2011 at 1:49 PM, Aseem Kishore <aseem.kish...@gmail.com> wrote: > Max, just to be clear, are you basically saying that this problem is best > solved by a relational db instead of a graph db? > > Thanks, > Aseem > > On Wed, Jun 8, 2011 at 11:21 PM, Max De Marzi Jr. <maxdema...@gmail.com>wrote: > >> Aseem, >> >> Which users tagged what? SELECT DISTINCT user_id FROM USER_TAGS WHERE >> bookmark_id = x >> Which bookmarks did a user tag? SELECT DISTINCT bookmark_id FROM >> USER_TAGS WHERE user_id = x >> Which bookmarks were tagged with x? SELECT DISTINCT bookmark_id FROM >> USER_TAGS WHERE tag_id = x >> >> What question are you trying to answer that you can't get from a >> relational table? >> >> I think it's better to make your model depending on the questions you >> are trying to answer. >> >> I have a similar model (users tagging users) and I needed to answer: >> Which users have been tagged by me or my network 6 degrees out? >> What is the tagged distance a user is away from another user? >> >> Turns out, all I needed was User nodes with Tagged links. User -> >> tagged -> User -> tagged -> User >> Everything else I get from the relational db. >> >> When I start to care about which users have been tagged for by me or >> my network 6 degrees out for this KEYWORD, then I'll create a more >> complex model: >> User -> UserKeyword -> tagged -> UserKeyword -> User >> Keyword ---/ Keyword ---/ >> >> Regards, >> Max >> >> On Thu, Jun 9, 2011 at 12:33 AM, Aseem Kishore <aseem.kish...@gmail.com> >> wrote: >> > Also forgot to add: now if you want to show all links (globally) for a >> given >> > tag, how do you do that? Are you indexing each tag-link (as a key-value >> > pair) every time a tag is added? Removing from the index every time a tag >> is >> > deleted? >> > >> > Thanks, >> > >> > Aseem >> > >> > On Wed, Jun 8, 2011 at 10:31 PM, Aseem Kishore <aseem.kish...@gmail.com >> >wrote: >> > >> >> I forgot to state this, but a key requirement of tags of course is that >> you >> >> can apply multiple of them to the same link. >> >> >> >> Would you still go that route then? >> >> >> >> If you want to delete a link from your bookmarks, it's a matter then of >> >> deleting each tag edge? >> >> >> >> Aseem >> >> >> >> >> >> On Wed, Jun 8, 2011 at 10:28 PM, Siddhartha Kasivajhula < >> >> countvajh...@gmail.com> wrote: >> >> >> >>> Couldn't you use edges for "tags" instead of nodes? >> >>> >> >>> user1 --tag--> link1 >> >>> user2 --tag--> link1 >> >>> user1 --tag--> link2 >> >>> >> >>> >> >>> On Wed, Jun 8, 2011 at 10:23 PM, Aseem Kishore < >> aseem.kish...@gmail.com >> >>> >wrote: >> >>> >> >>> > Hi guys, >> >>> > >> >>> > We're thinking about implementing tags in our system, and we're >> >>> pondering a >> >>> > few ideas for how we'd go about it, and none of them seem perfect. >> I'd >> >>> like >> >>> > to ask you guys: how would you design an analogous case: Del.icio.us >> ? >> >>> > >> >>> > At the core, *users bookmark links*, so it makes sense to have >> "users" >> >>> and >> >>> > "links" as types of nodes, and "bookmark" as the type of edge that >> >>> connects >> >>> > them. Now, you can see all the links a given user has bookmarked, and >> >>> all >> >>> > the users that have bookmarked a given link. >> >>> > >> >>> > Now users can also *tag* links, of course, but the most interesting >> >>> > requirement is that, when I'm looking at *my links*, I only want to >> see >> >>> *my >> >>> > tags*. Thus, tags can't be tied just to links; they have to be tied >> to >> >>> > users >> >>> > too. But most importantly, you have to maintain *which* user and >> *which* >> >>> > link *each* tag is for. >> >>> > >> >>> > Thus, it seems most intuitive to us if we could have "tags" be nodes >> >>> > that *point >> >>> > to the "bookmark" edges*. Unfortunately, that's a hypergraph, which >> >>> Neo4j >> >>> > doesn't support. >> >>> > >> >>> > We could use intermediate nodes for bookmarks maybe, but that sort of >> >>> sucks >> >>> > to lose the intuitiveness of the graph and introduce redundant edges, >> >>> more >> >>> > complexity which makes consistency harder, etc. >> >>> > >> >>> > We have some other ideas, but I'm curious if any of you guys have >> >>> thought >> >>> > about this already or have done it, or if you guys have thoughts. >> Thanks >> >>> in >> >>> > advance! >> >>> > >> >>> > Aseem >> >>> > _______________________________________________ >> >>> > Neo4j mailing list >> >>> > User@lists.neo4j.org >> >>> > https://lists.neo4j.org/mailman/listinfo/user >> >>> > >> >>> _______________________________________________ >> >>> Neo4j mailing list >> >>> User@lists.neo4j.org >> >>> https://lists.neo4j.org/mailman/listinfo/user >> >>> >> >> >> >> >> > _______________________________________________ >> > Neo4j mailing list >> > User@lists.neo4j.org >> > https://lists.neo4j.org/mailman/listinfo/user >> > >> _______________________________________________ >> Neo4j mailing list >> User@lists.neo4j.org >> https://lists.neo4j.org/mailman/listinfo/user >> > _______________________________________________ > Neo4j mailing list > User@lists.neo4j.org > https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user