Mysql 数据库设计与用户、组团队等

标签 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       |
+----+----------------+-----------+

所有这些对象都应该能够与另一个组、用户、团队或其他任何人创建的东西进行交互。现在假设 team alphauser3 都喜欢 funny videos 组上传的内容。然后我需要知道是否有用户、团队或组喜欢这个,以获得喜欢这个上传的对象的正确属性。

由于用户、团队或组可以具有相同的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 用于用户、组、团队或任何人进行的每次交互。

如果有更好的方法,我真的很感激所有关于这个的想法:)

最佳答案

我相信还有另一种方法。 我无法发表评论,这就是我回答的原因。

在你的“LIKES”表中你可以拥有

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_id0NULL,如果他们喜欢,则为 1 .

一旦为用户或团队生成了行,下次您查看页面是否有任何喜欢的内容,如果有,您只需添加喜欢该页面或帖子的 team_id。 希望对您有所帮助。

关于Mysql 数据库设计与用户、组团队等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54447768/

相关文章:

MySQL如何根据字段是否存在来插入新记录或更新字段?

mysql - 如何在mysql中使用select语句调用存储过程

python - 在 Django 中创建相同的模型

php - 我如何获取从一个页面到另一个重定向页面的数组ID

python - MySQL:从查询中获取列名或别名

database-design - PostgreSQL 的数据库图表工具

mysql - 跟踪数据库表更改

sql-server-2008 - SQL Azure 性能注意事项

database - SQL Server 数据库架构

database-design - 确保开源数据库中记录值的完整性