创建一个自定义PostgreSQL类型,它是其他类型的集合



我想在这种类型中存储的信息类型是,例如:"330.30 eur/ton"或"25.15 usd/kg"。

所以,基本上:

  • 货币作为另一个表的FK。
  • 作为另一个表的FK的权重单位。

在进行查询时,我想直接访问成员,例如:"selling_price。" Price "或"selling_price.currency"

我也希望能够按这个字段排序…我意识到,这就产生了一大堆问题,因为我们需要转换货币和重量单位。

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

因此,这个自定义类型(我们称之为PRICE_PER_UNIT)将存储:
  • 货币为FK。
  • 重量单位为FK。
  • 标准格式的值。

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

因为我以前从来没有在SQL中做过这样的事情,我不知道如何开始使用这些…有人知道吗?

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

除非您使用的是beta 9.1版本,否则请像躲避瘟疫一样避免使用PostgreSQL类型。它们的更新非常麻烦,直到9.1才可以添加或删除枚举值或更改属性。对于其他版本,您只能重命名、更改所有者和更改模式。

在存储"标准化"价格进行排序时,您可能需要谨慎。这里我假设你说的是以每公斤(比如说)美元来存储所有东西。任何时候货币汇率发生变化,您都必须更新表中的每一行。相反,您可能希望将货币的转换因子存储为USD,并将重量的转换因子存储为kg,然后根据计算值进行排序(来自货币和重量类型表的转换因子连接到您的数据表)。

相关内容

最新更新