动态值的数据库结构

时间:2015-06-11 06:48:53

标签: mysql sql database database-design

我正在开发一个新项目,我可以在设计数据库时使用一些帮助。

想象一下这些表:

table groups
---------------------
group_id


table supplements
---------------------
supp_id
supp_name
supp_price


table recipes
---------------------
rec_id
supp_id
supp_weight 

所以,让我解释一下。

用户可以将groups(动物)添加到他的帐户中。他还可以添加(食物)supplements。使用两个或更多supplements他可以创建recipe

到目前为止没有任何问题。

然后用户必须能够注册他给动物的食物。所以我需要一张表given_food或其他东西。通常情况下,我会使用rec_id并将其添加到表中,并与group_iddate相结合,

  • 用户应该能够偏离recipe。这意味着他可能会喂食90%或110%的配方。
  • 补充剂的价格可能每周(或甚至每天)偏离。我们想要注册费用,因此如果用户现在更改价格,不应影响过去已经给定的食谱。

所以问题是,如何在数据库中最好地保存这些信息?

1 个答案:

答案 0 :(得分:1)

对于费用,您应该添加一个定价表,如

table prices
-----------
p_id
p_suppid
p_price
p_validfrom   -- date at which new price was given

并且组表应配备amount列:

table groups
------------
g_id
g_recid
g_amount  -- percentage of nominal amount (90 ... 110)

通过加入这些表,您应该能够组织所需的所有数据。可以通过

找到特定日期(当前日期)的'补充剂(或成分)的有效价格
SELECT supp_id, p_price FROM supplements 
INNER JOIN prices ON p_id=( SELECT p_id   -- finds id of the latest
                            FROM prices   -- pricing info before currentdate
                            WHERE p_suppid=supp_id 
                            AND p_validfrom < currentdate
                            ORDER BY p_validfrom DESC LIMIT 1 )