问题描述
并非所有实体都填充了其所有属性。
我想创建一个统一的数据集,该数据集将基于所有实体之间匹配的对应值
我正在考虑使用graphdb,尤其是neo4j
但是,如果每个实体都是一个节点,那么我将不得不通过编程检查每个属性与所有其他实体中对应属性的相等性来创建每种关系。
我也考虑使用某种sql连接,但是在数据模型扩展时维护它似乎很困难。
哪种技术最适合?
解决方法
这是在neo4j中执行此操作的一种方法。 (Stackoverflow并不是询问做某事的“最佳”技术的正确位置,因为这往往是非常主观的。)
您可以创建唯一的URL
,Phone
,Person
和Account
节点,并将每个Account
连接到适当的URL
,Phone
和Person
节点。
例如,假设您的3个示例帐户与同一个人相关,则可以在数据库中表示该示例:
MERGE (pe:Person {name: 'Jane Doe'})
MERGE (ac_li:Account {type: 'li',id: 'xyz'})
MERGE (ac_fb:Account {type: 'fb',id: 'abc'})
MERGE (ac_si:Account {type: 'site',id: 'foo'})
MERGE (url_li:URL {type: 'li',url: 'http://example.net/xyz'})
MERGE (url_fb:URL {type: 'fb',url: 'http://example.com/abc'})
MERGE (url_si:URL {type: 'site',url: 'http://example.org/foo'})
MERGE (ph:Phone {number: '1234567890'})
MERGE (pe)-[:ACCOUNT]->(ac_li)
MERGE (pe)-[:ACCOUNT]->(ac_fb)
MERGE (pe)-[:ACCOUNT]->(ac_si)
MERGE (ac_li)-[:PHONE]->(ph)
MERGE (ac_fb)-[:URL]->(url_fb)
MERGE (ac_fb)-[:URL]->(url_si)
MERGE (ac_fb)-[:PHONE]->(ph)
MERGE (ac_si)-[:URL]->(url_li)
MERGE (ac_si)-[:URL]->(url_fb)
然后,如果要查找与特定URL相关的所有Account
和Person
组合,则可以执行以下操作:
MATCH (url:URL)<-[:URL]-(account)<-[:ACCOUNT]-(person)
WHERE url.url = 'http://example.com/abc'
RETURN account,person