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

How to properly support different units in Room Database?

我在 Android 应用程序中使用房间数据库。其中一列代表以毫升 [ml] 为单位的饮料体积。我想知道让用户选择 choose/change 单位到 [cl] 或其他单位的正确方法是什么。 我应该做一个设置选项来选择单位,然后转换我数据库中的所有值吗? 我应该存储例如 [ml] 然后根据用户选择的单位转换值吗? 什么是最有效的方法?什么会减少资源消耗? 你们有一些好的开源 examples/tutorials/code 片段吗?

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

如果您觉得这会失控,因为您将有许多值类型并且您将无法跟踪所有这些类型,您可以在数据库中进行转换,这会导致一些开销select 查询。 例如,你有这个 table:

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

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

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 或应用程序本身完成。 就我个人而言,我不会在同一个 table 上混合单位,因为这会为以后的排序、比较和检索它们增加一层复杂性。 希望对您有所帮助。