数据库设计有多种选择

时间:2018-12-24 20:34:05

标签: sql database postgresql schema

我有一个 Users 表,我正在构建一个应用程序,该程序可以跟踪一个人每天吃多少水果。

当用户进入应用程序时,他们选择每天要吃的水果。该表将如下所示:

CurrentlyEating
---------------
ID
FruitID (Foreign Key)
UserID (Foreign Key)

还需要一个包含用户可能采摘的所有水果的表:

Fruits
------
ID
Name

这是实现这一目标的最佳方法吗?我一直在阅读查询表,但不确定这是否是更好的方法。另外,如果我决定在此表中添加更多水果,则需要在前端轻松进行更新。

最后,我还有一个名为Journal的最后一个表,该表记录了用户每天吃的特定水果的数量:

Journal
-------
ID
DateTime
FruitID (Foreign Key)
UserID (Foreign Key)
AmountConsumed

因此,总的来说,我只想知道我的方法是否是实现此目标的最佳方法,以及是否有更有效的方法。

谢谢

2 个答案:

答案 0 :(得分:0)

您的总体方法看起来不错:拥有一个引用表来存储所有可能的结果,然后使用外键进行引用。创建一个单独的表以保留用户选项也是一个好主意。

这是总体设计:

表USER(您已经有):

id    ...
 1

桌果:所有可能的水果(可以添加更多信息,例如:每克卡路里,...)

id    name      ...
 1    orange
 2    banana

USER_FRUITS:哪个用户选择了哪种水果(此处,用户1选择了香蕉)

id    user_id    fruit_id
 1             1              2

JOURNAL:哪个用户食用了哪个水果(用户1吃了20克香蕉)

id    datetime     user_id    fruit_id    amount
 1         ...                    1              2          20

基于此设计,这是一个查询,该查询返回给定用户的日志:

SELECT j.datetime, f.name, j.amount
FROM journal as j 
INNER JOIN fruits as f ON f.fruit_id = j.id
WHERE j.user_id = ?
ORDER BY  j.datetime

答案 1 :(得分:0)

我认为您的做法很好。这是保存此数据结构的最佳方法。