冗余数据是否可以保存必须进行查询?

时间:2013-02-23 16:45:32

标签: php sql database database-design

我试图创建一个清单系统,例如。要收集的项目列表。用户可以将列表添加到他们的个人资料中,然后当他们收集项目时,可以选中列表中的项目框,单击提交,现在将选中的项目标记为已收集。我有它编码和工作正常但它使数据库的疯狂数量的查询工作。

我有5张桌子。用户表(用于注册用户的用户名,id..etc),列表表(包含列表名称,描述,id),列表项表(包含各个项目.id,title和listID(用于引用列表)它属于))。 userslist表(用户已添加到其个人资料中的列表.userID和listID)和collectitems表(这个列表中有一个人已经选中了收集的列表项.listItemsID,UserID)

问题是,当我查看mylists.php页面时,它将查询userslist表并返回用户添加的列表的所有ID。然后,一旦我有了列表的ID,它就会查询列表,找出列表的名称(如果我添加了10个不同的列表,这可能意味着必须对列表进行10次查询)。如果我将一个listname列添加到userslist表中,我只需要对该页面进行1次查询,即对于userslists表,我可以使用该1个查询构建页面。

2 个答案:

答案 0 :(得分:1)

听起来您应该保持数据规范化(即避免冗余数据),而是使用JOIN在单个查询中收集所需的所有数据。

答案 1 :(得分:1)

首先,我不担心主键上的查询。所有表都有其他表引用的主键。这些将使用连接。

其次,您不必单独获取列表名称。使用如下的查询:

select l.listName
from UserLists ul join
     Lists l
     on ul.listId = l.listId
where userId = $userid

这将返回单个查询中的所有名称。