【问题标题】:Flexible Object Relationships灵活的对象关系
【发布时间】:2017-12-03 14:22:23
【问题描述】:

我正在尝试为一组非常多样化的互连对象开发数据模型。随着应用程序的成熟,支持的对象类型将显着增加。我想避免在添加新对象类型时修改模型/模式。

举个简单的例子,假设我从人和建筑物的模型开始。一个建筑物可以有多个所有者;一个人可以拥有多个建筑物;一个人可以住在房子里,在办公室工作……未来的版本可能会增加汽车和公司。汽车可以有所有者,公司可以制造汽车,人们可以为公司工作等。大多数关系是多对多的,有些是一对多的,很少是一对一的。

虽然“所有者”、“雇主”或“制造商”等概念可以被视为“建筑物”、“公司”或“汽车”对象的属性,但我不想重新定义数据模型以支持一种新的属性类型。

我目前的想法是将其建模为类似于图表,其中每条数据都是它自己的节点。节点对象会很简单:

  • 唯一标识符
  • 姓名(人类代表)
  • 节点类型
  • 关系

扩展前面的例子,可能的节点类型是:

  • 汽车
  • 公司
  • 建筑

关系是:

  • 节点 A
  • 节点 B
  • 关系类型 - 使用、拥有、拥有、是等

我有几个问题:

  • 这种方法有什么缺点吗?
  • 是否存在描述这一点的现有模式或模型?
  • 有更好的方法吗?

【问题讨论】:

    标签: schema data-modeling object-relationships


    【解决方案1】:

    是否存在描述这一点的现有模式或模型?

    您所描述的听起来像是网络数据模型,也称为对象或面向对象的数据模型。

    这种方法有什么缺点吗?

    您的模型不支持三元和更高的关系。它还在节点之间创建固定的访问路径,支持节点到节点的导航,但会使许多查询变得复杂。我也没有看到任何对子类型的支持。

    如果没有复合决定因素,某些情况将难以建模或查询。你不支持(Object, Language) -> Name(或(Company, Role) -> Person等)这样的谓词。一种方法是创建特殊的关系类型,但您的模型将是不对称的并且查询起来更加复杂。

    有更好的方法吗?

    数据的关系模型处理对象类型/域之间的 n 元关系,并允许表示复杂的谓词。 N-ary 关系意味着它支持对象超图,而用户定义的连接意味着 ad-hoc 访问路径。支持复合行列式,并且大多数实现都支持各种完整性约束。

    尤其是对象角色建模(http://www.orm.nethttps://www.ormfoundation.org)。

    我想避免在添加新对象类型时修改模型/模式。

    尝试在网络上搜索“知识表示的通用架构”。关于世界的事实不仅限于简单的原子观察,例如“约翰史密斯有一只名叫 Spot 的狗”。我们必须处理诸如“如果该产品含有成分E或F,则A公司不得在D日期之后C点100公里范围内分销产品B”之类的事实。迄今为止,我们获得的最强大的知识表示是自然语言,据我所知,我们还没有一个简单的结构模型。

    我目前正在阅读Ologs: A Categorical Framework For Knowledge Representation。也许您也会对此感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 2011-04-12
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多