2011-11-17 147 views
0

我有一个数据库存储组件表中的组件。 还有第二个组件价格表。该表有一个映射到组件ID的字段。我的价格表需要存储一堆不同价格的信息(10,100,1000,10K,100K,1M)。事情是,未来有可能存储其他价格类型,如25K或50K。价格数据的数据库设计

至于现在,我的价格表如下:

id component_id type price 

其中类型可以从1-6目前采取的值。这很好,因为它可以让我在未来非常轻松地添加新的价格类型。

另一种选择是价格表如下:

id component_id price_10 price_100 price_1000 price_10K price_100K price_1M 

但在这种情况下,我需要在每次添加新的价格类型时添加一个新的领域。

我希望这里的人会同意第一种方法。

但是使用第一种方法时,我无法显示一个页面,该页面可能会显示我的数据库中的所有组件,可能有或没有6的价格(在这种情况下应显示0)。显然,使用第二种方法很简单。

这是查询我到目前为止:

SELECT * FROM `component` LEFT JOIN `component_cost` ON `cmpcst_component` = `cmp_id` 

编辑: 我想我会表现出从组件价格表中的一些样本数据: 价格是单价,金额X,X范围从10到100万。所以我可能有这样的事情在我的组件价格表:

id component_id type price 
1  1    1  0.50 
2  1    2  0.45 
3  1    3  0.40 
4  1    4  0.35 
5  1    5  0.32 
6  1    6  0.30 
+0

类型和价格之间的关系是什么?一种类型可以有两种不同的价格吗?换句话说,这些数字是什么:10,100,1000,10K,100K,1M,25K,50K。他们是美元还是别的东西? – Kash

+0

我刚刚添加了示例数据到我的文章底部。 价格是一个单价。因此,一个组件在订购10个单位时可能花费0.50美元,或者订购1000个单位时花费0.40美元。 – Justin

+0

如果你给我们每个表的结构和样本数据,以及预期的输出,它会有所帮助。根据您提供的内容,我们可能会提供一个更好的解决方案,而不仅仅是回答您的sql问题,就像您最好还是利用查找表一样,后者会证明给您更轻松的维护,或者如果你将需要一张已经非规范化的表格:) – Nonym

回答

1

创建两个表,一个用于组件和一个用于compontent价格(最少次数)。然后,您可以为每个组件添加尽可能多的价格。现在和未来。

这是您的第一个示例的变体,您只是不硬编码类型,但具有与某个特定价格相关的编号。

+0

编辑: 我在第一篇文章中添加了示例数据。 – Justin

0

尝试类似:

select * from component c join compcst_component cc on true and c.id = cc.cmp_id; 
0

我不知道我跟着你..希望你可以给我们的表结构,但这里的一个尝试:

SELECT c.cmp_id, ISNULL(p.price, 0) AS Price 
FROM component AS c INNER JOI component_cost AS p 
ON p.cmpcst_component = c.cmp_id 

也许我不没有列到表匹配的权利,但尝试。