Database design 如何高效地为用户查询“;项目“;在数据库中?(亚马逊SimpleDB)

Database design 如何高效地为用户查询“;项目“;在数据库中?(亚马逊SimpleDB),database-design,amazon-simpledb,Database Design,Amazon Simpledb,对不起,如果以前有人问过这个问题,我想不出该如何表述这个问题 我有一个数据库(特别是在AmazonSimpleDB中),其中我使用了两个域 域1有一个包含一些常规信息的用户列表 域2是包含项目信息的项目列表 我希望能够从域1查询属于特定用户的所有项目。为此,每个项只能属于1个用户,因此域2中的一个属性是userID 在我知道之前,我认为最好的选择是在域1中保留一个属性,其中包含该用户拥有的项的列表(如item1&&item2&&item3&&etc),然后只查询该属性。我认为这会使它非常有效

对不起,如果以前有人问过这个问题,我想不出该如何表述这个问题

我有一个数据库(特别是在AmazonSimpleDB中),其中我使用了两个域

  • 域1有一个包含一些常规信息的用户列表

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

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

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

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

任何建议都很好


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

我不知道amazon simpledb,但在数据库术语中,您有两个表:第一个是用户表,大概至少存储一个用户id和用户名;第二个是项目表,其中存储项目id、项目名称及其当前所有者/用户

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

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

select items.name
from items inner join users
on items.user = users.id
where users.username = 'Luis'
标准数据库是为处理具有数百万条目的表而构建的,因此不必担心效率(至少,只要添加适当的索引,您就需要在items表的“user”字段上创建索引)