在Service Studio中,实体不仅包含业务实体的逻辑定义,还包含其与其他实体的关系。
通过定义单个引用属性(在数据库术语中也称为“外键”)来创建关系。其数据类型是<Entity> Identifier
,对应于另一个实体的Identifier
的类型。引用属性显示不同的图标(取决于关系的类型),这在实体图中可见。
关系类型包括:
一对一;
一对多;
多对对;
一对一关系
两个实体之间的一对一关系表示实体A中的一个记录对应于实体B中的一个记录,而实体B中的一个记录在实体A中只有一个相关记录。
在这种情况下,引用属性可以在实体A也可以在实体B中。要确定哪个实体包含引用属性,您必须考虑关系的可选性。当关系的双方都是强制性的或可选的时,您必须决定应该添加关系的实体,考虑哪个实体共享类型。
现在了解如何创建一对一的关系。
示例
假设在您的业务逻辑中,您拥有以下实体:
Contact
ContactPhoto
ContactPhoto
始终属于 Contact
。 Contact
可以关联一个ContactPhoto
。这会帮助你定义 Contact
实体。
要实现此关系,ContactPhoto
的主键必须是 Contact
主键的引用属性:
一对多关系
两个实体之间的一对多关系表示实体A中的一个记录对应于实体B中的多个记录,但实体B中的一个记录在实体A中只有一个相关记录。
在这种情况下,引用属性必须位于关系的“多的那边”,即实体B中。
现在我们来了解如何创建一对多关系。
示例
假设在业务逻辑中,您拥有以下实体:
Company
Contact
Company
有一个或多个 Contact
。 Contact
属于Company
。
要实现此关系,引用属性必须位于实体Contact
中:
多对多关系
两个实体之间的多对多关系表示实体A中的一个记录对应于实体B中的多个记录,而实体B中的记录可以在实体A中具有多个关联记录。在这种情况下,您必须创建第三个具有至少两个实体A和实体B的参考属性的实体。实际上,多对多关系是与该第三实体的两个一对多关系。
现在我们来了解如何创建多对多关系。
示例
假设,在业务逻辑中您拥有以下实体:
Company
Contact
Contact
可以从Company
移出。反过来,Company
可以拥有多个Contact
。
要实现此关系,必须创建第三个实体:CompanyContact
,至少具有以下属性:
Id
CompanyId
ContactId
引用完整性
在实体A和实体B之间创建关系时,必须指定要在模块中应用的引用完整性机制,即如果删除实体A中的相应记录,则必须在实体B中发生什么。在OutSystems中,此行为由引用属性的“删除规则”属性定义。
关系索引
定义引用属性后,将自动创建索引以提高模块的性能。调用此索引:
AutoIndex_<reference attribute name>
并涵盖实现关系的引用属性。您不应该删除此索引。如果这样做,Service Studio会显示警告,通知您此操作可能对性能产生的影响。