如何在房间数据库中正确支持不同的单元?

时间:2018-10-21 17:07:11

标签: android database android-room

我正在Android应用中使用Room数据库。列之一代表以毫升[ml]为单位的饮料量。我想知道给用户选择/将单位更改为[cl]或其他单位的正确方法是什么。 我应该选择一个设置选项来选择单位,然后转换数据库中的所有值吗? 我应该存储例如[ml],然后根据用户选择的单位转换值吗? 最有效的方法是什么?什么会减少资源消耗? 你们有一些好的开源示例/教程/代码片段吗?

1 个答案:

答案 0 :(得分:0)

这实际上取决于转换的数量和复杂性。 如果您只有一个值(ML)并需要将其转换为另一个值(CL,OZ ...),则只需将基本单位设置为DB,并在将其显示为用户。

如果您觉得这将变得一发不可收拾,因为您将拥有许多值类型,并且在跟踪所有这些值类型时会遇到问题,则可以在数据库中进行转换,这将在选择查询上造成一些开销。 例如,您有此表:

ID  unit  val
--- ---   ---
1   ML    960
2   ML    4112
3   KG    70
4   KG    35
5   C     37

您将始终在数据库中保持基本单位相同,这意味着您不会将它们与F,OZ和LBS混合使用。 您可以在所选查询中转换单位:

SELECT id, unit, val, 
    case when unit = 'ML'  then val * 0.033 
         when unit = 'KG'  then val / 2.205 
         when unit = 'C'   then val * 9/5 + 32
         end as result
FROM tbl

在两种情况下,由于这是一个Android应用程序,因此将通过SQLite或应用程序本身完成工作。 就我个人而言,我不会在同一张表上混合使用单位,因为这会增加一层复杂性,以便以后对它们进行排序,比较和检索。 希望有帮助。