Mysql表。我应该使用多个表吗?

时间:2012-02-26 12:46:19

标签: mysql database-design

我正在实施一个价格数据库,其中多个卖家以不同的价格销售同一产品。每种产品都是独一无二的,并由model_number标识。现在我的价格表中有1个卖家。我正在寻找建立一个可以列出多个价格的表格的最佳方法,每个价格都是主键为model_number的行的字段

表格如下:

model_number | seller | price 
abc            Store1   99.99

当只有1个卖家时,此结构很有效,因为主键是model_number,我更新价格的查询用于重复键更新,只有在价格发生变化时才会更新产品。此外,主键是model_number,但如果我有多个卖家具有相同的model_number但具有不同的价格,我相信在更新表时,数据库会因为会有重复的model_number而感到困惑。

我应该为每个卖家提供他们产品的唯一钥匙吗?例如,如果卖方_1拥有卖方_1的主键并且保持该值相同,那么数据库知道如果卖方_1的价格字段发生变化则更新。

由于

5 个答案:

答案 0 :(得分:3)

您可以制作model_number和卖家主键。这样,只要卖家不同,你就可以拥有几个具有相同model_number的元组。

model_number | seller | price 
abc            Store1   99.99
abc            Store2    9.99

这是你想要的吗?

答案 1 :(得分:1)

enter image description here

三张桌子: SellerSeller_ProductProduct

链接表Seller_Product的每一行包含两个对应卖方和产品行的外键。 price是卖方和产品之间链接的属性。所以它成为链接表中的一个字段。

卖家 ID,姓名,......
卖家_产品 Seller_ID,Product_ID,价格,供货情况,......
产品 ID,名称,型号,制造商,......

这是N:M关系的常用表格设计。

答案 2 :(得分:0)

到目前为止,您的表结构看起来不错,您需要做的就是将卖家列添加为表的主键的一部分。你在这里有一个产品和卖家之间的多对多关系。多对多关系有一些额外的数据,这是价格。

我认为你的意思是“为每个卖家提供他们产品的独特钥匙”,实际上他们称之为代理钥匙。您可以为表提供主键列,使其看起来像这样

id  |  model_number  |   seller  |   price

其中id是表的主键,而model_number和sell是辅助键和外键,但这完全取决于你,无论哪种方式都可以正常工作。

答案 3 :(得分:0)

你在这里处理的是很多很多关系。

此解决方案需要三个表:

产品: 包含产品信息的表格,包括唯一的自动递增ID。

卖家: 包含卖家信息的表格,包括唯一的自动递增ID。

Products_To_Sellers: 包含product_id和seller_id的表(单独索引这些列)

使用这种方法,您可以加入表格来查看卖家产品,但最终您拥有可无限扩展的SCHEMA

答案 4 :(得分:0)

   [seller]   [product_seller]  [product]
    -id        seller.id         -id -price
               product.id

如果您需要独特的产品,则需要另一个表格:

[seller]  [product_seller] [product]  [seller_price]
-id        seller.id        -id        product.id
           product.id                  seller.id
                                       -price