2012-11-28 113 views
0

我想创建一个关系数据库,其中有两个表用户和产品。每个表格的每个项目都可以与第二个表格的许多项目相关。两个表之间的多对多关系

我的当前实现如下:

两个主表 -

->Users 
User ID 
UserInfo 

->Products 
Product ID 
ProductInfo 

两种不同lookuptables

->UserToProduct 
UserID 
ProductID 

->ProductToUSer 
ProductID 
UserID 

每次加入从用户到的产品的关系,我只需在第一个查询表中添加一行,反之亦然。

这是正确的做法吗?有没有我可以参考的这种场景的标准模型?

+1

也许你只需要一张表用户 - 产品与关系方向的额外行? – sbyd

+0

@Gowtham既然你认为你需要有两张表,你能描述一下你的用例吗?我知道你只需要一张表进行连接,但是我认为**你需要/想跟踪与关系相关的其他元数据。我只是不知道附加元数据是什么。 –

+0

@BrianDriscoll简单用例 - 我想要搜索产品用户A的具体情况。我使用第一张桌子。第二种情况,我想查看有多少用户购买了产品A,因此我搜索了第二个表。 – Gowtham

回答

3

你不需要两个查找表,你需要的只是users_products。至于资源,有无数的,只是谷歌“数据库多对多”

UPDATE

考虑一下这个数据:

products 
------------ 
id  info 
------------ 
1  car 
2  flute 
3  football 

users 
------------ 
id  info 
------------ 
10  bob 
20  tim 
30  manning 

现在,作为一个简单的例子,假设人手拥有足球和汽车。比方说tim拥有长笛和足球。现在,这里是你的查找表:

users_products 
---------------------- 
user_id product_id 
---------------------- 
    20   2 
    20   3 
    30   3 
    30   1 

就是这样。现在,你可以像“给我所有的有车用户”或“给我所有的汽车用户具有”等

干杯查询

+0

这就是我的想法,但我认为他想要2个人的关系? –

+0

@Madbreaks你能澄清一下吗?如果我只有一个查询表,我怎么知道哪种类型的项目与哪个其他类型的项目有关? – Gowtham

+0

@ChristianVarga我想要两个表之间的双向多对多关系。 – Gowtham

1

你真的不需要或不想要两个不同的查找表。你应该只有一个(你的表,UserToProduct或ProductToUser都可以)。查找表的主键应该是由ProductID和UserID组成的组合键。

+0

就像我说的。 :D – Madbreaks

+0

在我发布我的帖子后看到了你的答案...显然你是更快的打字员:) –

+0

什么是一个复合键? @sbyd使用额外的列来表示关系的方向听起来很棒。 – Gowtham

相关问题