我正在Android应用程序中实现标签,需要以下几点指示:
请注意,我已经看过一些专注于更大型服务器部署的设计,我正在寻找一些简单的东西,适用于移动(SQLITE)环境中的单个表。
首先想到的是,我正在考虑使用字符分隔的varchar来表示相关的标签,例如#work#meeting#monthly。有没有更好的设计方法?
答案 0 :(得分:1)
如果您使用该方法,则在搜索和过滤时会遇到问题,请使用表格存储数据,将另一个表格用于标记。
您可以使用第三个表格来表示数据和标签之间的关系,但它速度慢且效率低。
现在,为了获得搜索和过滤器的最佳性能,请使用tags表中的指针列表到数据表,这样,如果按标签过滤,您将获得O(1)复杂度。问题是你会慢慢得到与数据相关的标签。您可以反向执行相同的操作,并将标记列表与您的数据绑定,但您需要做很多工作才能保持其有效,因为您必须在更新时更新标记和数据。
最后,请记住nr_of_tags<< nr_of_data你应该只使用绑定到标签的数据指针,如果你想显示与数据相关的标签,那么你解析那个标签表并进行搜索。
编辑:刚才我看到你只想使用一张桌子。
答案 1 :(得分:1)
我猜你必须在将处理卸载到数据库或在代码中进行处理之间进行权衡。
我建议您在代码中执行此操作,因为一旦获取内存中的数据就可以避免磁盘读取,并且您可以使用线程等高效处理应用程序层的处理。
这样就可以避免在多线程模式下运行SQLite本身(因此必须在db层处理同步)。
一个非常简单的架构可能是:
ID | TAGS
_________
1 | work,meeting,monthly
2 | home,leisure,yearly
您可以将字符串数组存储为逗号分隔值,并使用simple trick轻松检索它们。
然后你可以使用标准的java集合来映射,排序等