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。数据库的属性。
如题所示, 我对如何实施以下内容感到困惑: 一个 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。数据库的属性。