2012-10-27 93 views
1

我正在设计一个数据库,它涉及产品和携带它们的商店。Mysql数据库设计中的多对多关系

许多商店将携带相同的产品。很显然,每家商店会有很多类型的产品。

我试图做一些研究,使表但我在网上看了这么技术上疲惫和逻辑形式化,它从能力带走直观地了解他们是怎么说的资源的最佳途径。

我不断听到人们说你应该使用交界表,但我不明白这是如何适用于我的情况。

我想要做的是创建一个“商店”类别的行,然后有单独的行“product_1”,“product_2”“product_x”等我在哪里列出商店销售的每个产品,但我我不确定这是不错的形式。

此外,一些商店可能有50个产品,这意味着我需要50行。我不确定是否有办法解决这个问题。

最终,我的问题是,通过标准的约定,这种关系的理想数据库结构是什么?

回答

4

我会有三张桌子。一个用于商店[名称,编号为&信息]。一个用于项目[名称,编号为&信息]。一个链接两个[关系ID,商店ID &项目ID]。

这将使您能够更改商店和商品数据,而无需更新您的关系表。

因此,如果您想要在商店中的商品,您可以在关系表中搜索与商店编号相匹配的商品。反之亦然,如果你想要有商品的商店,你可以在关系表中搜索商品ID并返回商品ID。

生活必需品,例如:

STORE: 
********************* 
storeID storeName 
********************* 
1   store1 
2   store2 
3   store3 

ITEMS: 
********************* 
itemID itemName 
********************* 
1   item1 
2   item2 
3   item3 

RELATIONS: 
********************* 
storeID itemID 
********************* 
1   1 
1   2 
2   1 
2   3 
3   2 
3   3 

因此找到商店1有,你会得到STOREID为1哪些项目,以及搜索的关系表中查找该行有一个商店ID = 1,这将返回第一行和第二行,告诉你store1有第一项和第二项。类似地,找到哪些商店cary item2,你会得到item2的ID,即2,在关系表中搜索itemID = 2,这会返回行2和五,告诉你商店1和3有item2。

+0

+1当我格式化一个架构,你已经说过所有OP需要知道:) –

+0

感谢您的优雅解决方案。那么链表就会在每一行有重复的条目,对吧?因此它可能没有主键,或者它有一个双排主键,是正确的? – user1299028

+0

是的。或者你可以添加一个id到关系中。拥有一个id总是一个好主意,因为你永远不知道你的数据库如何随着你的需求变化而改变。这对于“未来打样”有好处。我更新了我的答案。 –

相关问题