灵活的对象关系
Flexible Object Relationships
我正在尝试为一组非常多样化的相互关联的对象开发数据模型。随着应用程序的成熟,支持的对象类型将显着增加。我想避免在添加新对象类型时必须修改 model/schema。
作为一个简单的例子,假设我从人物和建筑物的模型开始。一个建筑物可以有多个所有者;一个人可以拥有多栋建筑物;一个人可以住在房子里,在办公室里工作……未来的版本可能会增加汽车和公司。汽车可以有所有者,公司可以制造汽车,人可以为公司工作,等等。大多数关系是多对多的,有些是一对多的,很少是一对一的。
虽然 "owner"、"employer" 或 "manufacture" 等概念可以被视为 "building"、"corporation" 或 "car" 的属性对象,我不想重新定义数据模型来支持新的 属性 类型。
我目前的想法是将其建模为类似于图形,其中每条数据都是其自己的节点。节点对象将非常简单:
- 唯一标识符
- 姓名(人类代表)
- 节点类型
- 人际关系
扩展前面的例子,可能的节点类型是:
- 人
- 汽车
- 公司
- 建筑物
关系是:
- 节点A
- 节点 B
- 关系类型 - 使用、拥有、拥有、是等
我有几个问题:
- 这种方法有什么缺点吗?
- 是否有描述此问题的现有模式或模型?
- 有没有更好的方法?
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:知识的分类框架
表示。或许您也会对此感兴趣。
我正在尝试为一组非常多样化的相互关联的对象开发数据模型。随着应用程序的成熟,支持的对象类型将显着增加。我想避免在添加新对象类型时必须修改 model/schema。
作为一个简单的例子,假设我从人物和建筑物的模型开始。一个建筑物可以有多个所有者;一个人可以拥有多栋建筑物;一个人可以住在房子里,在办公室里工作……未来的版本可能会增加汽车和公司。汽车可以有所有者,公司可以制造汽车,人可以为公司工作,等等。大多数关系是多对多的,有些是一对多的,很少是一对一的。
虽然 "owner"、"employer" 或 "manufacture" 等概念可以被视为 "building"、"corporation" 或 "car" 的属性对象,我不想重新定义数据模型来支持新的 属性 类型。
我目前的想法是将其建模为类似于图形,其中每条数据都是其自己的节点。节点对象将非常简单:
- 唯一标识符
- 姓名(人类代表)
- 节点类型
- 人际关系
扩展前面的例子,可能的节点类型是:
- 人
- 汽车
- 公司
- 建筑物
关系是:
- 节点A
- 节点 B
- 关系类型 - 使用、拥有、拥有、是等
我有几个问题:
- 这种方法有什么缺点吗?
- 是否有描述此问题的现有模式或模型?
- 有没有更好的方法?
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:知识的分类框架 表示。或许您也会对此感兴趣。