我正在使用一个带有users
,products
和表的简单数据库orders
,但以前products
我认为该表的设计不是很好,因为对于该weights
列,它只有一个数字,但不清楚它的单位是磅还是盎司。
我试图找到有关如何将磅和盎司指定为桌子重量单位的文档,但我没有成功。谁能建议一种方法来做到这一点?该列再次被简单地称为weight
,我如何清楚地表明它从 2 盎司开始到 1 磅作为 Postgres 内部的重量单位?
我正在使用一个带有users
,products
和表的简单数据库orders
,但以前products
我认为该表的设计不是很好,因为对于该weights
列,它只有一个数字,但不清楚它的单位是磅还是盎司。
我试图找到有关如何将磅和盎司指定为桌子重量单位的文档,但我没有成功。谁能建议一种方法来做到这一点?该列再次被简单地称为weight
,我如何清楚地表明它从 2 盎司开始到 1 磅作为 Postgres 内部的重量单位?
我的第一直觉是使用公制,但如果你必须使用英制,我建议你将重量存储为盎司,但有 [
Computed
|Calculated
|Virtual
|Derived
] 列 - 实际上Generated
在 PostgreSQL 中调用 - 请参阅此 wiki 文章Virtual columns
- 其中说“行业标准”是:PostgreSQL 通常非常善于坚持 SQL 标准!有关生成列的 PostgreSQL 文档可在此处获得。
英制单位 - 即以盎司为单位的重量(公制见下文):
我会有这样的东西(见小提琴here):
然后用一些示例数据填充它:
接着:
结果:
现在,不幸的是,PostgreSQL 还没有
VIRTUAL
生成字段的存储类型的关键字(不像 MySQL),这在这里会更好,但是 AIUI,它正在路上。此外,您没有提及您的 PostgreSQL 版本(您应该始终这样做),但在 12 之前的版本中执行此操作的方法在此处探讨。
SI (Système International) 单位 - 即重量,以公斤为单位。
我添加了一种方法来处理重量以公斤为单位的存储(SI 单位是任何数量恕我直言的理想存储介质)。从这里,“1 公斤 = 35.27396195 盎司”。相反,以盎司 (oz) 为单位的质量 m 等于以千克 (kg) 为单位的质量 m 除以 0.02834952(35.xxx 的倒数)。
从 PostgreSQL文档中,一个
REAL
变量:这应该足以满足大多数需求 - 如果没有,您可以使用
NUMERIC
orDECIMAL
类型,但是(来自同一页面):这种方法适用于最接近的盎司 - 我在这里测试过,它似乎运作良好。当然,如果您想要分数盎司来消除潜在的舍入误差,请保留它
REAL
(请原谅双关语!)!这里有一个小提琴:填充:
然后:
结果: