2015-01-21 64 views
0

我正在为数据库设计表格。从SQLite数据库检索有序的列表项目

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

名单表的列:

+ list_id 
+ timestamp 

列表项表的列:

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

当我检索列表中的项目,他们应该有相同的顺序,当我下载它们。什么是最有效的方式来存储“列表顺序”?一种选择是让项目有一个列表的列如列表:indexInList。赞赏建议在更好的方法做到这一点。

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

回答

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) 
); 

一旦你有这样的表,它是存储项目的列表顺序的天然场所。

1

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

您可以重新排序表。

ALTER TABLE tbl_name ORDER BY col_name 
+0

谢谢。如果某个物品可以多次列入清单会怎样? – 2015-01-21 06:14:08

+0

如果你想要的话,这没关系。但是你可能需要一个辅助列到ORDER BY。如果您不希望重复使用UNIQUE索引来禁止重复。如果你想索引一个重复的列,你只需要使用INDEX而不是UNIQUE索引。您可以在索引中使用多个列。 – Misunderstood 2015-01-21 07:21:21

相关问题