因此,这是一个场景,我有3个信标(BEACON_TABLE)和一些产品(PRODUCT_TTABLE),其中每个产品都与其中一个信标相关联(一对多关系)。数据模型可以很好地使用SQL,其中,我只是在PRODUCT_TABLE中使用外键来引用beacon_TABLE的特定信标id。我在实体存储(全栈/无包装器)中完成了这一操作,在那里我向PRODUCT_TABLE添加了一个属性,并将Reference-typed设置为BEACON_TABLE。当我在BEACON_TABLE资源上运行GET方法时,它只显示信标数据,但我期望所有与信标相关的产品都有响应。JSON响应类似于以下内容:
[
{"beacon_id":"beacon1", "products": [
{"id":"prod1","price":"1.50"},
{"id":"prod2","price":"2.50"}
]
},
{"beacon_id":"beacon2", "products": [
{"id":"prod30","price":"3.95"},
{"id":"prod40","price":"5.15"}
]
}
]
我如何在实体商店中实现它?我浏览了用户指南中的用户评论场景,但我并不清楚。我们将非常感谢您的帮助。
APISpark目前不支持开箱即用的此功能。我的意思是在其他实体中定义具有依赖关系的元素。我猜你来自关系世界;-)
我向您建议的方法(以及APISpark推荐的方法)是利用APISpark的特性"复合字段"来取消实体存储的规范化。这种方法是noSQL世界中的常见模式(APISpark默认基于noSQL数据库),因为没有类似SQL的联接支持。
使用这种方法具有性能优势,因为只需要向数据库发出一个请求,而不需要N+1(实际上不止一个)。
以下是针对您的用例的方法:
- 实体
Beacon
- 基元域
beacon_id
- 包含子字段的复合字段
products
(list=true): - 基元域
id
- 基元域
price
- 基元域
- 实体
Product
- 基元字段
id
- 基元域
price
- 基元字段
为实体存储添加字段时,可以在下拉列表"类型"中指定类型composite
。之后,您将能够直接在此字段上创建子字段(字段名称附近的图标+
)。
主要的缺点是,当您想要更新产品时,需要进行两次更新。我想这种情况并不常见,所以这种方法是可以接受的。
如果不清楚,请随时问我更多问题!
希望它能帮助你,Thierry