Android ROOM - 如何在 Object 中插入 Object(即闪存卡组有问题列表)

Android ROOM - How to Insert a Object inside an Object (i.e. Flash Card Deck has a List of Questions)

如题所示, 我对如何实施以下内容感到困惑: 一个 FlashCard 卡片组有一个标题,截止日期(两者都已实现)。 但是,它还包含一个卡片列表。 卡片由问题和答案组成。

像这样,Deck(标题、截止日期、抽认卡)。卡片(问题,答案)

我一直在考虑为此使用专用的类型转换器。然而, 它也会变得凌乱。

例如, 我正在考虑拥有一个类型转换器,它将所有现有的问题和答案收集到一个连接的 csv 字符串中。然后它会在转换回 object.

时反转换它

这个方法好像比较复杂。因此,我想知道对于这类事情,最佳实践本身是什么。

谢谢...

我认为你的问题是数据库架构问题。所以基本上有 2 种解决方案,具体取决于您要如何使用卡片。

1.如果卡片在任何一副牌中都没有重复,或者如果每张卡片都是独一无二的:

那么你可以使用这个模式:-

要查找特定牌组的所有卡片,假设“牌组 1”的 ID 为 1。您可以使用 SQL 查询 "SELECT * FROM Cards WHERE Deck_id=1;"

优点:

  • 您只需维护两个表。
  • 可能很容易编写SQL查询。

缺点

  • 您不能重复使用任何卡片。所有卡片都是独一无二的。
  • 可能需要更多存储空间 space。

2。如果卡片重复,或者如果您想重复使用卡片:

那么你可以使用这个模式:-

要查找特定牌组的所有卡片,假设“牌组 1”的 ID 为 1。您可以使用 SQL 查询 "SELECT * FROM Cards WHERE id IN(SELECT Cards_id FROM Deck_has_Cards WHERE Deck_id=1);"

优点:

  • 节省大量存储空间space(如果卡片不是唯一的)。

缺点

  • 查询变得很难写

我建议您检查 SQL 比我写的更好的查询。

如果您正在使用 Room Database,请使用 @Query(<SQL>)...(我不会在此展开更多教程)。

我不会推荐您尝试存储卡片的方式,因为它不适用于 A.C.I.D。数据库的属性。