Sql 通过属性相等来匹配多个实体的正确方法是什么?

Sql 通过属性相等来匹配多个实体的正确方法是什么?,sql,pandas,neo4j,datastax,graph-databases,Sql,Pandas,Neo4j,Datastax,Graph Databases,我有以下类型的多个实体和属性: Linkedin公司 名字 电话 脸谱网 facebook\u网址 名字 网站地址 电话 网站 linkedin\uURL facebook\u网址 电话 并非所有实体的所有属性都已填充 我想创建一个统一的数据集,它将基于所有实体之间匹配的对应值 我正在考虑使用graphdb,尤其是neo4j 但是如果每个实体都是一个节点,那么我必须通过编程检查每个属性与所有其他实体中相应属性的相等性来创建每个关系 我也考虑使用某种SQL连接,但是当数据模型

我有以下类型的多个实体和属性:

  • Linkedin公司
    • 名字
    • 电话
  • 脸谱网
    • facebook\u网址
    • 名字
    • 网站地址
    • 电话
  • 网站
    • linkedin\uURL
    • facebook\u网址
    • 电话
并非所有实体的所有属性都已填充

我想创建一个统一的数据集,它将基于所有实体之间匹配的对应值

我正在考虑使用graphdb,尤其是neo4j

但是如果每个实体都是一个节点,那么我必须通过编程检查每个属性与所有其他实体中相应属性的相等性来创建每个关系

我也考虑使用某种SQL连接,但是当数据模型变宽时,它看起来很难维护。 解决这个问题的写方法是什么


哪种技术最适合这一点?

在neo4j中,有一种方法可以做到这一点。(Stackoverflow不是询问做某事的“最佳”技术的合适地方,因为这往往是非常主观的。)

您可以创建唯一的
URL
Phone
Person
Account
节点,并将每个
帐户
连接到相应的
URL
Phone
Person
节点

例如,假设您的3个示例帐户与同一个人相关,下面是如何在DB中表示这些帐户:

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相关的所有
帐户
个人
组合,可以执行以下操作:

MATCH (url:URL)<-[:URL]-(account)<-[:ACCOUNT]-(person)
WHERE url.url = 'http://example.com/abc'
RETURN account, person

MATCH(url:url)感谢@cybersam的回答。您使用了将实体的每个“属性”提取到其自己的节点的方法。您正在为关系指定与节点相同的标签。为什么呢?这是neo4j的一种模式,还是neo4j在节点和关系上忽略了相同的标签?关系类型的选择似乎对我来说是正确的。你可以用任何对你有意义的名字。