sql - 数据库结构 - 通过外键和求和填充表
问题描述
下午好,
我一直在尝试集思广益来做到这一点,但到目前为止我一直无法想到可靠的方法。作为最后的手段,我决定向堆栈溢出方面的聪明人请教一些关于我应该如何做到这一点的建议。开始之前的一些前言,我使用的是 SMSS 18 和 Microsoft SQL Server 2017。
首先,我将向您展示我想用这个实现的主干数据库:
- 我应该以另一种方式构建数据库来实现我想要实现的目标吗?(一种记录所有卡路里总和的膳食的方法,等等。)
是否可以使用外键填充外部表中的列?例如使用 X 作为主键,用 Y 作为外键填充 Z 列(在另一个表中)
我该如何包装它并使用 SMSS 创建外键来自动执行此操作?
是否可以在 MSSQL 中进行求和?我想获得最终膳食表中的卡路里总和,以便以后可以在 tableau 中使用该数据进行比较并创建该数据的表示形式。我应该让 tableau 这样做还是可以使用 MSSQL 这样做?
我现在到处都是,我知道我的问题似乎令人生畏,但如果您遗漏任何内容,我很乐意提供更多信息。
我已经规划和设计了数据流——但我不知道如何在 MSSQL 中准确地实现这种架构。
先感谢您。
解决方案
好吧,我想这不是你问题的真正答案......
我希望有这样的数据模型:
- 成分(成分 ID、成分名称、卡路里、脂肪……)
- 膳食(meal_id,meal_name)
- meal_ingredient (meal_id, ingredients_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、meal_id、consume_date、consume_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 的意义所在。
推荐阅读
- django - Django restframework 搜索功能不返回所需的输出?
- python - 每当打开exe时自动将ffmpeg目录附加到路径?
- php - 为什么 Woocommerce 以编程方式更新价格在 woocommerce_add_cart_item_data 挂钩中不起作用
- python-3.x - Selenium - 只有类名的下拉列表,无法在我当前的网站上使用 selenium 找到元素
- cppcheck - CppCheck 在调用时使用 -I 的 headerfolders 报告的错误更少,然后没有
- debugging - 尽管蓝图中有 IsValid 块,但 Niagara 粒子系统 IsValid 错误?
- java - 由于一切设置正确,Google Firebase 实时数据库无法正常工作
- android - Facebook 竞价与 Android 中的 MAX 集成
- python - Python多线程事件监听器
- python-3.x - 如何使用 matplotlib 显示颜色图