2014-06-16 7 views
0

자격 규칙을위한 그래프 데이터베이스를 설계하고 있습니다. 일부 자격 규칙에서는 제품 C에 대한 자격을 얻기 위해 사용자가 2 개의 특정 제품 (제품 A 및 제품 B)을 선택해야합니다.그래프 데이터베이스 에지에 시작 노드가 여러 개있을 수 있습니까?

시작 노드 2 개로 그래프 가장자리를 만들 수 있습니까?

나는 이것이 그래프 db의 근본적인 구성 요소 인 인접리스트를 깨뜨릴 것이라고 생각한다. 그러나 이것이 가능하다면, 그것은 내 응용에 매우 강력 할 것이다.

업데이트 6/16

보다 구체적으로는, 내가이 개 시작 노드와 감독 가장자리를 만들기 위해 찾고 있어요, 1 노드를 종료. 그래서, biz 규칙의 용어로 : If Node = A AND Node = B 그 다음 Node = C. 실제 관계는 다음과 같습니다. 고객이 제품 A와 제품 B를 구매하면 고객이 제품 C를받을 자격이 있습니다.

답변

0

예 네오즈에서는 여러 개의 시작 노드가있을 수 있지만 다른 그래프 db에 대해서는 확실하지 않습니다.

START a=node(0), b=node(1) 
RETURN a,b 

자세한 내용은 http://docs.neo4j.org/chunked/stable/query-start.html을 참조하십시오. Neo4j 2.0 시작 노드에서 시작하는 것은 선택 사항입니다. Cypher는 label 및 where 절을 기반으로 쿼리의 시작 지점을 추측하고 시도합니다.

내가 업데이트 된 질문에 따라 대답을 편집 한

편집. 필요한 것은 hypergraph입니다. Wes Freeman이 언급 한 것처럼 하이퍼 그래프 Neo4j를 모델링하려면 다른 두 노드와 세 번째 노드를 연결하는 중간 노드를 만들어야합니다. 시나리오에서 사용자는 (:User {Id: 1})-[:PURCHASED]->(:Product {Name:A})과 같은 두 제품 (A와 B)과 PURCHASED 관계를 갖게됩니다. 그런 다음 ProductQualifier와 같은 중개 노드를 만들어야합니다 (나는 물건 명명에 매우 나쁩니다). (:User {Id:1})-[:QUALIFIES]->(:ProductQualifier {Id:1})과 같은 사용자와의 관계가 있습니다. [: HAS] - - (: ProductQualifier (: 제품 {이름 'B'}) < 제품 규정은 3 개 관계, 각각 제품 A와 B 두 가지 제품 C에 세번째

있을 것이다 {{ID : 1}) - : : HAS] -> (제품 : {A :})

(ProductQualifier {Id : 1} - [: ELIGIBLE] '}) 이것은한다고

당신이 원하는 일을합니다. 당신이 취할 수

두 번째 방법은 suppo이 본질적으로 데이터베이스를 사용하다 rt hypergraphs, Hypergraphdb과 같은 것, 따라서 여분의 노드를 만드는 부담을 버린다. 나는 꽤 오랜 시간 동안 그것을 시험해보고 싶었지만 그것을 사용할 어떤 기회도 없었으므로 API 나 한계에 관해 많은 것을 알지 못했다. 그러나 꽤 잘 알려진 그래프 데이터베이스이다.

참고 : 언급 한대로 나는 이름을 짓는 것에 매우 나쁩니다. 레이블 이름을 비즈니스 모델에 맞게 변경해야합니다.

+0

나는이 그가 요구되는 매우 것입니다 생각하지 않습니다

다음은 예입니다. 그는 엣지에 관한 것이지 쿼리에 관한 것이 아닙니다. –

+0

@WesFreeman 혼란 스러웠지만 슬프게도 나는 그의 질문에 대해 논평하고 명확한 명성을 얻지 못했습니다. 나는 "시작 노드가 2 개인 그래프 에지를 만들기 위해"이해할 수있는 최선의 방법에 대해 대답했다. 나는 그가 두 개의 노드를 찾고 그들 사이에 가장자리를 만들고 싶어한다고 생각했다. 해명 해줘서 고마워. –

+0

네, 더 구체적으로 (내가 질문을 업데이 트하겠습니다) 나는 2 개의 시작 노드를 가진 지향 에지를 찾고 있습니다. 즉 : 노드 A와 노드 B 인 경우 노드 C. –