MySQL设计澄清

时间:2014-02-18 20:48:32

标签: php mysql sql facebook join

我是MySQL新手,但在各种编程语言方面有着相当扎实的背景。

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

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

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

目前我正在考虑使用

创建用户
  • Facebook ID(主键?)
  • 名称
  • 位置
  • 加入日期

然后使用

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

我认为这是我缺乏理解的地方。我如何以一种允许我将每个兴趣映射到“喜欢”那些兴趣的每个用户的方式在MySQL中复制列表或数组的概念? / p>

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

2 个答案:

答案 0 :(得分:3)

您可以使用第三个表将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'

答案 1 :(得分:1)

这种类型的设置称为“多对多”关系。为此,您需要3个表。 2个表包含您的数据,最后一个表包含映射表 以下是多对多关系的示例,其中两个对象是学生和课程 An example of a many-to-many relation

<小时/>

实施例

您的用户表如下所示:
(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

<小时/>

检查此

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