2011-01-25 5 views
3

Je suis en train de jouer avec l'apprentissage MVC et je veux créer une application enregistreur de recettes pour stocker mes recettes. J'utilise .net avec Sql Server 2008 R2 mais je ne pense pas que ce soit vraiment important avec ce que j'essaie de faire.stocker du poids dans une table de base de données

Je veux pouvoir enregistrer toutes les mesures que j'utilise. Dans mon pays, nous utilisons la métrique mais je veux que les gens puissent utiliser impérial avec mon application. Comment structurer ma table pour faire face aux différences, je pensais stocker toutes les mesures comme ints et avoir une clé étrangère pour stocker le type de poids.

Idéalement, je voudrais pouvoir partager les recettes entre les gens et afficher les mesures de la manière qui leur convient le mieux.

Est-ce le genre de façon

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

Ou est ainsi sur la bonne voie? Toute suggestion sera appréciée!

+2

Vous devriez aussi éviter de les appeler des poids. Le litre est un volume, tout comme la cuillère à café et la cuillère à soupe. Je les appellerais simplement unités de mesure. – paxdiablo

Répondre

5

Si vous stockez des poids (une valeur non-discrète), je suggère fortement d'utiliser numérique ou décimal pour ces données. Vous avez la bonne idée avec la colonne typeofweight. Stocker une table de référence quelque part montrant quel est le taux de conversion pour chacun (à une certaine norme). Cela devient assez difficile lorsque vous voulez afficher des onces en tant que TSP, car la conversion dépend de l'ingrédient lui-même, vous avez donc besoin d'un 3ème table - ingrédient: id, nom, rapport volume-poids.

Exemple table typeofweight, où l'unité standard est grammes

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

volume ingrédient Exemple de poids conversion

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

Donc, pour afficher 500 onces de sucre dans tsp, utilisez la formule

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

Un autre e xemple avec 2 poids

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

ou

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

merci cyberkiwi! ça m'aide :) Je souhaite juste que tout le monde utilise la métrique!Je pense que je serais d'accord avec des choses comme tsp et tbl, car je pense que cela serait toujours logique pour une personne utilisant la métrique d'utiliser un tsb de poudre à pâte dans une recette. Des choses comme une pincée de sel Je n'ai pas vraiment à m'inquiéter de la conversion, donc je devrais être bon. Merci encore –

+0

'mouillez vos mains sous le robinet'. «jeter deux fois dans la poêle à frire» .. convertir _that_ à tsp – RichardTheKiwi

+0

varchar (2000) :) –

6

Je pense que vous devriez stocker les poids (Kilo/Pound) etc comme un seul type de poids (métrique) et les simplement "affichage" dans la conversion correcte en utilisant la préférence de l'utilisateur. Si l'utilisateur a défini les paramètres de poids sur Impérial, les valeurs entrées dans le système doivent également être converties. Cela devrait simplifier vos données de toute façon.

Tout comme les dates, vous pouvez stocker chaque jour et ce fuseau horaire est de, ou autrement stocker toutes les dates que le même (ou pas fuseau horaire), puis de les afficher dans l'application à l'aide des compensations en fonction des préférences de l'utilisateur

+2

Le problème avec ceci est que 1 once = 28.3495231 grammes et 28 grammes devient 0.987670935 onces. Comment éviter ou traiter les erreurs d'arrondi lors du stockage de toutes les mesures dans un poids unifié? –

+0

@bien l'unité de mesure et le niveau de précision doit être décidé en fonction de la situation et d'un type de données approprié utilisé – davidsleeps

Questions connexes