mysql - 如何设计一个有很多用户并且每个用户都有多个联系人列表的数据库?

标签 mysql sql database database-design

到目前为止,我配置的只是一个用户表,其中每个用户都有一个唯一的user_id。但是,我需要存储每个用户的联系人列表。这只需要包含每个联系人的 user_id。然而,我面临着设计挑战。

我应该为每个用户创建一个表来存储该用户的联系人列表吗?这是一个可扩展的解决方案吗?

或者我应该创建一个包含两列的表,user_idcontact_id,看起来像这样:

------------------------------------
| user_id (INT) | contact_id (INT) |
------------------------------------
|    10001      |       9945       |
|    10001      |       2239       |
|    10002      |       9636       |
------------------------------------

我担心,如果我选择第二个选项,缺乏唯一索引和表的庞大尺寸最终会导致 SELECT * FROM contacts WHERE user_id=10001; 因为每个每次都需要迭代条目。

组织这些数据的最佳方式是什么?

最佳答案

单一标准化表绝对是正确的方法。

由于担心“缺乏索引”,您担心其性能。

缺乏索引?为什么缺乏索引?

设置您的主键(user_id,contact_id)——这在语义上是有意义的——这就是您所需要的。

从来没有,曾经有可变数量的 table 。 “每个用户一张表”是指您从我的团队中被解雇。 ;)

关于mysql - 如何设计一个有很多用户并且每个用户都有多个联系人列表的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17734812/

相关文章:

mysql - Where 子句中的未知列

使用 INNER JOIN 选择 PHP PDO

mysql - 添加与主 ID 键链接的其他表中的名称

mysql - QtCreator错误: QMYSQL driver not loaded

mysql - wp_posts 和 wp_postmeta 在 mysql 中是如何连接的?

php - 为什么 'SELECT count()' 返回值 'Array' ?

mysql - MySQL 5.5 添加用户问题

mysql - 左连接没有返回正确的信息

php - 如何创建sql文件?

mysql - 如何使用 phpMyadmin 在 mysql 数据库中更改具有不同变量的字符串