将权重存储在数据库表中

时间:2011-01-25 02:39:05

标签: sql sql-server database-design sql-server-2008-r2

我正在玩学习MVC并希望创建一个食谱记录器应用程序来存储我的食谱。

我正在使用.net与Sql Server 2008 R2但是我不认为这对我想做的事情真的很重要。

我希望能够记录我使用的所有措施。在我的国家,我们使用公制,但我希望人们能够在申请时使用英制。

如何构建我的表以应对差异,我正在考虑将所有测量值存储为整数并且有一个外键来存储重量类型。

理想情况下,我希望能够在人与人之间分享食谱,并以他们喜欢的方式显示测量结果。

这是正确的方式

IngredientID PK
Weight int
TypeOfWeight int e.g. tsp=1,tbl=2,kilogram=3,pound=4,litre=5,ounce=6 etc
UserID int 

或者这种方式偏离轨道?任何建议都会很棒!

2 个答案:

答案 0 :(得分:6)

我认为你应该将权重(Kilo / Pound)等存储为单一权重类型(公制),并使用用户的偏好在正确的转换中“显示”它们。如果用户将重量设置设置为英制,则还需要转换输入系统的值。无论如何,这应该简化您的数据。

与日期类似,您可以存储每个日期和时区,或以其他方式存储所有日期(或没有时区),然后根据用户的偏好使用偏移在应用程序中显示它们

答案 1 :(得分:5)

如果您正在存储权重(非离散值),我强烈建议对此数据使用数字或小数。您对typeofweight列有正确的想法。在某处存储一个参考表,显示每个参考表的转换率(达到某个标准)。

当您想要将盎司显示为TSP时,这会非常棘手,因为转换取决于成分本身,因此您需要第3个表 - 成分:id,名称,体积与重量比。

示例typeofweight表,其中standard单位为克

type   | conversion
gram   | 1
ounce  | 28.35
kg     | 1000
tsp    | 5            // assuming that 1 tsp = 5 grams of water
pound  | 453.59

成分体积与重量转换的实例

type   | vol-to-weight
water  | 1
sugar  | 1.4          // i.e. 1 tsp holds 5g of water, but 7g of sugar

所以要在tsp中显示500盎司的糖,你可以使用公式

  units x ounce.conversion x sugar.vol-to-weight
= 500   x 28.35            x 1.4

另一个有2个权重的例子

Ingredient is specified as 3 ounces of starch.  Show in grams
= 3 x 28.35    (straightforward isn't it)

Ingredient is specified as 3 ounces of starch.  Show in pounds
= 3 * 28.35 / 453.59