代码之家  ›  专栏  ›  技术社区  ›  JHall651

在一个Postgresql数据库中,一个卖家有很多产品,而产品有很多卖家,那么价格应该存储在哪里?

  •  2
  • JHall651  · 技术社区  · 7 年前

    使用django和python,我正在构建一个跟踪价格的web应用程序。用户是制造商,需要报告。他们的每种产品都有一个推荐价格。每个产品可以有多个卖家,每个卖家可以有多个产品。我的问题是,我在哪里存储价格,尤其是卖家的价格?现在我有了我的数据库模式,所以product表存储了推荐价格和卖家价格,这意味着单个产品会重复很多次。有更好的方法吗?

    DB Schema

    根据以下建议,这是正确的db模式: enter image description here

    3 回复  |  直到 7 年前
        1
  •  2
  •   Sami Kuhmonen    7 年前

    因为您有一个多对多的案例,所以您的结构将使用一个链接表。你们有桌子 seller , product link_seller_product . 最后一个表有一个指向 卖方 表via id以及 表via id。因此,此表还可以包含依赖于卖方和产品的任何信息,并且这两种信息都不是固定的。因此,每个卖家的每个产品的价格都在那里。

    因此,添加带有列的附加链接表 sellerid , productid price 在卖家和产品中只有一行,但是每个卖家可以有自己的产品价格。

        2
  •  1
  •   erik258    7 年前

    你没有充分代表产品和销售者之间的一对多关系。您的产品表有卖家id和卖家价格,但如果一个产品被多个卖家出售,则不能。

    您需要的是产品和卖家之间的表格,而不是复制产品条目,以便同一产品可以有多个卖家。

    CREATE TABLE seller_products (
       seller_id integer,
       product_id integer,
       price decimal 
    );
    

    我将把索引、外键等留给你。卖方ID和产品ID可能是一个独特的组合(最好从活动数据集中删除历史数据以延长性能寿命),但当然,任何给定的产品都将为每个销售该产品的卖方列出一次,并且任何给定的卖方都将为其销售的每个产品列出一次(以及其唯一的价格)。

    然后,您可以将表连接回products,以获取当前存储在中的非规范化数据 products 直接表格:

    SELECT * 
    FROM products
    LEFT JOIN seller_products ON ( seller_products.product_id = products.id)
    
        3
  •  0
  •   Luke Brady    7 年前

    这是一个数据仓库问题。

    我建议将价格放在事实上作为衡量标准,并且只在维度上具有属性。

    尺寸:

    • 制造商

    事实(列):

    • 列表项
    • MRSP
    • 产品ID
    • 卖方ID
    • 制造商ID
    • 时间戳