2017-06-29 63 views
1

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

作为一个简单的例子,假设我从一个人和建筑模型开始。建筑物可以拥有多个所有者;一个人可以拥有多个建筑物;一个人可以住在房子里,在办公室工作......未来的版本可能会增加汽车和公司。汽车可以拥有车主,公司可以制造汽车,人们可以为公司工作等。大多数关系将是多对多的,有些将是一对多的,很少有一对是一对一的。尽管像“所有者”,“雇主”或“制造”这样的概念可以被视为“建筑”,“公司”或“汽车”对象的属性,但我不想将数据模型重新定义为支持新的属性类型。

我目前的想法是模拟这个类似于一个图,其中每一块数据是它自己的节点。节点对象将是非常简单的:

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

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

  • 公司
  • 大厦

的关系应该是:

  • 节点A
  • 节点B
  • 关系类型 - 应用,拥有,已经是, etc

我有几个问题:

  • 这种方法有什么缺点吗?
  • 有没有描述这个的现有模式或模型?
  • 有没有更好的方法?

回答

1

是否存在描述此现象的模式或模型?

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

这种方法有什么缺点吗?

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

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

有没有更好的方法?

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

特别是,查看对象角色建模(http://www.orm.net,https://www.ormfoundation.org)。

我希望避免在添加新的对象类型时不得不修改模型/模式。

尝试通过网络搜索“知识表示的通用模式”。关于这个世界的事实并不局限于简单的原子观察,比如“约翰史密斯有一只名为Spot的狗”。我们必须处理这样的事实,例如“如果产品含有E或F成分,则公司A不得在日期D之后的C点100公里范围内分发产品B.迄今为止,我们所知道的最强大的知识表示形式是自然语言,就我所知,我们还没有一个简单的结构模型。我正在阅读Ologs: A Categorical Framework For Knowledge Representation。也许这也会引起你的兴趣。