【发布时间】:2016-06-02 17:42:47
【问题描述】:
这是一个基本的新手级别的问题,不会很短。这是 Backendless 特有的。
我有许多我希望能够解决的场景,因为我正在处理一小组表,这些表都以某种形式相互关联,需要从各个方向进行探索。
一个基本的例子是 PersonTable 和 AddressTable。 PersonTable 包含人员列表,包括他们的姓、名等。AddressTable 包含地址及其各种属性,如 streetName、houseNumber 等。
假设我想在主导航中为用户提供两个不同的视图,并允许他们进一步下钻。
View1:单击“人员”,您会从 PersonTable 中获取人员列表。此列表显示在辅助导航窗口中。单击某个人将为您提供与该人关联的地址。
但是,我也希望能够反向执行此操作:
View2:单击“地址”,您会从地址表中获得地址列表。此列表显示在辅助导航窗口中。单击单个地址将为您提供与该地址关联的一个/多个人。
因此,从单向方法来看,会存在从 PeopleTable 到 AddressTable 的关系。这非常适合视图 1。一个查询将为二级导航提供数据,该查询的结果可以包括向下钻取所需的关系数据。
但是,如果我想支持视图 2,我将不得不根据关系的方向和我从哪里开始执行两个查询。
如果您将此扩展到具有更多表和字段的更大数据集,我的担忧可能会变得更加明显。因为我想在初始辅助导航项创建中实际提供来自关系父级的一些数据。因此,这意味着对该表进行初始查询以列出项目,并对每个单独的项目进行查询(从关系中的父项获取我需要的数据)以完成初始列表中显示的数据。 (然后单击一个项目将提供更多详细信息)。显然,这种关系可以颠倒过来,然后我会提取子数据而不是父数据,但是当我想从另一个方向(另一个视图)获取数据时,我又会遇到同样的情况。
TL;DR:我需要能够在几乎任何方向上遍历表并钻取数据,同时尽量减少任何给定情况所需的查询数量。这是需要大量关系的情况吗?
找到问题的根源:我的理解是,虽然 Backendless 确实支持它们,但通常不赞成双向关系(至少在 SQL 世界中)。
那么,实际上,最佳实践是什么?这仅仅是一个合乎逻辑的“在帮助您减少查询时创建关系”吗?
【问题讨论】:
标签: database table-relationships backendless