2016-03-30 3 views
0

Ich habe folgende Modelle:Speichern von Modellen und Beziehungen in einer Graph-Datenbank

Person (:age, :gender) 
Company (:name, address) 
Products (:price, :name) 

Eine Person kann mehrere Firmen besitzen und kann auch ein Kunde von mehreren Unternehmen sein. Ein Unternehmen kann mehrere Produkte herstellen, kann aber auch von anderen Unternehmen hergestellte Produkte erwerben.

Wie kann dies mit OrientDB und Neo4J dargestellt werden und wie kann ich solche Modelle in Rails abfragen/was wäre die beste Wahl in Bezug auf Edelsteine?

Beispielabfrage: Finden Sie alle Produkte zwischen einer bestimmten Preisspanne hergestellt von Unternehmen im Besitz von Personen zwischen 30 und 40 Jahren (vorausgesetzt Person hat ein Attribut: Alter), die meisten Personen zwischen 20 und 30 Jahren Alter als Kunden.

Hinweis: Ich habe noch nicht entschieden, ob ich OrientDB oder Neo4j für die Anwendung verwenden werde, oder vielleicht werde ich Neo4j für die Datenmengen verwenden, die von Open-Source-Teilen meiner Anwendung bearbeitet werden .......

Antwort

1

Eine Person kann mehrere Unternehmen besitzen und kann auch ein Kunde von mehrere Unternehmen sein. Ein Unternehmen kann mehrere Produkte herstellen, kann aber auch Produkte anderer Hersteller beziehen.

es zu modellieren Sie Labels und Beziehungen zwischen den Entitäten verwenden sollten:

In Ihrem Fall ist es wie

(p:Person)-[:OWNED_BY]->(c:Company), 
(p:Person)-[:IS_CUSTOMER]->(c:Company), 
(c:Company)-[:MANUFACTURED_BY]->(pr:Product), 
(c:Company)-[:USES]->(pr:Product) 

sein könnte und Sie darin wie

Match (p:Products) where p.price < 2000 and p.price > 1000 with p 
Match (p)<-[MANUFACTURED_BY]-(c:Company)<-[:OWNED_BY]-(owner:Person) 
where owner.age < 40 and owner.age > 30 with p, c, owner 
Match (c)<-[:IS_CUSTOMER]-(employee:Person) 
where employee.age < 30 and employee.age > 20 
with p, c, count(employee) as midYeareEmployee ... 
+0

Prost Evgen, das ist großartig! –

3

abfragen Richten Sie Ihr Modell wie folgt aus:

enter image description here

es zu schaffen ist hier die Befehle auszuführen:

create class Person extends V 
create property Person.age integer 
create property Person.gender string 

create class Company extends V 
create property Company.name string 
create property Company.address string 

create class Products extends V 
create property Products.price integer 
create property Products.name string 

create class own extends E 
create class costumer extends E 
create class manufacture extends E 
create class purchase extends E 
create class manufactured extends E 

insert into Person(age,gender) values (20,"M") 
insert into Company(name,address) values ("company_01","address_01"),("company_02","address_02"),("company_03","address_03"),("company_04","address_04") 
insert into Products(price,name) values (200,"product_01"),(750,"product_02"),(90,"product_03"),(368,"product_04"),(112,"product_05") 

create edge own from #12:0 to #13:0 
create edge own from #12:0 to #13:1 

create edge customer from #13:2 to #12:0 
create edge customer from #13:3 to #12:0 

create edge manufacture from #13:2 to #14:0 
create edge manufacture from #13:2 to #14:1 
create edge manufacture from #13:2 to #14:2 

create edge purchase from #13:2 to #14:4 

create edge manufacture from #13:0 to #14:4 
create edge manufacture from #13:0 to #14:0