2009-07-28 57 views
0

我正在使用PHP和MySQL制作网站。最大的创意是你可以注册,你可以添加对象到你的个人资料。你可以只有1个配置文件,你可以有多个项目(理论上是无限的),每个项目可以有多个图片(理论上是无限的)。将多个项目链接到MySQL中的单个项目的最佳方式

我想知道如何在MySQL中最好地实现这一点。我对MySQL有一个非常基础的教育,因为我知道如何创建一个表,各种数据类型是什么,但是像外键这样的东西是埋在我的记忆中的东西。我查了一下,但理解速度有点慢。

我可以简单地做3个表:

  1. USERS_NAME + USER_ID
  2. 的Item_ID + USER_ID
  3. 的Item_ID + Picture_ID

缺点是,在每一次搜索行动,或纵断面图甚至项目视图,我会查询最后两个表的全部内容,这看起来像是过度杀伤。

有人可以帮我吗?

回答

2

你的模式其实很不错。现在,你的恐惧是你会查询表格的全部内容。鉴于你的主键和外键有很好的索引,这是非常不正确的!

select 
    u.users_name, 
    i.itemid 
from 
    users u 
    inner join items i on 
     u.user_id = i.user_id 
where 
    u.user_id = 1234 

这行集将返回速度非常快,甚至几十万行的!原因是因为查询将使用索引查找找到users中的行,其中user_id是。同样,一旦你加入到items表中。因此,只需两次快速查找就可以找到所有您要查找的项目,并且永远不必扫描表格。

对于这个东西,SQL绝对是优化的。请利用它!

+0

oooo,内部连接......我从来没有学过SQL – KdgDev 2009-07-28 19:24:28

0

假设任何一个项目只能与一个用户相关吗?如果是这样,你的解决方案是正确的应该用一个表中列出的一个(用户)和另一个列出的许多(项目)来定义一对多关系,但使用许多ID和该ID来标识。

因为通过这样做,您已经限制了SQL必须搜索以查找与用户相关的项目,所以您的查询应该相对较快。

总之,你是对的。

+0

这是正确的,没有人可以被多人拥有。一个项目有1个用户,句点。如果存在相同的项目,那就是巧合,而且它们仍然由ID分隔。 – KdgDev 2009-07-28 19:23:27

相关问题