如何有效地查询数据库中的用户“项目”? (amazon SimpleDB)

时间:2012-11-27 02:22:21

标签: database-design amazon-simpledb

对不起,如果之前有人询问,我想不出如何提出这个问题。

我有一个数据库(特别是在亚马逊SimpleDB中)我使用2个域。

  • 域1包含一些具有一般信息的用户列表。

  • 域2是包含项目信息的项目列表。

我希望能够从域1查询属于特定用户的所有项目。为此,每个项目只能属于1个用户,因此域2中的一个属性是userID。

直到知道我认为最好的选择是在域1中保留一个属性,其中包含该用户拥有的项目列表(类似于item1&& item2&& item3&& ...等)和只查询此属性。我认为这会使它非常有效,但我意识到属性限制是1024字节,所以我最终会耗尽空间(因为我的项目名称有点长)。

在这种情况下,我认为每次我想要获取所有用户项目时,我必须在Domain2中执行“select * where userID = something”,但不知何故,这似乎不那么有效。 (我仍然可以保留域1中的最新更新和项目数,以查看我的本地设备是否需要查询或者本地是否有最新版本。

任何建议都会很棒!

(或者我应该在stackoverflow中问这个数据库吗?)

1 个答案:

答案 0 :(得分:0)

我不知道amazon-simpledb,但在数据库方面,你有两个表:第一个是USERS表,可能至少存储了一个用户ID和用户名;第二个是ITEMS表,它存储项目ID,项目名称及其当前所有者/用户。

您不希望在users表的分隔列表中存储用户拥有的项目列表;遍历此列表将是痛苦的。除此之外,数据(用户拥有哪些项目)已存在于项目表中。

在标准SQL中,您将编写以下查询以检索特定用户拥有的项目列表

select items.name
from items inner join users
on items.user = users.id
where users.username = 'Luis'

构建标准数据库来处理具有数百万个条目的表,因此不必担心效率(至少,只要添加适当的索引 - 您需要在items表中的'user'字段上使用索引)