【问题标题】:Retrieve ordered list with items from SQLite database从 SQLite 数据库中检索包含项目的有序列表
【发布时间】:2015-01-21 16:03:37
【问题描述】:

我正在为数据库设计表。

在 Android 应用程序中,我从服务器下载 JSON 格式的有序列表。我将列表及其项目插入到 SQLite 数据库中。

列表的列:

+ list_id
+ timestamp

列表项表的列:

 + item_id
 + timestamp
 + list of list_ids (a list item can be in multiple lists)

当我检索列表中的项目时,它们的顺序应该与我下载它们时的顺序相同。存储“列表顺序”的最有效方法是什么?一种选择是让项目有一个带有一对列表的列,如下所示:list:indexInList。感谢有关更好方法的建议。

澄清:一个项目可以在列表中出现多次,例如列表中的 item_ids:1,2,3,1,5。

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    当您可能需要访问单个项目时,切勿将值列表存储在列中。

    对于这样的 M:N 关系,您通常使用 third table

    CREATE TABLE items_in_lists (
        list_id INTEGER REFERENCES lists(list_id),
        item_id INTEGER REFERENCES items(item_id),
        PRIMARY KEY(list_id, item_id)
    );
    

    一旦你有了这张表,它就是在列表中存储项目顺序的自然位置。

    【讨论】:

      【解决方案2】:

      如果您有一个具有自动增量的 id 列,则将 ORDER BY id 添加到您的查询中。

      您可以重新排列您的餐桌。

      ALTER TABLE tbl_name ORDER BY col_name 
      

      【讨论】:

      • 谢谢。如果一个项目可以多次出现在列表中怎么办?
      • 如果你愿意,没关系。但是你可能想要一个辅助列来排序。如果您不想重复,请使用 UNIQUE 索引来禁止重复。如果要索引具有重复项的列,只需使用 INDEX 而不是 UNIQUE 索引。您可以在索引中使用多个列。
      猜你喜欢
      • 2014-05-11
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多