与用户,小组团队等一起进行MySQL数据库设计

时间:2019-01-30 19:01:51

标签: mysql database-design

需要帮助找出最好的方法是,来自不同表的具有自己的自动递增id的不同类型的对象需要与同一对象进行交互。

例如Facebook。您既可以将帖子作为一个组/页面,也可以将其作为一个页面。

因此,我试图弄清楚如何以最佳和最有效的方式实现这一目标。

这是我到目前为止所拥有的,我认为它可以工作,但是我真的需要对此发表第二意见。

假设我有以下表格

用户

+----+----------+----------+-----------+
| id | username | password | more cols |
+----+----------+----------+-----------+
|  1 | User1    | changeme | etc       |
|  2 | User2    | changeme | etc       |
|  3 | User3    | changeme | etc       |
+----+----------+----------+-----------+

+----+------------------+-----------+
| id |       name       | more cols |
+----+------------------+-----------+
|  1 | We who like cats | etc       |
|  2 | Funny videos     | etc       |
|  3 | Nice food pics   | etc       |
+----+------------------+-----------+

团队

+----+----------------+-----------+
| id |    teamname    | more cols |
+----+----------------+-----------+
|  1 | Team Alpha     | etc       |
|  2 | Team Golden    | etc       |
|  3 | Team Foo       | etc       |
+----+----------------+-----------+

所有这些对象都应该能够与另一个组,用户,团队或其他任何人创建的事物进行交互。现在,我们说团队alpha user3 都喜欢组有趣的视频上传的内容。然后,我需要知道是否存在喜欢此操作的用户,团队或组,才能获得喜欢此上传内容的对象的正确属性。

由于用户,团队或组可以具有相同的 id ,因此我需要一些独特的信息来知道是否应查看用户,组或团队表。

所以我想,如果我在下面创建用于与网站上的所有内容进行交互的下表,并根据 type_id 指向正确的表。

type_id 1 = users
type_id 2 = groups
type_id 3 = teams
+----+-----------+---------+
| id | object_id | type_id |
+----+-----------+---------+
|  1 |         1 |       1 |
|  2 |         1 |       2 |
|  3 |         2 |       1 |
|  4 |         2 |       3 |
|  5 |         1 |       3 |
+----+-----------+---------+

然后,我将 object_id 用于用户,组,团队或其他任何活动。

如果有更好的方法,请真的感谢所有对此的想法:)

1 个答案:

答案 0 :(得分:0)

我相信还有另一种方法。 我不能对此发表评论。

在“喜欢”表中,您可以拥有

team_id
group_id
user_id

所以您将拥有这样的

 +----+-----------+---------+---------+---------+
 | id | object_id | team_id |group_id |user_id  | 
 +----+-----------+---------+---------+---------+
 |  1 |         1 |       1 |NULL     |1        |
 |  2 |         2 |     NULL|1        |NULL     |
 +----+-----------+---------+---------++---------+

当团队/小组/用户不喜欢时,您可以拥有team_id , group_id, user_id0的{​​{1}},如果喜欢则可以拥有1。

下一次为用户或团队生成该行后,您将查看页面是否有喜欢的页面,如果添加,则只需添加喜欢页面或帖子的team_id即可。 希望对您有所帮助。