将权重存储在数据库表中

Div*_*Dan 3 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 
Run Code Online (Sandbox Code Playgroud)

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

dav*_*eps 6

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

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

  • 这个问题是1盎司= 28.3495231克,28克变成0.987670935盎司.在将所有测量值存储在统一权重中时,如何避免或处理舍入误差? (2认同)

Ric*_*iwi 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
Run Code Online (Sandbox Code Playgroud)

示例成分体积与重量转换

type   | vol-to-weight
water  | 1
sugar  | 1.4          // i.e. 1 tsp holds 5g of water, but 7g of sugar
Run Code Online (Sandbox Code Playgroud)

因此,要显示500盎司的糖tsp,您将使用该公式

  units x ounce.conversion x sugar.vol-to-weight
= 500   x 28.35            x 1.4
Run Code Online (Sandbox Code Playgroud)

另一个有2个权重的例子

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

要么

Ingredient is specified as 3 ounces of starch.  Show in pounds
= 3 * 28.35 / 453.59
Run Code Online (Sandbox Code Playgroud)