【问题标题】:Creating a custom PostgreSQL type that is a set of other types?创建一个自定义 PostgreSQL 类型,它是一组其他类型?
【发布时间】:2011-10-15 03:48:09
【问题描述】:

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

所以,基本上:

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

在进行查询时,我想直接访问成员,例如“销售价格.价格”或“销售价格.货币”。

我也希望能够按此字段排序...我意识到这会带来很多问题,因为我们需要转换货币和重量单位。

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

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

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

并且该字段的排序必须由标准化字段作为浮点数来完成。

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

【问题讨论】:

    标签: database database-design postgresql database-schema


    【解决方案1】:

    PostgreSQL 支持 CREATE TYPE 创建复合类型。我认为这是您开始的最佳起点。

    【讨论】:

      【解决方案2】:

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

      您可能需要谨慎存储“标准化”价格以进行排序。在这里,我假设您正在谈论将所有东西存储为(例如)每公斤美元。每当货币汇率发生变化时,您都必须更新表中的每一行。相反,您可能希望将货币的换算系数存储为 USD,并将重量的换算系数存储为 kg,然后根据计算值排序(货币和重量类型表的换算系数已连接到您的数据表)。

      【讨论】:

      • 既然我想在这一切之上使用 Django ORM,是否可以在 ORM 不必知道的情况下加入转换表?任何代码示例都会很有用:)
      猜你喜欢
      • 1970-01-01
      • 2020-01-19
      • 2016-11-07
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多