Nic*_*ick 5 database-design datatypes
Money 由美元和美分组成,但存储为一个字段,因为美元和美分是相同值的属性,而不是值本身(您可以使用简单的数学方法在两者之间进行转换)。重量由磅和盎司组成,但出于同样的原因也存储在单个列中。
同样,看起来 x、y 和 z 维度实际上也只是一个值,具有三个属性,因为在应用程序中几乎不需要知道 x 没有 y 和 z(但您可能希望离散地查询它们)。
在 OOP 中,我们通常创建对象来处理特殊的原始类型,如日期、货币、重量和尺寸。但与其他基元不同的是,您不能简单地将维度相加并将它们填充到十进制列中并希望再次将它们取出。
您可以将维度存储在varchar
带有分隔符的 a 中,例如7;4,2;2
,但这会使对某些值的任何查询变得困难。IE。“获取具有最长(任何维度)边的记录”。
当然,将 x、y 和 z 存储在单独的十进制列中的传统方法也会遇到“获取最长边”查询的问题,因为数据库不会将它们视为一个值集合。(您必须获得每个结果中最长的一个,然后是三个结果中最长的一个)。
所以我正在研究似乎是为地图制作而设计的空间数据类型,但我发现设计用于在 3d 空间中保存坐标的数据类型可能同样适用于定义 3d 对象,因为它仍然是一个集合x、y 和 z 被视为一个字段中的一个内聚单位,能够分别查询坐标。
不幸的是,我很难找到有关使用空间类型的好信息,我不确定它们是否可以以这种方式使用。
空间类型可以用于存储 3 维对象的维度吗?
空间类型可以用来存储 3 维对象的尺寸吗?
是的, ST_MakePoint当然需要 Z 线(甚至 M 线,你好!)
金钱是由美元和美分组成的,但存储为一个字段,因为美元和美分是具有相同价值的属性,而不是值本身(您可以使用简单的数学在两者之间进行转换)。重量由磅和盎司组成,但出于同样的原因也存储在单列中。[...] 同样,看起来 x、y 和 z 维度实际上也只是一个值,具有三个属性,因为在应用程序中几乎不需要知道没有 y 和 z 的 x(但您可能想查询他们离散)。
美元是美分的独特函数;磅是盎司的独特函数,(x,y,z)
与此完全不同。它们是离散空间维度的三个坐标。
您可以将维度存储在带有分隔符的 varchar 中,例如 7;4,2;2,但这会使对某些值的任何查询变得困难。IE。“获取具有最长(任何维度)边的记录”。
重新发明轮子是没有意义的。您可以通过多种方式存储它们。它们往往存储 ISO/IEC 13249-3:2011 的内容,详细信息请参见 PostGIS。
当然,将 x、y 和 z 存储在单独的十进制列中的传统方法也会存在“获取最长边”查询的问题,因为数据库不会将它们视为一个值集合。(您必须获得每个结果中最长的一个,然后是三个结果中最长的一个)。
存储 (x,y,z) 的传统方法是使用空间 3d 类型。
归档时间: |
|
查看次数: |
85 次 |
最近记录: |