【问题标题】:Should I use link/backlinks provided with ObjectBox or 4 flat files to have many-to-many relationship?我应该使用 ObjectBox 或 4 个平面文件提供的链接/反向链接来建立多对多关系吗?
【发布时间】:2021-07-20 13:28:23
【问题描述】:

我已经阅读了关于多对多关系的对象框文档 https://docs.objectbox.io/relations

还有这个在 noSQL firebase 中用于多对多关系的解决方案 Many to Many relationship in Firebase

如果我使用 Dart objectbox 库对离线数据库的所有 1:N 和 M:N 关系采用第二种方法,可能会出现什么问题?

为 1:N 关系添加一些代码

class Customer {
  int? id;
}

class Orders {
  int? id;
  int? customerId;
}

所以这里的每个订单都会有一个额外的客户 ID。每当我们需要查找客户的订单时,都会通过查询订单的客户 ID 来实现。

【问题讨论】:

  • “第二种方法”是什么意思?
  • 第二种方法意味着这个stackoverflow.com/questions/41527058/… 例如,对于A类和B类之间的一对多关系,A类{ int id } B类{ int id int classAId; }
  • 链接的 SO 页面中有多种不同的方法。如果您想链接到特定答案,可以从“共享”按钮(或特定评论的时间/日期)获取链接
  • 另外,由于链接页面可以更改,最好在 StackOverflow 上复制粘贴相关代码 - 帮助人们回答您的问题
  • @vaind 为您的困惑道歉。我为 1:N 关系添加了一些代码。我希望这对于 1:N 关系来说是一个清晰的问题。对于 M:N 关系,这里是链接stackoverflow.com/a/41528908/6429262

标签: objectbox flutter-objectbox


【解决方案1】:

所以这里的每个订单都会有一个额外的客户 ID。每当我们需要查找客户的订单时,都会通过查询订单的客户 ID 来实现。

是的,这是有道理的,这就是 ObjectBox ToOne 关系在内部实际工作的方式(它存储一个 ID)。

因此,为了最大程度地简化 ObjectBox 的使用,您可以这样定义模型:

@Entity()
class Customer {
  int? id;
}

@Entity()
class Orders {
  int? id;
  final customer = ToOne<Customer>();
}

您当然可以保留纯 ID,但是您将无法使用查询 .link() 功能来建立连接。 Query link() 允许您跨多个实体进行查询,例如,获取符合某些条件的客户的订单(例如,来自单个城市的客户的所有订单,假设您存储了地址)。

【讨论】:

  • 好的,谢谢您的回答。 M:N 关系如何?在这里,我们可以有一个单独的类来存储两个类之间的关系,而不是 ToMany&lt;Entity&gt;() 关系。对于查询,首先我们必须对关系类进行查询以找到 ID,然后使用这些 ID 进行第二次查询。
  • 是的,您可以这样做,但我不确定您为什么要这样做?同样,这正是 ToMany 在 objectbox 中所做的事情,尽管效率更高。好的,这是有意义的一个原因 - 如果您需要在一对多关系类上附加其他信息(字段) - 例如添加时的 DateTime 字段。在这种情况下,这是有道理的。在任何情况下,对于单独的类,您都需要手动进行保存(而不是由 ToMany 类“自动”完成)。
  • 感谢您的回答。那是一种情况。在我们的例子中,我们正在努力读取/更新具有关系的实体数据。就像对于每个实体,我们必须使用循环手动分配关系。如果将数据添加到具有关系的实体将独立于关系本身并且会有类级别的一次性关系声明会更好。我们正在考虑维护单独的类来绕过这个。但我认为这和正常的方法一样乏味。
  • 不确定我是否遵循,也许尝试使用简短的代码示例打开一个新的 SO 问题
  • "> 向实体添加数据" 您可以只读取现有对象 (box.get()),更改您需要的内容,然后将其写回 (box.put()) - 如果你不会改变它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多