Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何为单位转换表建模?_Database_Modeling - Fatal编程技术网

Database 如何为单位转换表建模?

Database 如何为单位转换表建模?,database,modeling,Database,Modeling,我希望创建一个各种单元及其相互关系的db模型。例如,36英寸=3英尺=1码=0.9144米等等。这张桌子还可以储存盎司、磅、千克、克、厘米和各种尺寸的杯子 你是怎么做到的?我在想这样的事情: Amount | Units | ConversionFactor | ConversionUnits 1 | foot | 12 | inches 1 | yard | 36 | inches 金额|单位|换算系数|换算单位

我希望创建一个各种单元及其相互关系的db模型。例如,36英寸=3英尺=1码=0.9144米等等。这张桌子还可以储存盎司、磅、千克、克、厘米和各种尺寸的杯子

你是怎么做到的?我在想这样的事情:

Amount | Units | ConversionFactor | ConversionUnits 1 | foot | 12 | inches 1 | yard | 36 | inches 金额|单位|换算系数|换算单位 1英尺12英寸 1码36英寸 但坦率地说,这似乎是个糟糕的主意。试图计算出一个院子里有多少英尺是非常复杂的,而且我认为我永远无法存储我需要的所有转换

还有什么其他想法?我知道这是一个已解决的问题。谢谢

存储,而不是其他非公制单位。然后,您可以在中的单元之间进行转换,而无需知道显式转换

Unit         | Class      | Base Unit Multiplier
------------------------------------------------------
foot         | length     | 0.304800610
yard         | length     | 0.914401830
square foot  | area       | 0.092903040
...
因此,14英尺码是:

14 feet * 0.304800610 = 4.26720854 meters
4.26720854 meters * 0.914401830⁻¹ = 4.66666667 yards

我认为原始帖子提出的模式很好,除了不包括类(如Seth的回答中所述)——你不想尝试在品脱和英寸之间转换

如果两个单位都不是转换单位,则只需检索两个单位的转换记录并将一个系数除以另一个系数(例如36/12=一码中的3英尺),即可实现两个单位之间的转换

如果您特别关心准确性,您可以确保给定类的所有单元都有同一类中所有其他单元的条目-但这让我觉得有些过分。

为您感兴趣的每个单元选择一个基本单元(阅读该wiki页面,它会很有用)。例如,如果您的大多数数据是以国际单位制为单位的,那么您可以选择千克表示质量,秒表示时间,米表示距离,等等。如果您的大多数数据以美国单位表示,请从中选择单位,例如磅表示质量,英尺表示长度,秒表示时间

然后,对于您希望能够处理的每个实际单位,将转换系数存储到尺寸合适的基本单位。所以,如果你选择脚作为你的基本距离单位,储存

Unit    Dimension    Factor
Foot    Distance     1
Metre   Distance     3.28084
Mile    Distance     5280
要真正进行转换,检查尺寸匹配后,只需乘以源单位的
因子
,然后除以目标单位的
因子
。例如,要从米到英里,乘以3.28084,然后除以5280

CREATE TABLE UnitConversion
(
    [FromUnit] NVARCHAR(100),
    [ToUnit] NVARCHAR(100),
    [FromOffset] DECIMAL(29,10),
    [Multiplicand] DECIMAL(29,10),
    [Denominator] DECIMAL(29,10),
    [ToOffset] DECIMAL(29,10)
)

ToUnit=(FromUnit+FromOffset)*被乘数/分母+ToOffset

为什么需要在数据库中存储转换单位?他们不会改变的。啊,如果你们采用公制,这将是多么简单。但这是另一个讨论,因为我想储存食物及其营养信息。我想输入一个以克为单位的配方,并在我喜欢时将其转换为盎司。-1对于国际单位制-此解决方案仅在国际单位制为标准的情况下可能有用,否则可能会引入舍入误差(例如,如果在英尺和码之间转换)。包括等级,以+1进行平衡。@马克-国际单位制是标准(无论如何,对于我们60亿人来说:)此外,你也可能会得到英制单位的舍入误差,例如:
1英尺=0.000189394英里。
。你在哪个波特兰?:)我通常会建议选择尽可能最小的转换单位作为基本单位。有没有办法将这种方法扩展到包括温度(F-C,反之亦然)等转换,这些转换与单个乘数无关?(见后续问题。)