价格数据建模

时间:2013-08-10 22:25:03

标签: modeling datamodel

问题

我目前有一个产品数据库。这是一个快速架构:

表bdProduct

|   IDBDProduct |
|   Code        |
|   Description |
|   DCreated    |
|   UCreated    |
|   DModified   |
|   UModified   |

我现在正处于需要存储价格的地步,在那里我遇到了一些预见最佳方式的问题。

最终,我很确定我们会去世界各地,这取决于我出售我的应用程序的商店,这意味着我可能有CAN美元(开始),然后美元,欧洲欧洲等。

存储该信息的最佳方式是什么?我已经考虑过了:

| CANPrice |
| USDPrice |
| EURPrice |

我不知道为什么,但我觉得这不是一个好方法。有关信息,过去三年我一直在使用该系统(CAN / USD / EURPrice),我们一直在努力解决添加新类型的问题。

这是我已经收集的内容

  1. 将价格存储在另一个表格中(我认为这是最好的方式?

    有一个bdProductPrice,我会在其中保存价格和额外信息

    | idAuto      |
    | IDBDProduct |
    | RPrice      |
    | PriceType   |
    | DCreated    |
    | ........... |
    

    我将存储IDProduct,其价格和价格类型(是CAN / USD / EUR)

    我不喜欢这个选项是每次我阅读产品以获得价格时我都要再提出一个查询。

  2. 在当前数据库中添加价格

    我不喜欢这个选项。我觉得它会对我的数据库进行很多调查。而且,我们失去了产品价格的历史,与修改过的人一样多。

  3. 还有什么需要建议吗?

    我们走了,我很高兴听到你的消息,你尝试过什么,用过什么......最适合你的是什么?

  4. 侧面问题

    我问了关于价格的问题,但是对于翻译的数据我也有同样的问题,例如,我将有一个英语的productDescription,但我也会有法国客户,所以,也许我应该转换bdProductPrice到bdProductExtension,我会在其中存储我想要提供给我的产品的信息类型?

3 个答案:

答案 0 :(得分:2)

也许我错过了一些东西,但为什么不只是在你的表中添加一列,也许是CURRENCY_TYPE,并且有另一个表用于参照完整性,因此用户不能为同一种货币(CAN,CANADIAN DOLLAR等)添加多个值并且您可以存储您可能想要的有关货币的任何信息。

您仍然需要加入参考表以获取有关货币的任何信息,但在基表上您有价格和货币类型。

答案 1 :(得分:0)

在我看来,数据库是一个存储信息的地方,并且将语义信息(比自己的数据库模式提供的更多)移动到dabase通常是一种开销,很多时候都不需要。

除非同一商店需要使用不同货币的价格,否则无法将此信息移至数据库。任何购物者通常都希望所有价格都使用相同的货币。

因此,我只会在数据库中存储价格(正如您最初的想法)。了解您的价格“意味着什么”是您的业务逻辑问题。

从不同商店的整个申请的角度来看,我看到了两个选择。

  1. 每个商店应用程序都以自己的货币保存价格。应用程序业务逻辑将是非常明确的。如果具有不同货币的不同商店需要保持同步数据库,则可能会出现问题。

  2. 每个商店应用程序都以相同的货币保持价格。上面的问题消失了,但是应用程序业务逻辑会产生轻微的开销,因为它必须在读取/写入数据库之前/之后进行转换。

  3. 顺便说一句,你可能想看看这个stackoverflow answer关于数据库设计模式,它提供了推荐的阅读。

答案 2 :(得分:0)

根据您想要实现的目标,可能采用不同的方法。

我的建议:

  • <强>价格: 尝试了解您要提供的货币数量,如果它们是&lt; 10,然后在产品表中添加价格列。在那里,您将存储当前价格。在第二个表中,您可以存储价格的历史变化。因此,当您需要显示当前价格时,您将无需额外加入即可使用它。如有特殊需要,将有历史价值。 如果您的价格超过10个,或者您不喜欢具有多个列的解决方案,您可以将价格保存在单独的表中,如:

    表Product_Prices

    IDBDProduct
    IDCurrency
    Price
    Start_date
    End_date
    

    对于当前值,使用类似31-DEC-9999的End_date(也可用于获取当前价格)。

  • 说明:通常它们是带有文本或甚至是html标记的字段。与价格相同,您可以使用相同的方法,将它们放在Product表中,或将它们分开并仅在您需要时使用它们。您甚至可以使用简短描述和长描述,第一个在Product表中,后者在Product_Description表中。如果不经常需要,我宁愿保持描述分开。

无论如何,在一天结束时,您需要将此信息存储在某处。您可以尝试限制应用程序前端的复杂性,为商店的价格/语言组合创建视图(也可能是包含所有产品数据的扩展版本)。

 Product_UK     - basic product info, GBP_Price, English Short Description
 Product_FR:    - basic product info, EUR_Price, French Short  Description
 Product_CAN_EN - basic product info, CAD_Price, French Short Description
 Product_CAN_FR - basic product info, CAD_Price, French Short Description
(Product_UK_Ext - all product info, GBP_Price, English Short and Long Description)

最后,就我过去看到的情况而言,通常您在处理产品,价格和描述方面没有性能问题。零售应用程序的大量数据位于sales / transactions表中,获取产品描述的额外连接不会损害您的数据库(但这只是SQL而不是科学:))。