1

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

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

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

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

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

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

  • 公司
  • 建造

关系将是:

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

我有几个问题:

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

1 回答 1

1

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

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

这种方法有什么缺点吗?

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

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

有更好的方法吗?

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

尤其是对象角色建模(http://www.orm.net,https: //www.ormfoundation.org

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

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

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

于 2017-06-30T07:37:22.680 回答