簡體   English   中英

在 MySQL 中實現多對多關系的最佳方式

[英]Best way to implement many-to-many relationship in MySQL

我有 2 個表,用戶(~1000 個用戶)和國家(~50 個國家)。 一個用戶可以支持多個國家,所以我打算創建一個映射表 user_country。 但是,由於我有 1000 個用戶和 50 個國家/地區,因此該表最多可以有 50000 個條目。 這是實現此目的的最佳方法還是有更合適的方法?

如果這是最好的方法,我如何僅使用一個 SQL 語句將支持多個國家/地區的用戶添加到該表中? 例如:

INSERT INTO user_country(userid, countrycode)
VALUES ('user001','US'),
('user001','PH'),
('user001','KR'),
('user001','JP')

如果用戶支持所有 50 個國家/地區,則上述 SQL 語句會太長。 我必須為 1000 個用戶做這件事。 任何人都有任何想法最有效的方法來實現這一點?

從數據庫設計的角度來看,像user_country這樣的表是唯一明智的做法。 50000 條記錄對 MySQL 來說輕而易舉,將它們與適當的索引放在一起將為這些數據提供未來使用的所有方式。

據我所知,這與許多大型SQL插入語句的問題無關。 無論您如何表示數據庫中的數據,您都必須為每個用戶編寫包含國家/地區列表的語句。

這是一次性操作,對吧? 所以它不需要成為軟件工程領域的傑作。 我有時做的是在 Excel 中逐行加載原始數據,然后編寫一個公式來“計算”第一行的適當 SQL 語句,並為所有行復制此公式。 然后將所有這些語句扔到數據庫中。 就算有幾萬,也算不上什么功夫。

我個人會根據選擇進行插入:

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 個用戶,因此 tablescan 也會非常快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM