2014-06-16 4 views
0

Je suis en train de concevoir une base de données graphique pour les règles d'éligibilité. Certaines règles d'éligibilité exigent qu'un utilisateur sélectionne 2 produits particuliers (produit A et produit B) pour bénéficier du produit C.Un bord de base de données graphique peut-il comporter plusieurs nœuds de départ?

Est-il possible de créer un tronçon de graphique avec 2 nœuds de départ?

Je pense que cela casserait ce que je pense être le bloc de construction fondamental d'un graphe db - sa liste d'adjacence. Mais si c'était possible, ce serait très puissant pour mon application.

Mise à jour 6/16

Plus précisément, je cherche à créer un bord dirigé avec 2 nœuds de départ et 1 nœud de fin. Donc, en termes de règles biz: IF Node = A ET Node = B THEN Node = C. La relation du monde réel est la suivante: Si le client achète le produit A et le produit B, le client se qualifie pour le produit C.

Répondre

0

Oui, vous pouvez avoir plusieurs nœuds de départ dans Neo4j, pas sûr de l'autre graphique DB. Vous devez vous référer à http://docs.neo4j.org/chunked/stable/query-start.html pour plus de détails. À partir de Neo4j 2.0, le noeud de démarrage est optionnel, Cypher essayera de déduire les points de départ de votre requête en fonction de la clause label et where.

Modifier

J'ai modifié la réponse en fonction de la question mise à jour. Ce dont vous avez besoin est un hypergraph. Comme Wes Freeman l'a mentionné, pour modéliser un hypergraphe Neo4j, vous devrez créer un nœud intermédiaire qui connecte vos deux autres nœuds et le troisième nœud. Dans votre scénario, un utilisateur aura une relation ACHETÉ avec les deux produits (A et B) un peu comme (:User {Id: 1})-[:PURCHASED]->(:Product {Name:A}). Ensuite, vous devrez créer un noeud intermédiaire comme ProductQualifier (je suis très mauvais à nommer les choses) ayant une relation de l'utilisateur comme (:User {Id:1})-[:QUALIFIES]->(:ProductQualifier {Id:1}). Le qualificatif de produit aura alors 3 relations, deux au produit A et B, respectivement, et un tiers au produit C,

(: Produit {Nom: 'B'}) < - [: HAS] - (: ProductQualifier {Id: 1}) - [: HAS] -> (: Produit {Nom: 'A'})

(ProductQualifier {Id: 1} - [: ELIGIBLE] -> (: Produit {Nom: 'C' « })

Cela devrait faire ce que vous voulez.

une seconde approche que vous pouvez utiliser est une base de données intrinsèquement suppo rts hypergraphes, quelque chose comme Hypergraphdb, rejetant ainsi le fardeau de la création de noeud supplémentaire. Je n'ai pas eu l'occasion de l'utiliser même si je voulais l'essayer pendant un certain temps, donc je ne connais pas beaucoup de détails sur ses API ou ses limitations, cependant c'est une base de données graphique assez bien connue.

Note: Comme mentionné, je suis très mauvais à nommer les choses. Vous devriez probablement changer les noms d'étiquettes pour les adapter à votre modèle d'affaires.

+0

Je ne pense pas que ce soit tout à fait ce qu'il demande. Il parle de bords, pas de requêtes. –

+0

@WesFreeman J'étais confus aussi mais malheureusement je n'ai pas assez de réputation pour commenter et clarifier sur sa question. J'ai répondu au mieux que j'ai compris par "créer un bord de graphique avec 2 nœuds de départ". J'ai supposé qu'il veut trouver deux nœuds et créer un bord entre eux. Merci pour la clarification. –

+0

Oui, pour être plus précis (je mettrai à jour la question) Je suis à la recherche d'un bord orienté qui a 2 nœuds de départ. En d'autres termes: IF Node A et Node B, puis Node C. –

Questions connexes