2016-03-21 4 views
2

当社にはアンケートに基づく多くの顧客データがあります。たとえば、スポーツ、テレビ番組、バンド、妊娠していて、ある年齢の人がいることがわかります。マーケティング担当者は、追跡する基準を追加したり削除したりします。グラフデータベースは、我々はここで、我々は顧客にアンケートのプロパティが含まれます質問1を、調査を参照してプロパティを与えるオブジェクトモデリンググラフデータベースで顧客アンケートをモデル化するにはどうすればよいですか?

Customer.survey_question1.question = "What tv show do you like" 
Customer.survey_question1.answer = "Sesame street" 

ような何かを行うことができ、たとえば、モデリングのためのさまざまなオプションを提供します。マーケティング担当者が質問を追加するたびに、顧客スキーマを更新する必要があります。

我々はまた、調査は、彼らは答えてきたオブジェクトを調査するために参照のリストである。この

Customer.surveys = [list of references to other objects] 

ようにそれをモデル化することができます。

(のNeo4jと〜1年程度)私のexpirienceからgraphdb

答えて

3

[EDITED ]

ここでは、ユースケースをモデル化するための慣用方法です。

アンケートの質問ごとにノードを使用して、すべてのノードに同じラベル、たとえばSurveyQuestionを割り当てることができます。たとえば:SurveyQuestionに答える

(sq:SurveyQuestion {id: 222, question: "What tv show do you like?"}) 

すべての顧客には、その質問のノードに特定のタイプ(たとえば、ANSWERED)の関係を持つことができ、そしてその関係は、人の答えを含めることができます。例えば:この方法で

(:Customer {id:123})-[:ANSWERED {answer: "The Voice"}]->(sq) 

、あなたは新しい調査の質問を追加するたびにCustomerノードを更新する必要はありません。顧客が実際に質問に答えるたびに、ANSWEREDの関係を作成するだけで済みます。すべての調査の質問を取得するには

MATCH (sq:SurveyQuestion) 
RETURN sq; 

の質問にそれぞれ答えを与えた顧客を取得するには(これは大文字と小文字が区別されるので、あなたはANSWEREDでそれらを格納する前にLOWERを使用して、すべての答えを小文字にしたいこと関係):

MATCH (sq:SurveyQuestion {id: 222})<-[a:ANSWERED]-(c:Customer) 
RETURN sq, a.answer AS answer, COLLECT(c); 

それぞれに、すべての顧客が答えた質問、そして彼/彼女の答えを得るために:

MATCH (sq:SurveyQuestion)<-[a:ANSWERED]-(c:Customer {id: 123}) 
RETURN c, a.answer AS answer, sq; 
1

に顧客の性質の非常にまばらなリストを追加するための慣用的な方法は何ですか。グラフ・データベースのデータ・ストレージとしての最大の利点は、既存のデータ(結合表を持つSQLデータベースのパフォーマンスが低い)から複雑な見識を生成することです。 顧客ノードまたは(:Customer) - [:ANSWERS] - >(:Servey)にサーベイから取得したすべてのデータを保存すると、neo4jデータベースのメリットはありません。しかし、あなたはneo4jのいくつかの "暗い側面"を得る:)私はneo4jが悪いと言っているわけではないが、今日はそれほどSQLとして磨かれていない。したがって、neo4jのアドバンテージを得るためには、意味があるならば、すべてのユーザーの回答を別個のエンティティとして保存しようと思います。スポーツ、:TvShowのようなノードを作成する。しかし、私は誕生日として顧客に保存したいと思っています。また、カレンダーツリーを他の場合にも使用する予定の場合は、カレンダーツリーを生成する可能性があります。したがって、誕生日をカレンダーツリーの特定のノード(:Dayまたは:MonthまたはYear e.t.c)との関係として保存することができます。

(c:Customer)-[r1:ANSWERS]->(s:Servey), (c)-[r2:WATCHES]->(tv:TvShow), (s)-[:SERVEY_REPLY]->(tv)のようなモデルを使用します。だから、顧客が心を変えてショーを見るのを止めると、私は関係r1を削除しますが、r2を保存したままデータを失うことはありません。このモデルの関係には、カレンダーや多くの異なるスタッフが追加できますが、必要があることを確認してください。

P.S.私の知る限り、データベースをモデル化するために高額の人がいます:)あなたが確信が持てない場合は、グラフデータベースからのメリットを得て、生産には使用しないでください。

関連する問題