Database design 如何对generic Schema.org存储进行建模

Database design 如何对generic Schema.org存储进行建模,database-design,mongodb,cassandra,multiple-inheritance,schema.org,Database Design,Mongodb,Cassandra,Multiple Inheritance,Schema.org,我正在寻找围绕整个schema.org构建应用程序模型的最佳方法。org层次结构现在包含大约500种不同的类型,可用于标记网站上的微数据: 目标是围绕所有这些内容构建一个通用系统,而不使用默认SQL数据库对500多个不同的表进行建模 作为一个开始的例子,JobPost的建模似乎非常简单,因为它只有一些字段和两个指向Organization和Place对象的链接:请参阅 您建议哪种数据库系统(SQL、MongoDB、Cassandra、neo4J、Sesame等)对此类数据建模?甚至还有一些特殊的

我正在寻找围绕整个schema.org构建应用程序模型的最佳方法。org层次结构现在包含大约500种不同的类型,可用于标记网站上的微数据:

目标是围绕所有这些内容构建一个通用系统,而不使用默认SQL数据库对500多个不同的表进行建模

作为一个开始的例子,JobPost的建模似乎非常简单,因为它只有一些字段和两个指向Organization和Place对象的链接:请参阅

您建议哪种数据库系统(SQL、MongoDB、Cassandra、neo4J、Sesame等)对此类数据建模?甚至还有一些特殊的图形或RDF数据库,这可能是另一种选择

奖金问题: 另一个让我感到震惊的问题是,一些对象基于多重继承,例如,它是一个LocalBusiness组织,但也是一个地点,因此它有来自多个不同父级的字段

因此,我正在寻找一个具有以下功能的系统:

  • 变量列,因为我不想使用SQL-DDL对这些无数属性建模
  • 多重继承或类似的东西(Mixins)
  • 记录之间的有用链接(如指向组织及其所属位置的职务公告点)
  • 简单查询(例如,获取给定组织的所有职位公告)

请告诉我什么样的信息有助于找到更好的答案。

我认为MongoDB非常适合,因为它的文档更容易表示各个模式。(解决了变量列问题)

要解决链接问题,只存储引用是有意义的。例如,在JobPosting中,您可能希望存储
组织ID
位置ID
,因为它们是相当复杂的文档。这也使得查询某个组织的工单变得微不足道

注意有时候,嵌入可能更合适,但这在很大程度上取决于文档的更新方式。特别是,许多对象可能引用相同的地址,因此地址的更改应该反映在所有地方。有时,情况正好相反。这是一个只有你才能回答的关键问题。这取决于系统的使用方式

在任何情况下,链接意味着单个查找可能必须遍历引用树。同样,这在很大程度上取决于用例:

假设您想显示一个职位公告。现在,您可以显示属性列表,对于“Organization”,您打印的所有内容都是带有链接的“ACME,Inc.”。该链接会将您发送到“ACME,Inc.”的详细信息页面。在这种情况下,您的查询非常简单。您需要做的唯一一件事是将组织名称复制到JobPosting(反规范化),以便更容易显示

另一方面,如果您希望就地显示所有内容,则必须执行更多查询并在代码中构建域模型对象。这不是什么大问题,但在循环引用等情况下需要额外小心

我想最好的方法是使用各自最具体的类型作为集合名称(因此ContactPoint最终出现在ContactPoint集合中,PostalAddress集合中的PostalAddress,等等)

剩下的唯一问题是多重继承或混合。我以前没有使用过ruby,但我想mongodb ruby驱动程序支持mixin


您仍然需要处理索引等问题,但这在很大程度上取决于用例。您可能想为大多数外键编制索引,但额外的索引需要手动维护。

您想使用哪种编程语言?将有多个使用ruby on Rails构建的前端感谢您的输入,我将更深入地了解MongoDB的功能,尤其是链接功能。欢迎您。关于链接的官方文档可能会让您开始: