【问题标题】:Database design for price data价格数据的数据库设计
【发布时间】:2011-11-17 19:04:23
【问题描述】:

我有一个将组件存储在组件表中的数据库。 还有第二个表格是关于组件价格的。此表有一个映射到组件 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

【问题讨论】:

  • 种类和价格有什么关系?一种类型可以有两种不同的价格吗?或者换句话说,这些数字是什么:10、100、1000、10K、100K、1M、25K、50K。它们是 $ 还是其他东西?
  • 我刚刚在帖子底部添加了示例数据。价格为单价。因此,订购 10 件时,一个组件可能需要 0.50 美元,订购 1000 件时可能需要 0.40 美元。
  • 如果您向我们提供表结构和每个示例数据以及预期输出,将会有所帮助。根据您提供的内容,我们可能能够提供比简单地回答您的 sql 问题更好的解决方案,例如,如果您最好也使用查找表,这(稍后)将证明您可以更轻松地进行维护,或者如果您需要一个非规范化的表:)

标签: php mysql database


【解决方案1】:

第一个选项更好。

为了显示数据,创建一个带有数据透视表的视图。

你可以在这里找到帮助 http://en.wikibooks.org/wiki/MySQL/Pivot_table

【讨论】:

    【解决方案2】:

    创建两个表,一个用于组件,一个用于组件价格(用于最小计数)。然后,您可以为每个组件添加任意数量的价格。现在和未来。

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

    【讨论】:

    • 编辑:我在第一篇文章中添加了示例数据。
    【解决方案3】:

    尝试类似:

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

    【讨论】:

      【解决方案4】:

      我不确定我是否关注你.. 希望你能给我们表格结构,但这里有一个尝试:

      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
      

      也许我没有正确的列到表匹配,但试试吧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多