在Postgresql数据库中,卖方有很多产品,而产品有许多卖方,应该在哪里存储价格?

时间:2018-12-28 17:03:28

标签: database postgresql schema

使用django和python,我正在构建一个跟踪价格的网络应用。用户是制造商,需要报告。他们的每种产品都有建议的价格。每个产品可以有一个以上的卖方,每个卖方可以有一个以上的产品。我的问题是,我在哪里存储价格,尤其是卖方的价格?现在,我有了数据库架构,因此产品表存储了建议的价格和卖方的价格,这意味着一个产品被重复很多次。有更好的方法吗?

DB Schema

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

3 个答案:

答案 0 :(得分:2)

由于存在多对多的情况,因此您的结构将使用链接表。您将拥有表sellerproductlink_seller_product。最后一个表通过id链接到seller表,并通过id链接到product表。因此,该表还可以包含任何信息,这些信息取决于卖方和产品,并且两者都不固定。因此,每件商品的价格就在那里。

因此,添加具有列selleridproductidprice的附加链接表,您在卖方和产品中将只有一行,但是每个卖方可以为自己的价格产品。

答案 1 :(得分:1)

您没有充分代表产品与卖家之间的一对多关系。您的产品表具有卖方ID和卖方价格,但是如果一种产品被许多卖方出售,则不能。

您不需要在产品和卖方之间建立一张表格,而无需复制产品条目,因此同一产品可以有多个卖方。

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

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

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

SELECT * 
FROM products
LEFT JOIN seller_products ON ( seller_products.product_id = products.id)

答案 2 :(得分:0)

这是一个数据仓库问题。

我建议将价格作为事实来衡量,并且仅将维度作为属性。

尺寸:

  • 产品
  • 卖方
  • 制造商

事实(列):

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