【问题标题】:Mysql table. Should I use multiple tables?mysql表。我应该使用多个表吗?
【发布时间】:2012-02-26 12:46:18
【问题描述】:

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

表格如下所示:

model_number | seller | price 
abc            Store1   99.99

当只有 1 个卖家时,这种结构效果很好,因为主键是 model_number,我更新价格的查询使用重复键更新,它只在价格变化时更新产品。此外,主键是model_number,但是如果我有多个卖家的model_number相同但价格不同,我相信在更新表格时,数据库会因为model_number重复而变得混乱。

我应该为每个卖家提供他们产品的唯一密钥吗?例如,如果 Seller_1 的主键为 Seller_1 并保持该值相同,以便数据库知道如果 Seller_1 的价格字段发生变化则进行更新。

谢谢

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

    你可以设置model_number和seller主键。这样,只要卖家不同,您就可以拥有多个具有相同 model_number 的元组。

    model_number | seller | price 
    abc            Store1   99.99
    abc            Store2    9.99
    

    这是你想要的吗?

    【讨论】:

    • 我相信是的。运行“重复密钥更新”时我不会遇到问题,对吧?
    • 只要您不插入带有 model_nr 和卖方的行,该行已经在数据库中,因为该行是唯一的。
    • 没有。我更新表的方法是使用与价格表相同的结构创建一个临时表,然后从临时价格表中更新价格表。这是一个好方法吗?
    • 如果要更新特定行,为什么不直接使用 (UPDATE table SET price='9' WHERE model_number='abc' and Seller='Store1';)?
    • 因为数据来自 XML 文件,并且每天都会使用我上面输入的方法进行更新。
    【解决方案2】:

    三个表: Seller, Seller_Product, Product

    链接表Seller_Product 的每一行都包含两个外键,分别指向相应的卖家和产品行。 price 是卖家和产品之间链接的属性。所以它变成了链接表中的一个字段。

    SellerID、姓名、...
    Seller_ProductSeller_ID、Product_ID、价格、可用性、. ..
    产品ID、名称、型号、制造商、...

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

    【讨论】:

      【解决方案3】:

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

      我认为您所说的“为每个卖家提供其产品的唯一密钥”实际上就是他们所说的代理密钥。您可以给表一个主键列,使其看起来像这样

      id  |  model_number  |   seller  |   price
      

      其中 id 是表的主键,model_number 和 Seller 是辅助键和外键,但这完全取决于您,无论哪种方式都可以。

      【讨论】:

        【解决方案4】:

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

        此解决方案需要三个表:

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

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

        Products_To_Sellers: 带有 product_id 和 Seller_id 的表(分别对这些列进行索引)

        通过这种方法,您可以加入表格以查看卖家产品,但最终您将拥有一个无限扩展的 SCHEMA

        【讨论】:

        • 但是在更新表时,是否能够将新数据与其对应的auto_incremented id关联起来?
        • 如果(根据 OP 的要求)产品已经由其model_number 标识,为什么还需要产品中的自动递增 ID?
        【解决方案5】:
           [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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-17
          • 2010-12-29
          • 2012-06-25
          • 2016-03-23
          • 1970-01-01
          • 1970-01-01
          • 2011-12-22
          • 2011-01-31
          相关资源
          最近更新 更多