灵活的对象关系

时间:2017-06-29 18:38:09

标签: schema data-modeling object-relationships

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

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

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

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

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

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

  • 汽车
  • 公司
  • 建筑

关系将是:

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

我有几个问题:

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

1 个答案:

答案 0 :(得分:1)

  

是否存在描述此内容的现有模式或模型?

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

  

这种方法有什么缺点吗?

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

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

  

有更好的方法吗?

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

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

  

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

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

我正在阅读Ologs: A Categorical Framework For Knowledge Representation。也许这对你也很感兴趣。