【问题标题】:MySQL Design ClarificationMySQL 设计说明
【发布时间】:2014-02-18 20:48:31
【问题描述】:

我是 MySQL 新手,但对各种编程语言都有相当扎实的背景。

现在我正在从头开始设计我的第一个数据库。我了解 MySQL 表的基本功能以及关系数据库是什么,但我无法理解一些事情,所以我发布这个寻求帮助(搜索没有用,我一直在使用的术语是太笼统了,我不知道如何缩小范围)。这就是我卡住的地方:

我想提取 Facebook 数据,特别是兴趣(“喜欢”)和用户位置。

如果这是某种 OO 语言,我只会为用户创建一个包含所有信息(Facebook ID、兴趣作为数组、位置)的数据结构,但我不确定如何在 MySQL 中重新创建它。

现在我正在考虑使用

创建一个 users
  • Facebook ID(主键?)
  • 姓名
  • 位置
  • 加入日期

然后用

创建一个interests
  • 兴趣名称(索引,按字母顺序排序?)
  • 可能有一些用户对此感兴趣
  • 与每个用户相关的外键

我认为这就是我缺乏理解的原因。我如何在 MySQL 中复制列表或数组的概念,以允许我将每个兴趣映射到每个“喜欢”该兴趣的用户?

非常感谢任何其他关于优秀教程网站的建议、想法或指导。我是一个触觉学习者,所以通过教程弄脏我的手对我来说非常棒,我只是还没有找到涵盖这个的教程。

【问题讨论】:

    标签: php mysql sql facebook join


    【解决方案1】:

    您可以使用第三个表将interests 表链接到user 表。只有当用户喜欢这种兴趣时才会有记录:

    User_Interest

    Interest_ID
    User_ID
    

    获取包含所有兴趣的用户列表:

    SELECT u.Name, i.Interest_Name
    FROM Users AS u
    INNER JOIN User_Interest AS ui ON ui.User_ID = u.ID
    INNER JOIN interests AS i ON i.ID = ui.Interest_ID
    WHERE u.Name = 'Tom Jones'
    

    要获取特定兴趣和所有喜欢的用户的列表:

    SELECT u.Name, i.Interest_Name
    FROM Users AS u
    INNER JOIN User_Interest AS ui ON ui.User_ID = u.ID
    INNER JOIN interests AS i ON i.ID = ui.Interest_ID
    WHERE i.Interest_Name = 'Hiking'
    

    【讨论】:

    • 感谢灵儿的快速回复。根据您的回答和 Krimson 提出的几个问题。多个用户可能有数千个兴趣是否可以?相反,是否预期我会看到每个 User_ID 的大量行?这种第三个映射表是多对多关系的标准吗?谢谢!
    • 是的,它是链接多对多关系的标准。它将能够处理与您 INSERT 一样多的记录。所以,千种兴趣应该不是问题。您正在使用主键和外键,因此它们将被索引并有助于自然加快速度。
    • 另外一点:在User_Interest 表中,确保在Interest_IDUser_ID 上设置复合键。这将确保您不会为同一用户获得任何重复的喜欢的兴趣。您可以在 Krimson 的 答案中直观地看到这一点,并使用 StudentCourseEnrollment 表。
    • 很高兴知道,我会添加复合键。
    【解决方案2】:

    这种类型的设置称为“多对多”关系。为此,您将需要 3 张桌子。 2 个表包含您的数据,最后一个表是映射表。
    这是一个多对多关系示例,其中两个对象是学生和课程


    示例

    您的用户表如下所示:
    (ID_User, User_Name, ...)

    您的兴趣表如下所示:
    (ID_Interest, Interest_Name, ...)
    现在您的映射表将如下所示:
    (ID_User, ID_Interest)


    样本数据

    现在让我们将一些数据放入表格中

    User_Table
    ------------------------
    ID_user | Username | ...
    ------------------------
       1       John  
       2       Mark 
       3       Foo
       4       Bar
    


    Interest_Table
    ----------------------------------
    ID_Interest | Interest_Name | ... 
    ----------------------------------
       001         Pop
       002         Rock
       003         Alternative
       004         Rap
    


    User_To_Interest (Mapping Table)
    ---------------------------
    ID_user | ID_Interest
    ---------------------------
      1          001
      1          003
      3          002
      2          004
      4          001
    


    检查这个

    好的,如果您分析已设置的内容,我们正在将用户映射到兴趣。映射表将用户对象的连线添加到兴趣对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2012-04-14
      • 2023-04-02
      • 1970-01-01
      • 2017-05-28
      • 2010-12-14
      相关资源
      最近更新 更多