创建一组其他类型的自定义PostgreSQL类型?

时间:2011-07-28 13:48:42

标签: database database-design postgresql database-schema

我想在此类型中存储的信息类型为:“330.30欧元/吨”或“25.15美元/公斤”。

所以,基本上:

  • 价格为十进制。
  • 货币作为另一张桌子的FK。
  • 重量单位作为另一个表格的FK。

在进行查询时,我想直接访问成员,例如“selling_price.price”或“selling_price.currency”。

我希望能够按照这个领域进行排序......我知道,这会产生许多问题,因为我们需要转换货币和重量单位。

一种解决方案是添加第四个元素,以标准格式存储相同的信息(例如usd / kg作为浮点数),按此排序,然后在我们更新货币汇率时更新此信息。

所以,基本上,这个自定义类型(我们称之为PRICE_PER_UNIT)会存储:

  • 价格为十进制。
  • 货币为FK。
  • 重量单位为FK。
  • 标准格式的价值。

此字段的排序必须由标准化字段完成,作为浮点数。

由于我之前从未在SQL中做过类似的事情,所以我不知道如何开始使用这些......任何人?

2 个答案:

答案 0 :(得分:1)

PostgreSQL支持CREATE TYPE来创建复合类型。我认为这是你开始的最佳场所。

答案 1 :(得分:1)

除非你使用的是beta 9.1版本,否则请避免像瘟疫这样的PostgreSQL类型。更新它们是一件非常痛苦的事情,直到9.1,您才能在枚举中添加或删除值或更改属性。对于其他版本,您只能重命名,更改所有者和更改架构。

您可能需要谨慎存储用于分类的“标准化”价格。在这里,我假设您正在谈论将所有内容存储为(比如)每公斤美元。只要货币汇率发生变化,您就必须更新表格中的每一行。相反,您可能希望将货币的转换因子存储为USD,并将权重的转换因子存储为kg,然后根据计算的值进行排序(来自货币和权重类型表的转换因子将连接到您的数据表)。