灵活的对象关系

Flexible Object Relationships

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

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

虽然 "owner"、"employer" 或 "manufacture" 等概念可以被视为 "building"、"corporation" 或 "car" 的属性对象,我不想重新定义数据模型来支持新的 属性 类型。

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

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

关系是:

我有几个问题:

Is there an existing pattern or model that describes this?

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

Are there any drawbacks to this approach?

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

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

Are there better approaches?

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

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

I want to avoid having to modify the model/schema whenever new object types are added.

尝试在网络上搜索 "universal schema for knowledge representation"。关于世界的事实并不局限于像 "John Smith has a dog named Spot" 这样简单的原子观测。我们必须处理像 "Company A is not allowed to distribute product B in regions within 100km of point C after date D if that product contains ingredients E or F" 这样的事实。迄今为止,我们获得的最强大的知识表示是自然语言,据我所知,我们还没有其结构的简单模型。

我目前正在阅读 Ologs:知识的分类框架 表示。或许您也会对此感兴趣。