数据库结构-通过外键和求和填充表

时间:2019-03-17 11:26:42

标签: sql sql-server database foreign-keys ssms

下午好,

我一直在尝试集思广益,以实现此目的,但到目前为止,我还没有想到任何可靠的方法。作为最后的选择,我决定问一些关于堆栈溢出的聪明人,以提供一些有关如何执行此操作的建议。开始之前,我正在使用SMSS 18和Microsoft SQL Server 2017。

首先,我将向您展示我想通过此实现的骨干数据库:

The database structure in question

  1. 我应该以另一种方式构造数据库来实现我想要实现的目标吗? (一种记录所有热量之和的餐食的方法)
  2. 是否可以使用外键填充外表中的列?例如。使用X作为主键,使用Y作为外键填充Z列(在另一个表中)

  3. 如何将其包装起来并使用SMSS创建自动执行此操作的外键?

  4. 是否可以在MSSQL中进行求和?我想在最终膳食表中获取卡路里的总和,以便以后可以在Tableau中使用该数据进行比较并创建该数据的表示形式。我应该让tableau这样做还是可以使用MSSQL做到这一点?

我现在到处都是,我知道我的问题似乎令人生畏,但是如果您有任何遗漏,我很乐意提供更多信息。

我已经计划和设计了数据流-但是我不知道如何在MSSQL中准确实现此体系结构。

谢谢。

1 个答案:

答案 0 :(得分:0)

好吧,我想这并不是您问题的答案...

我希望这样的数据模型:

  • 成分(ingredient_id,成分名称,卡路里,脂肪,...)
  • 餐(餐号,餐名)
  • 膳食成分(meal_id,meament_id,金额)

然后每餐您将计算:

select mi.meal_id, sum(i.calories * mi.amount), sum(i.fat * mi.amount)
from ingredient
join meal_ingredient mi on mi.ingredient_id = i.ingredient_id
group by mi.meal_id;

对于进餐的人:

  • 人(person_id,姓名)
  • person_meal(person_id,meat_id,consumate_date,consumer_amount)

查询人员的日常消费:

select
  pm.person_id, pm.consume_date,
  sum(i.calories * mi.amount * pm.consume_amount),
  sum(i.fat * mi.amount * pm.consume_amount)
from ingredient
join meal_ingredient mi on mi.ingredient_id = i.ingredient_id
join person_meal pm on pm.meal_id, mi.meal_id
group by pm.person_id, pm.consume_date
order by pm.person_id, pm.consume_date;

我们不会多余地存储结果,因为我们总是可以编写查询以从表中获取结果。毕竟,这就是SQL的意义。