2016-03-21 18 views
2

Firmamız, anketlere dayanan çok sayıda müşteri verisine sahiptir. Örneğin, bir kişinin spordan, televizyon şovundan, bazı gruplardan hoşlandığını, hamile olduğunu ve bazı yaşlarda olduğunu biliyor olabiliriz. Pazarlamacılar izlemek için ölçütler ekleyip kaldıracak. Grafik veri tabanları sizlere burada müşteri anket özelliklerini içerecektir soru 1, anket referans ile bir özellik verecek nesne modellemeGrafik veritabanında müşteri anketlerini nasıl modelleyebilirim?

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

gibi bir şey yapabilirsiniz, örneğin modelleme için çeşitli seçenekler sunuyoruz. Her zaman pazarlamacılar bir soru ve cevap ekleyerek müşteri şemasını güncellemeliyiz.

Biz de anketler onlar Yanıtım detayları ölçmek referans listesi olan bu

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

gibi modellik başladı. Bir graphdb benim expirience itibaren

cevap

3

[EDITED ]

Kullanım durumunuzu modellemek için kullanılan deyimsel bir yöntem.

Her anket sorusu için bir düğüm kullanabilir ve tüm bu düğümlere aynı etikete sahip olabilirsiniz, örneğin SurveyQuestion. Örneğin:

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

o Sorunun düğüme belirli türdeki (diyelim ki, ANSWERED) bir ilişkiye sahip olabilecek bir SurveyQuestion cevaplar her müşteri ve ilişkinin kişinin cevabı içerebilir. Örneğin: Bu yaklaşımla

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

, yeni bir anket sorusunu eklenen her bir Customer düğüm güncelleştirmek için gerek yoktur. Bir müşteri bir soruyu gerçekten cevaplandırdığında yalnızca ANSWERED bir ilişki oluşturmanız gerekir.

tüm anket soruları almak için: ANSWERED onları saklamadan önce LOWER kullanan tüm cevapları küçük harfe isteyebilirsiniz

MATCH (sq:SurveyQuestion) 
RETURN sq; 

bir soruya her cevap verdi müşteri elde etmek için (bu, küçük harf duyarlıdır ilişkiler):

:

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

tüm müşteri cevaplanan soruları ve her biri onun/onu bir yanıt için

1

(Neo4j ile ilgili ~ 1 yıl) içinde müşteri özelliklerinin çok seyrek listesi eklemek için deyimsel yolu nedir

. Veri depolama alanı olarak grafik veri tabanlarının en büyük yan ürünü, mevcut verilerinden karmaşık bir içgörü oluşturuyor (birleştirme tablosuna sahip sql veritabanlarının zayıf performansa sahip olduğu). Müşteri düğümündeki veya (: Müşteri) - [: CEVAPLARI] -> (: Servey) anketindeki tüm verileri saklamak, neo4j veritabanından size yarar sağlamaz. Ama sen neo4j'in “karanlık tarafları” oluyorsun :) Ben neo4j'in kötü olduğunu söylemiyorum ama bugünlerde sql kadar parlatılmamış. Böylece neo4j'nin avantajını elde etmek için, her kullanıcı cevabını anlamlı ise ayrı bir varlık olarak depolamaya çalışacağım. Gibi düğümler oluşturma: Spor,: TvShow. Ama yaşı saklamak istiyorum: Müşteri doğum tarihi olarak. Veya başka durumlarda da kullanmayı planlıyorsanız Takvim ağacını oluşturabilirsiniz. Böylece, doğum tarihini takvim ağacının belirli düğümüyle ilişki olarak kaydedebilirsiniz (: Gün veya: Ay veya Yıl e.t.c).

(c:Customer)-[r1:ANSWERS]->(s:Servey), (c)-[r2:WATCHES]->(tv:TvShow), (s)-[:SERVEY_REPLY]->(tv) gibi bir model kullanırım. Böylece, müşteri fikrini değiştirdiğinde ve şovları izlemeyi durdurduğunda, r1 ilişkisini siliyorum, ancak veriyi r2 olarak saklıyorum. Bu modele şu şekilde ekleyebilirsiniz: Takvim ve çok sayıda farklı personel, ancak ihtiyacınız olduğundan emin olun).

P.S. Bildiğim kadarıyla, veri tabanlarını modellemek için yüksek ücretli insanlar var :) Önerim olarak, emin değilseniz, grafik veritabanından yararlanıyorum, bunu üretimde kullanmayın :)