【问题标题】:Database design for multiple options多种选择的数据库设计
【发布时间】:2019-05-23 20:32:41
【问题描述】:

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

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

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

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

Fruits
------
ID
Name

这是实现这一目标的最佳方式吗?我一直在阅读查找表,但我不确定这是否是更好的方法。另外,如果我决定在以后向这张桌子添加更多水果,我需要它在前端易于更新。

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

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

总的来说,我只想知道我的方法是否是解决此问题的最佳方法,以及是否有更有效的方法。

谢谢

【问题讨论】:

    标签: sql database postgresql schema


    【解决方案1】:

    我认为你的方法很好。它是保存这种数据结构的最佳方式。

    【讨论】:

      【解决方案2】:

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

      这是一个整体设计:

      表 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
      

      【讨论】:

      • 如果我想在以后更新选择,FRUITS 表将是最佳选择?
      • 是的,这正是这张表的重点,您可以在需要时轻松添加新水果
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2019-07-06
      • 2011-09-06
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      相关资源
      最近更新 更多