在 MySQL 中实现多对多关系的最佳方式
Best way to implement many-to-many relationship in MySQL
我有 2 个 table,用户(~1000 个用户)和国家(~50 个国家)。一个用户可以支持多个国家,所以我打算创建一个映射 table、user_country。但是,由于我有 1000 个用户和 50 个国家/地区,因此我将为此 table 最多添加 50000 个条目。这是实现这个的最佳方法还是有更合适的方法?
如果这是最好的方法,我如何仅使用一个 SQL 语句将支持多个国家/地区的用户添加到此 table?
例如:
INSERT INTO user_country(userid, countrycode)
VALUES ('user001','US'),
('user001','PH'),
('user001','KR'),
('user001','JP')
如果用户支持所有 50 个国家/地区,以上 SQL 语句将太长。我必须为 1000 个用户做这件事。有谁知道最有效的实现方法吗?
我个人会根据 select:
进行插入
INSERT INTO user_country SELECT 'user001', countryid from countries WHERE countryid IN ('US', 'PH', 'KR', 'JP');
您需要适应您的列名。
也可以将国家/地区列表存储在单个列 usercountries varchar (255)
中,如美国、法国、韩国等 - 但您将失去 select 用户的能力基于他们支持的国家。事实上你并没有失去它 - 但是
SELECT * FROM users WHERE usercountries like '%KR%';
就索引使用而言,这不是一个好的查询。但是由于您只有 1000 个用户,因此表扫描也将非常快。
从数据库设计的角度来看,像您的 user_country
这样的 table 是唯一明智的选择。 50000 条记录对 MySQL 来说轻而易举,将它们与适当的索引结合在一起将为这些数据开辟未来的所有使用方式。
据我所知,这与许多大型 SQL 插入语句的问题无关。无论您如何表示数据库中的数据,您都必须为每个用户编写包含国家/地区列表的语句。
这是一次性的动作吧?所以它不需要成为软件工程中的杰作。我有时做的是逐行加载 Excel 中的原始数据,然后写一个公式 "calculates" 第一行的适当 SQL 语句,然后将此公式复制到所有行.然后将这些语句全部丢到数据库中。就算有几万,也不费多少力气。
我有 2 个 table,用户(~1000 个用户)和国家(~50 个国家)。一个用户可以支持多个国家,所以我打算创建一个映射 table、user_country。但是,由于我有 1000 个用户和 50 个国家/地区,因此我将为此 table 最多添加 50000 个条目。这是实现这个的最佳方法还是有更合适的方法?
如果这是最好的方法,我如何仅使用一个 SQL 语句将支持多个国家/地区的用户添加到此 table? 例如:
INSERT INTO user_country(userid, countrycode)
VALUES ('user001','US'),
('user001','PH'),
('user001','KR'),
('user001','JP')
如果用户支持所有 50 个国家/地区,以上 SQL 语句将太长。我必须为 1000 个用户做这件事。有谁知道最有效的实现方法吗?
我个人会根据 select:
进行插入INSERT INTO user_country SELECT 'user001', countryid from countries WHERE countryid IN ('US', 'PH', 'KR', 'JP');
您需要适应您的列名。
也可以将国家/地区列表存储在单个列 usercountries varchar (255)
中,如美国、法国、韩国等 - 但您将失去 select 用户的能力基于他们支持的国家。事实上你并没有失去它 - 但是
SELECT * FROM users WHERE usercountries like '%KR%';
就索引使用而言,这不是一个好的查询。但是由于您只有 1000 个用户,因此表扫描也将非常快。
从数据库设计的角度来看,像您的 user_country
这样的 table 是唯一明智的选择。 50000 条记录对 MySQL 来说轻而易举,将它们与适当的索引结合在一起将为这些数据开辟未来的所有使用方式。
据我所知,这与许多大型 SQL 插入语句的问题无关。无论您如何表示数据库中的数据,您都必须为每个用户编写包含国家/地区列表的语句。
这是一次性的动作吧?所以它不需要成为软件工程中的杰作。我有时做的是逐行加载 Excel 中的原始数据,然后写一个公式 "calculates" 第一行的适当 SQL 语句,然后将此公式复制到所有行.然后将这些语句全部丢到数据库中。就算有几万,也不费多少力气。