使用django和python,我正在构建一个跟踪价格的网络应用。用户是制造商,需要报告。他们的每种产品都有建议的价格。每个产品可以有一个以上的卖方,每个卖方可以有一个以上的产品。我的问题是,我在哪里存储价格,尤其是卖方的价格?现在,我有了数据库架构,因此产品表存储了建议的价格和卖方的价格,这意味着一个产品被重复很多次。有更好的方法吗?
答案 0 :(得分:2)
由于存在多对多的情况,因此您的结构将使用链接表。您将拥有表seller
,product
和link_seller_product
。最后一个表通过id链接到seller
表,并通过id链接到product
表。因此,该表还可以包含任何信息,这些信息取决于卖方和产品,并且两者都不固定。因此,每件商品的价格就在那里。
因此,添加具有列sellerid
,productid
和price
的附加链接表,您在卖方和产品中将只有一行,但是每个卖方可以为自己的价格产品。
答案 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)
这是一个数据仓库问题。
我建议将价格作为事实来衡量,并且仅将维度作为属性。
尺寸:
事实(列):