【问题标题】:SQL - How to appropriately setup multiple values in one column linked to values in another table?SQL - 如何在一个列中正确设置多个值,该列链接到另一个表中的值?
【发布时间】:2014-01-14 23:24:42
【问题描述】:

我目前正在建立一个包含两个表的简单数据库。其中一个包含用户、他们的登录信息等。该表还有一列是他们想吃的食物。

另一张桌子包含他们可以选择的食物。每种食物都有一个 ID 号。

目前,我正在考虑用逗号分隔 User Food 列的值,然后通过遍历它们从另一个表中获取每种食物。

例如:

用户:我想吃的食物 - “1, 4, 3”

食物: 1 - 苹果 2 - 橙色 3 - 香蕉 4 - 饼干

但是,这对我来说似乎是错误的做法。任何人都可以提出一种替代/正确的方法来实现这一点吗?

【问题讨论】:

    标签: sql primary-key


    【解决方案1】:

    您应该使用第三张表 users_food (user_id, food_id) 在用户和食物之间建立 N-N 关系。

    http://en.wikipedia.org/wiki/Database_normalization

    【讨论】:

      【解决方案2】:

      正确的方法是使用第三张表

      Create table UserFoods (UserID int, FoodID int)
      

      每个用户的行数与用户喜欢的食物一样多,即如果用户 1 喜欢苹果和橙子,而用户 2 喜欢苹果和香蕉,那么 UserFoods 中的值将如下:

      UserID | FoodID
      ---------------
           1 |      1
           1 |      2
           2 |      1
           2 |      3
      

      这种方法的一些优点:

      • 您可以通过简单的插入而不是附加向用户添加食物
      • 您可以通过简单的删除操作从用户那里删除食物,而不是进行昂贵的字符串操作
      • 您可以从系统中删除食物(即不再有 cookie),只需从 UserFoods 表中删除所有相关行,而不是争论所有首选食物字符串。
      • 您可以轻松查询食物是否被使用,或食物被多少人使用
      • 您可以进行简单的“最喜欢的食物”查询
      • 等等等等……

      【讨论】:

      • 感谢您的详细解释,但 Johnny_H 先回答了!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多