Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中实现多对多关系的最佳方法_Mysql_Database_Database Design_Many To Many_Relational Database - Fatal编程技术网

在MySQL中实现多对多关系的最佳方法

在MySQL中实现多对多关系的最佳方法,mysql,database,database-design,many-to-many,relational-database,Mysql,Database,Database Design,Many To Many,Relational Database,我有两个表,用户(约1000个用户)和国家(约50个国家)。一个用户可以支持许多国家,所以我计划创建一个映射表,user\u country。但是,由于我有1000个用户和50个国家,因此此表最多有50000个条目。这是实现这一点的最佳方法还是有更合适的方法 如果这是最好的方法,那么如何仅使用一条SQL语句将支持多个国家/地区的用户添加到此表中? 例如: 如果用户支持所有50个国家/地区,则上述SQL语句将太长。我必须为1000个用户做这件事。任何人都知道最有效的方法来实现这一点吗?就我个人而言

我有两个表,用户(约1000个用户)和国家(约50个国家)。一个用户可以支持许多国家,所以我计划创建一个映射表,user\u country。但是,由于我有1000个用户和50个国家,因此此表最多有50000个条目。这是实现这一点的最佳方法还是有更合适的方法

如果这是最好的方法,那么如何仅使用一条SQL语句将支持多个国家/地区的用户添加到此表中? 例如:


如果用户支持所有50个国家/地区,则上述SQL语句将太长。我必须为1000个用户做这件事。任何人都知道最有效的方法来实现这一点吗?

就我个人而言,我会根据以下选择进行插入:

INSERT INTO user_country SELECT 'user001', countryid from countries WHERE countryid IN ('US', 'PH', 'KR', 'JP');
您需要适应您的列名

也可以选择将国家列表存储在一列中
usercountries varchar(255)
如US、FR、KR等,但您将无法根据用户支持的国家选择用户。事实上,你没有失去它,但是

SELECT * FROM users WHERE usercountries like '%KR%';

就索引使用而言,这不是一个好的查询。但是,由于您只有1000个用户,一个表也会非常快。

从数据库设计的角度来看,像您的
user\u country
这样的表是唯一明智的选择。50000条记录对于MySQL来说是轻而易举的事,将它们与适当的索引结合在一起将为这些数据的未来使用开辟所有途径

就我所见,这与许多大型SQL insert语句的问题无关。无论您如何表示数据库中的数据,都必须为每个用户编写包含国家列表的语句


这是一次性的行动,对吗?所以它不一定是软件工程中的杰作。我有时会在Excel中逐行加载原始数据,然后编写一个公式,为第一行“计算”相应的SQL语句,并为所有行复制此公式。然后在数据库中抛出所有这些语句。即使有上万个,也不费什么力气。

。最佳
country\u code
CHAR(2)字符集ascii
。谢谢。这就是我需要的。
SELECT * FROM users WHERE usercountries like '%KR%';