实体软引用

作者: Mario David
4.5
0
  • 最新版本 0.7.0
  • 更新时间 58 months
  • 支持版本 v6.8-7.2
  • 许可 Apache 2.0
  • 资源
  • 标签
    系统
  • 组件坐标
    复制

Overview

该应用程序组件可以在没有数据库外键的情况下引用实体。

什么是软引用?

软引用是数据模型中的一种引用,不在数据库创建外键,也不会为其创建引用完整性约束。相反,只是对另一个实体的“弱”或“软”引用。

示例:Customer - Order (客户 - 订单)

考虑Customer <>--> Order的例子。一个用户可以有多个订单。在CUBA中,可以使用组合关系来设计模型。也就是说,在Order表中将有一个"customer_id"字段,在Order表中存储客户的主键。对于每个Order,都有关联的Customer。

在软引用的例子中,却有不同。虽然在Order表中仍有"customer_id"列,但是却没有外键关联。相反会在软引用的列中存储这样的字符串:example$Customer-2fdc4906-fa89-11e7-8c3f-9a214cf093ae,记录了引用的实体及其UUID。

外键很有用,为什么有的人不需要呢?

是的。对于几乎所有的情况来说,没有必要使用软引用。因为其缺少引用完备性的功能,所以有很多缺点。但是为什么我们还是需要呢?这里有个例子:

示例:Customer - Order - Comment(客户 - 订单 - 备注)

假设我们需要有一列叫做"Comment"。可以为很多不同的实体创建备注。可以有对客户的备注,对订单的备注,对产品的备注,等等。通常在类似Java的语言中处理这种情况的方法就是创建一个接口,Commentable。用这个接口来标记所有需要备注的类。然后Comment类会有Commentable对象的引用。这就是多态的意思。

但是在关系型数据库中没有类似的概念。因为当需要创建外键时,必须指定外键关联的特定表,而不能指向某个通用表。但是,备注表中需要指向不同表的键值。

对于横切的关联功能,可以用软引用作为解决方案。